Python獲取ip地址的3種方法代碼
方法一
#獲取本機(jī)IP地址 def get_local_ip(): # s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # s.connect(('8.8.8.8', 80)) # ip = s.getsockname()[0] # s.close() ip = socket.gethostbyname(socket.gethostname()) return ip
運(yùn)行結(jié)果:
D:\Python3.8.6\python.exe D:/PythonWorkSpace/someip/Common/get_IP_adress.py
192.168.42.44Process finished with exit code 0
方法二
#獲取公網(wǎng)IP地址 def get_public_ip(): response = requests.get("http://httpbin.org/ip") data = response.json() ip = data['origin'] return ip
運(yùn)行結(jié)果:
D:\Python3.8.6\python.exe D:/PythonWorkSpace/someip/Common/get_IP_adress.py
223.76.212.244Process finished with exit code 0
方法三
# 獲取本機(jī)所有 IP 地址 def get_all_ip(): hostname = socket.gethostname() ip_list = [] # 獲取IP地址信息 addr_infos = socket.getaddrinfo(hostname, None) for addr in addr_infos: ip_list.append(addr[4][0]) # print(ip_list) return ip_list
運(yùn)行結(jié)果:
D:\Python3.8.6\python.exe D:/PythonWorkSpace/someip/Common/get_IP_adress.py
fe80::f439:ac0:9050:c9f
fe80::1d73:c1cf:c1ca:6d0d
fe80::9d23:6620:a01:aa33
fe80::856d:dbe3:ada3:a32a
192.168.42.44
172.29.11.5
192.168.114.1
192.168.64.1Process finished with exit code 0
附:本機(jī)IP與127.0.0.1及l(fā)ocalhost的區(qū)別
127.0.0.1
環(huán)回地址是主機(jī)用于向自身發(fā)送通信的一個(gè)特殊地址。同一臺(tái)主機(jī)上的兩項(xiàng)服務(wù)若使用環(huán)回地址而非分配的主機(jī)地址,就可以繞開TCP/IP協(xié)議棧的下層。
IPv4的環(huán)回地址為:127.0.0.0到127.255.255.255都是環(huán)回地址
當(dāng)操作系統(tǒng)初始化本機(jī)的TCP/IP協(xié)議棧時(shí),設(shè)置協(xié)議棧本身的IP地址為127.0.0.1(保留地址),并注入路由表
127.0.0.1是保留地址之一,來檢驗(yàn)本機(jī)TCP/IP協(xié)議棧,ping 127.0.0.1
一般作為測(cè)試本機(jī)TCP/IP協(xié)議棧正常與否的判斷之一。
localhost
localhost首先是一個(gè)域名,也是本機(jī)地址,它可以被配置為任意的IP地址。不過通常情況下都指向:(如下)
IPv4:表示
127.0.0.1
IPv6:表示 [::1]
本機(jī)IP
本機(jī)IP,可以理解為本機(jī)有三塊網(wǎng)卡:
- 一塊網(wǎng)卡叫做loopback(虛擬網(wǎng)卡)
- 一塊叫做ethernet(有線網(wǎng)卡)
- 一塊叫做wlan(你的無線網(wǎng)卡)
聯(lián)網(wǎng),網(wǎng)卡傳輸,受防火墻和網(wǎng)卡限制
解決方法
獲取本機(jī)IP有其它的方法:
import os import socket gw = os.popen("ip -4 route show default").read().split() s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect((gw[2], 0)) ipaddr = s.getsockname()[0] gateway = gw[2] host = socket.gethostname() print("IP:", ipaddr, " GW:", gateway, " Host:", host)
或者
import os import socket s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect(("8.8.8.8", 80)) ip = s.getsockname()[0] print("IP:", ip)
總結(jié)
到此這篇關(guān)于Python獲取ip地址的3種方法的文章就介紹到這了,更多相關(guān)Python獲取ip地址內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python互斥鎖、加鎖、同步機(jī)制、異步通信知識(shí)總結(jié)
本篇文章給大家詳細(xì)講述了python互斥鎖、加鎖、同步機(jī)制、異步通信相關(guān)知識(shí)點(diǎn),對(duì)此有興趣的朋友收藏下。2018-02-02關(guān)于PyQt5主窗口圖標(biāo)顯示問題匯總
這篇文章主要介紹了關(guān)于PyQt5主窗口圖標(biāo)顯示問題匯總,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03淺談pandas篩選出表中滿足另一個(gè)表所有條件的數(shù)據(jù)方法
今天小編就為大家分享一篇淺談pandas篩選出表中滿足另一個(gè)表所有條件的數(shù)據(jù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-02-02詳解Python+Pyecharts實(shí)現(xiàn)漏斗圖的繪制
漏斗圖是一個(gè)簡(jiǎn)單的散點(diǎn)圖,反映研究在一定樣本量或精確性下單個(gè)研究的干預(yù)效應(yīng)估計(jì)值。本文將用Python Pyecharts實(shí)現(xiàn)漏斗圖的繪制,需要的可以參考一下2022-06-06Python數(shù)據(jù)序列化技術(shù)總結(jié)
在現(xiàn)代軟件開發(fā)中,數(shù)據(jù)序列化是一個(gè)關(guān)鍵環(huán)節(jié),它允許我們將復(fù)雜的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為可存儲(chǔ)或可傳輸?shù)母袷?,Python提供了多種數(shù)據(jù)序列化技術(shù),每種技術(shù)都有其獨(dú)特的性能優(yōu)勢(shì)和適用場(chǎng)景,本文將詳細(xì)介紹幾種強(qiáng)大的Python數(shù)據(jù)序列化技術(shù),需要的朋友可以參考下2025-03-03Python BeautifulSoup基本用法詳解(通過標(biāo)簽及class定位元素)
這篇文章主要介紹了Python BeautifulSoup基本用法(通過標(biāo)簽及class定位元素),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08