欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python腳本實現(xiàn)獲取IP地址

 更新時間:2025年03月07日 11:01:56   作者:穿梭的編織者  
這篇文章主要為大家詳細(xì)介紹了如何基于Python編寫一個腳本,可以實現(xiàn)獲取主機名、外網(wǎng)IP(通過多個公共API嘗試) IPV4和IPV6以及所有網(wǎng)絡(luò)接口的內(nèi)網(wǎng)IP,感興趣的可以了解下

一、腳本功能

1.獲取主機名

2.獲取外網(wǎng)IP(通過多個公共API嘗試) IPV4和IPV6

3.獲取所有網(wǎng)絡(luò)接口的內(nèi)網(wǎng)IP

4.保存至文件并打印信息

輸出示例:

主機名: MyComputer

內(nèi)網(wǎng)IPv4地址:
  - 192.168.1.100
  - 192.168.56.1

內(nèi)網(wǎng)IPv6地址:
  - 2001:0db8:85a3:0000:0000:8a2e:0370:7334

外網(wǎng)IPv4: 203.0.113.1
外網(wǎng)IPv6: 2001:0db8:85a3:0000:0000:8a2e:0370:7334

二、注意事項

1.獲取外網(wǎng)IP需要網(wǎng)絡(luò)連接

2.某些網(wǎng)絡(luò)環(huán)境可能會阻止訪問IP查詢服務(wù)

3.如果在代理或VPN環(huán)境下,獲取的外網(wǎng)IP可能是代理或VPN的IP

4.內(nèi)網(wǎng)IP可能會有多個,特別是在有多個網(wǎng)絡(luò)接口的情況下

5.考慮暫時關(guān)閉防火墻

6.如果你的網(wǎng)絡(luò)不支持 IPv6,那么相關(guān)的 IPv6 地址將顯示為"無法獲取"

7.某些系統(tǒng)可能需要管理員權(quán)限才能獲取完整的網(wǎng)絡(luò)接口信息

三、準(zhǔn)備工作

導(dǎo)入庫:

import socket
import requests
import json
import time
from datetime import datetime

四、完整代碼

import socket
import requests
import json
import time
from datetime import datetime
 
 
def get_external_ipv4():
    """獲取外網(wǎng)IPv4地址"""
    apis = [
        {
            'url': 'https://api.ipify.org?format=json',
            'timeout': 5,
            'headers': {'User-Agent': 'Mozilla/5.0'},
            'json': True,
            'key': 'ip'
        },
        {
            'url': 'https://api4.ipify.org?format=json',
            'timeout': 5,
            'headers': {'User-Agent': 'Mozilla/5.0'},
            'json': True,
            'key': 'ip'
        },
        {
            'url': 'https://ipv4.icanhazip.com',
            'timeout': 5,
            'headers': {'User-Agent': 'curl/7.64.1'}
        }
    ]
 
    for api in apis:
        try:
            print(f"嘗試從 {api['url']} 獲取外網(wǎng)IPv4...")
            response = requests.get(
                url=api['url'],
                timeout=api['timeout'],
                headers=api['headers']
            )
 
            if response.status_code == 200:
                if api.get('json'):
                    data = response.json()
                    return data[api['key']]
                else:
                    return response.text.strip()
 
        except Exception as e:
            print(f"當(dāng)前接口請求失敗: {str(e)}")
            continue
 
    return "無法獲取IPv4地址"
 
 
def get_external_ipv6():
    """獲取外網(wǎng)IPv6地址"""
    apis = [
        {
            'url': 'https://api6.ipify.org?format=json',
            'timeout': 5,
            'headers': {'User-Agent': 'Mozilla/5.0'},
            'json': True,
            'key': 'ip'
        },
        {
            'url': 'https://ipv6.icanhazip.com',
            'timeout': 5,
            'headers': {'User-Agent': 'curl/7.64.1'}
        }
    ]
 
    for api in apis:
        try:
            print(f"嘗試從 {api['url']} 獲取外網(wǎng)IPv6...")
            response = requests.get(
                url=api['url'],
                timeout=api['timeout'],
                headers=api['headers']
            )
 
            if response.status_code == 200:
                if api.get('json'):
                    data = response.json()
                    return data[api['key']]
                else:
                    return response.text.strip()
 
        except Exception as e:
            print(f"當(dāng)前接口請求失敗: {str(e)}")
            continue
 
    return "無法獲取IPv6地址"
 
 
def get_internal_ips():
    """獲取內(nèi)網(wǎng)IP地址(同時獲取IPv4和IPv6)"""
    internal_ips = {'ipv4': [], 'ipv6': []}
 
    try:
        # 獲取所有網(wǎng)絡(luò)接口的所有IP
        hostname = socket.gethostname()
        addrs = socket.getaddrinfo(hostname, None)
 
        for addr in addrs:
            ip = addr[4][0]
            # 判斷是否為IPv6地址
            if ':' in ip:
                if not ip.startswith('fe80:') and not ip.startswith('::1'):
                    if ip not in internal_ips['ipv6']:
                        internal_ips['ipv6'].append(ip)
            else:
                if not ip.startswith('127.'):
                    if ip not in internal_ips['ipv4']:
                        internal_ips['ipv4'].append(ip)
 
        # 使用備用方法獲取IPv4
        if not internal_ips['ipv4']:
            try:
                s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
                s.connect(("8.8.8.8", 80))
                ip = s.getsockname()[0]
                s.close()
                if ip not in internal_ips['ipv4']:
                    internal_ips['ipv4'].append(ip)
            except:
                pass
 
    except Exception as e:
        print(f"獲取內(nèi)網(wǎng)IP出錯: {str(e)}")
 
    return internal_ips
 
 
def save_to_file(data):
    """保存信息到文件"""
    try:
        with open('../辦公與多媒體/ip_info.txt', 'a', encoding='utf-8') as f:
            f.write(f"\n{'=' * 50}\n")
            f.write(f"檢測時間: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n")
            f.write(f"主機名: {data['hostname']}\n\n")
 
            f.write("內(nèi)網(wǎng)IPv4地址:\n")
            for ip in data['internal_ipv4']:
                f.write(f"  - {ip}\n")
 
            f.write("\n內(nèi)網(wǎng)IPv6地址:\n")
            for ip in data['internal_ipv6']:
                f.write(f"  - {ip}\n")
 
            f.write(f"\n外網(wǎng)IPv4: {data['external_ipv4']}\n")
            f.write(f"外網(wǎng)IPv6: {data['external_ipv6']}\n")
            f.write(f"{'=' * 50}\n")
 
    except Exception as e:
        print(f"保存文件時出錯: {str(e)}")
 
 
def main():
    try:
        print("開始獲取網(wǎng)絡(luò)信息...\n")
 
        # 獲取主機名
        hostname = socket.gethostname()
        print(f"主機名: {hostname}\n")
 
        # 獲取內(nèi)網(wǎng)IP
        internal_ips = get_internal_ips()
        print("內(nèi)網(wǎng)IPv4地址:")
        for ip in internal_ips['ipv4']:
            print(f"  - {ip}")
 
        print("\n內(nèi)網(wǎng)IPv6地址:")
        for ip in internal_ips['ipv6']:
            print(f"  - {ip}")
 
        # 獲取外網(wǎng)IP
        print("\n正在獲取外網(wǎng)IP...")
        external_ipv4 = get_external_ipv4()
        external_ipv6 = get_external_ipv6()
 
        print(f"\n外網(wǎng)IPv4: {external_ipv4}")
        print(f"外網(wǎng)IPv6: {external_ipv6}")
 
        # 保存信息到文件
        data = {
            'hostname': hostname,
            'internal_ipv4': internal_ips['ipv4'],
            'internal_ipv6': internal_ips['ipv6'],
            'external_ipv4': external_ipv4,
            'external_ipv6': external_ipv6
        }
        save_to_file(data)
        print("\n信息已保存到 ip_info.txt 文件")
 
    except Exception as e:
        print(f"程序執(zhí)行出錯: {str(e)}")
 
 
if __name__ == "__main__":
    # 確保已安裝requests庫
    # pip install requests
 
    main()
 
    # 等待用戶按鍵退出
    input("\n按回車鍵退出...")

以上就是Python腳本實現(xiàn)獲取IP地址的詳細(xì)內(nèi)容,更多關(guān)于Python獲取IP地址的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 用Python每天自動給女友免費發(fā)短信

    用Python每天自動給女友免費發(fā)短信

    大家好,本篇文章主要講的是用Python每天自動給女友免費發(fā)短信,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • 兩種方法檢查Python中的變量是否為字符串

    兩種方法檢查Python中的變量是否為字符串

    在 Python 中,每個變量都有一個數(shù)據(jù)類型, 數(shù)據(jù)類型表示變量內(nèi)部存儲的數(shù)據(jù)類型,本文通過示例介紹兩種不同的方法來檢查 Python 中的變量是否為字符串,感興趣的朋友一起看看吧
    2023-11-11
  • python編程普通及類和靜態(tài)方法示例詳解

    python編程普通及類和靜態(tài)方法示例詳解

    普通方法會將實例傳入方法當(dāng)中(通常用self表示),類方法會將類傳入方法當(dāng)中(通常用cls表示),靜態(tài)方法中傳入與類無關(guān)的變量。下面將舉例詳細(xì)說明
    2021-10-10
  • Appium自動化測試實現(xiàn)九宮格解鎖

    Appium自動化測試實現(xiàn)九宮格解鎖

    本文主要介紹了Appium自動化測試實現(xiàn)九宮格解鎖,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Python圖片文字識別與提取實戰(zhàn)記錄

    Python圖片文字識別與提取實戰(zhàn)記錄

    這篇文章主要介紹了Python圖片文字識別與提取的相關(guān)資料,本文介紹了如何安裝和配置OCR環(huán)境,包括安裝pytesseract擴展包、窗口配套軟件以及配置環(huán)境變量,在完成環(huán)境搭建后,即可進(jìn)行圖片中文字的提取,需要的朋友可以參考下
    2024-09-09
  • python數(shù)據(jù)XPath使用案例詳解

    python數(shù)據(jù)XPath使用案例詳解

    xpath是最常用且最便捷高效的一種解析方式,通用型強,其不僅可以用于python語言中,還可以用于其他語言中,數(shù)據(jù)解析建議首先xpath
    2021-09-09
  • python搭建項目的虛擬環(huán)境

    python搭建項目的虛擬環(huán)境

    本文主要介紹了python搭建項目的虛擬環(huán)境,主要就是在多個項目中進(jìn)行一個隔離,防止包的版本沖突或者其他情況,下面就來介紹一下具體步驟,感興趣的可以了解一下
    2024-03-03
  • 使用pyplot.matshow()函數(shù)添加繪圖標(biāo)題

    使用pyplot.matshow()函數(shù)添加繪圖標(biāo)題

    這篇文章主要介紹了使用pyplot.matshow()函數(shù)添加繪圖標(biāo)題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • python transpose()處理高維度數(shù)組的軸變換的實現(xiàn)

    python transpose()處理高維度數(shù)組的軸變換的實現(xiàn)

    本文主要介紹了python transpose()處理高維度數(shù)組的軸變換的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • Pytorch中Tensor與各種圖像格式的相互轉(zhuǎn)化詳解

    Pytorch中Tensor與各種圖像格式的相互轉(zhuǎn)化詳解

    這篇文章主要介紹了Pytorch中Tensor與各種圖像格式的相互轉(zhuǎn)化詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12

最新評論