python 獲取本機 IP

2022-08-09 01:33:16 字數 2243 閱讀 4551

總是會有獲取本機 ip 的需求,但是就是這樣乙個簡單的需求處理起來還是有很多需要細化、明確的東東。

1 什麼是本機 ip?本機的外網 ip?本機的內網 ip?

2 是在 linux 上還是其他系統也要支援?

為此,咱今兒特意查了下谷歌娘,總結得到以下** 支援linux 32/64, solaris, win.但是這裡只是獲取了乙個 ip 而已,其他的需要可以在這個基礎上對**進行改造。

哦,對了,具體到要獲取外網 ip 的話,可以隨便向谷歌娘等發起乙個 http 請求然後獲取 ip。這也是乙個挺有趣的做法,**如下

s =socket.socket(socket.af_inet, socket.sock_dgram)

s.connect((

"gmail.com

",80))

print

(s.getsockname()[0])

s.close()

這裡是正式的**

def

_get_host_ip(self):

"""get a host ip. just return only one ip if there are many ips.

args:

none

returns:

a ip address string

raises:

runtimeerror

"""import

socket

import

struct

import

array

import

os ip = '

unknown

'siocgifconf = 0x8912size = 40 if sys.maxint > 2 ** 32 else 32max_possible = 8ip =socket.gethostbyname(socket.gethostname())

outbytes =0

try:

if ip.startswith("

127.

") and os.name != "nt"

:

import

fcntl

sock =socket.socket(socket.af_inet, socket.sock_dgram)

while

true:

bytes = max_possible *size

ifnames = array.array('

b', '

\0' *bytes)

outbytes = struct.unpack('il'

, fcntl.ioctl(

sock.fileno(),

siocgifconf,

struct.pack('il

', bytes, ifnames.buffer_info()[0])

))[0]

if outbytes ==bytes:

max_possible *= 2

else

:

break

nic_info =ifnames.tostring()

for idx in

range(0, outbytes, size):

ip = socket.inet_ntoa(nic_info[idx + 20:idx + 24])

if ip.startswith("

127."):

ip = '

unknown

'continue

else

:

break

except

socket.herror, e:

log.info(

"can not get host ip: %s

" %e)

raise runtimeerror("

failed to execute %s

" %e)

except

socket.error, e:

log.info(

"can not get host ip: %s

" %e)

raise runtimeerror("

failed to execute %s

" %e)

return ip

python 獲取本機 IP

這個方法是目前見過最優雅獲取本機伺服器的ip方法了。沒有任何的依賴,也沒有去猜測機器上的網路裝置資訊。而且是利用 udp 協議來實現的,生成乙個udp包,把自己的 ip 放如到 udp 協議頭中,然後從udp包中獲取本機的ip。這個方法並不會真實的向外部發包,所以用抓包工具是看不到的。但是會申請乙個...

python獲取linux本機IP

usr bin env python encoding utf 8 description get local ip address import os import socket,fcntl,struct def get ip 注意外圍使用雙引號而非單引號,並且假設預設是第乙個網絡卡,特殊環境請適...

python獲取本機ip位址

文章目錄 隱藏 在專案中使用 python udp,繫結時需要用到 ip 何埠,開始使用 socket.gethostbyname 時,當計算機名為中文時會提示,結果發現就是轉碼問題 socket.gaierror errno11004 getaddrinfo failedimport 獲取本機電腦...