PythonマルチNICのIPアドレスを取得するいくつかの方法(Linuxシステム)
2915 ワード
年を越す前に、元のwindowsツールクライアントをLinuxバージョンに書き換える任務があり、pythonにとって移植しやすい.しかし、重要なステップは、現在のデバイスのipアドレスを取得することです.window版の関数は直接使用できません.
もともととても简単な1件の事、会社の多くの机械のLinuxバージョンが异なっているため、机械のネットカードの数量も异なって、もともと自分の机械のテストが终わって问题がなくて、他の人に持って使うと各种の问题が现れて、适切に配合し终わって、机械を交换してまた新しい问题が现れて、前后に意外にも4つの方法を変えました.
構想はlinuxコマンドの出力結果を取得することによって各ipを解析することにほかならない.多くのコマンドと正規表現の組み合わせを試したことがある.その時の気持ちは本当に泣いたり笑ったりできなかった.ここに記録して、時々の必要に備えてください.
コマンド:
コマンド出力:
202.196.1.0 202.196.1.1
プログラム:
出力結果:
[202.196.1.0, 202.196.1.1]
以前に使用した方法(Linux):
以前に使用した方法(Windows):
もともととても简単な1件の事、会社の多くの机械のLinuxバージョンが异なっているため、机械のネットカードの数量も异なって、もともと自分の机械のテストが终わって问题がなくて、他の人に持って使うと各种の问题が现れて、适切に配合し终わって、机械を交换してまた新しい问题が现れて、前后に意外にも4つの方法を変えました.
構想はlinuxコマンドの出力結果を取得することによって各ipを解析することにほかならない.多くのコマンドと正規表現の組み合わせを試したことがある.その時の気持ちは本当に泣いたり笑ったりできなかった.ここに記録して、時々の必要に備えてください.
コマンド:
hostname -I
コマンド出力:
202.196.1.0 202.196.1.1
プログラム:
def getIPAddrs(self):
p = Popen("hostname -I", shell=True, stdout=PIPE)
data = p.stdout.read() #
data = str(data,encoding = 'UTF-8') #
ip_list = data.split(' ') # IP
if "
" in ip_list: #
ip_list.remove("
")
print(ip_list)
return ip_list
出力結果:
[202.196.1.0, 202.196.1.1]
以前に使用した方法(Linux):
def getIPAddrsV2(self):
p = Popen("ifconfig | grep 'inet ' | grep -v '127.0.0.1' | awk '{print $2}'", shell=True, stdout=PIPE)
data = p.stdout.read()
data = str(data,encoding = 'UTF-8')
ip_list = data.split('
')
ip_list.remove("")
ip_list2 = []
for ip in ip_list:
if ":" in ip:
ip_list2.append(ip.split(":")[-1])
else:
ip_list2.append(ip)
print(ip_list2)
return ip_list2
def getIPAddrsV3(self):
import psutil
netcard_info = []
info = psutil.net_if_addrs()
for k, v in info.items():
for item in v:
if item[0] == 2 and not item[1] == '127.0.0.1':
# netcard_info.append((k, item[1]))
netcard_info.append( item[1])
return netcard_info
def getIPAddrsV4(self):
import fcntl
import struct
ifname = b'enp0s31f6' #
ip_list = []
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
ip = socket.inet_ntoa(fcntl.ioctl(s.fileno(),0x8915,struct.pack(b'256s', ifname[:15]))[20:24])
ip_list.append(ip)
return ip_list
以前に使用した方法(Windows):
''' pc IPv4 '''
def getIPAddrs(self):
ip_list = socket.gethostbyname_ex(socket.gethostname())
for ips in ip_list:
if type(ips) == list and len(ips) != 0:
IPlist = ips
return IPlist
def getIPAddrsV2(self):
p = Popen('ipconfig|findstr IPv4', shell=True, stdout=PIPE)
data = p.stdout.read().decode(encoding='gb2312')
IPlist = []
splitlist = re.split('[\r:]', data)
for eachpart in splitlist:
if '.' in eachpart and 'IP' not in eachpart:
IPlist.append(eachpart.strip())
return IPlist