最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2025年03月07日 11:01:56   作者:穿梭的編織者  
這篇文章主要為大家詳細介紹了如何基于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ò)接口信息

三、準備工作

導(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地址的詳細內(nèi)容,更多關(guān)于Python獲取IP地址的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 打包Python代碼的常用方法小結(jié)

    打包Python代碼的常用方法小結(jié)

    Python是一門強大的編程語言,但在將Python代碼分享給其他人時,讓他們安裝Python解釋器并運行腳本可能有點繁瑣,這時,將Python代碼打包成可執(zhí)行的應(yīng)用程序(.exe)可以大大簡化這個過程,本文將介紹幾種常用的方法,輕松地將Python代碼變成獨立的可執(zhí)行文件
    2023-11-11
  • NumPy進行統(tǒng)計分析

    NumPy進行統(tǒng)計分析

    本文主要介紹了NumPy進行統(tǒng)計分析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • python os.path.isfile()因參數(shù)問題判斷錯誤的解決

    python os.path.isfile()因參數(shù)問題判斷錯誤的解決

    今天小編就為大家分享一篇python os.path.isfile()因參數(shù)問題判斷錯誤的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • 使用numpy.mean()?計算矩陣均值方式

    使用numpy.mean()?計算矩陣均值方式

    這篇文章主要介紹了numpy.mean()?計算矩陣均值方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python3 webservice接口測試代碼詳解

    Python3 webservice接口測試代碼詳解

    這篇文章主要介紹了Python3 webservice接口測試代碼詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • Python+requests+unittest執(zhí)行接口自動化測試詳情

    Python+requests+unittest執(zhí)行接口自動化測試詳情

    這篇文章主要介紹了Python+requests+unittest執(zhí)行接口自動化測試詳情,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-09-09
  • Python人臉識別初探

    Python人臉識別初探

    這篇文章主要為大家詳細介紹了Python人臉識別初探的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • 詳解python中遞歸函數(shù)

    詳解python中遞歸函數(shù)

    這篇文章主要介紹了python遞歸函數(shù),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • python實現(xiàn)搜索指定目錄下文件及文件內(nèi)搜索指定關(guān)鍵詞的方法

    python實現(xiàn)搜索指定目錄下文件及文件內(nèi)搜索指定關(guān)鍵詞的方法

    這篇文章主要介紹了python實現(xiàn)搜索指定目錄下文件及文件內(nèi)搜索指定關(guān)鍵詞的方法,可實現(xiàn)針對文件夾及文件內(nèi)關(guān)鍵詞的搜索功能,需要的朋友可以參考下
    2015-06-06
  • Python中GIL的使用詳解

    Python中GIL的使用詳解

    GIL的全稱為Global Interpreter Lock,全局解釋器鎖。本篇文章詳細的介紹了Python中GIL的使用,有需要了解Python中GIL用法的朋友可參考。希望此文章對各位有所幫助
    2018-10-10

最新評論

万荣县| 诸城市| 嘉黎县| 广河县| 天峻县| 盐源县| 万宁市| 集贤县| 西充县| 和静县| 耿马| 辰溪县| 兰坪| 周至县| 淮北市| 莎车县| 天长市| 革吉县| 邹城市| 开鲁县| 江陵县| 夹江县| 揭东县| 贡山| 上思县| 承德市| 大石桥市| 钟山县| 柘荣县| 织金县| 汾西县| 军事| 扬中市| 云南省| 剑川县| 洛阳市| 东乌珠穆沁旗| 绥滨县| 巢湖市| 宝兴县| 夏河县|