本文主要研究的是使用Python获取本机所有网卡ip、掩码和广播地址,分享了相关的实例代码,具体介绍如下。
搜了一天,竟然没找到一段合适的代码来获取机器中所有网卡的ip,掩码和广播地址,大部分都是用插座,但是插座通常返回的要不就是内网地址,要不就是公网地址,不能够找到所有地址,真的太忧桑了,决定自己通过ifconfig或ipconfig的返回信息,一步步地过滤了。这次的代码主要用到了正则表达式和子流程模块,而且为了兼容所有平台(赢,linux和mac),也用到了平台来判断系统类型,不说太多,代码如下:
导入子流程 进口再保险 进口平台 def find_all_ip(平台): ipstr=' ([0 - 9] {1,3} \) {3} [0 - 9] {1,3}’ 如果平台====按锒摹被蚱教ā癓inux”: ipconfig_process=子流程。Popen (“ifconfig stdout=subprocess.PIPE) 输出=ipconfig_process.stdout.read () ip_pattern=re.compile ((inet % s)的% ipstr) 如果平台==癓inux”: ip_pattern=re.compile ((inet addr: % s)的% ipstr) 模式=re.compile (ipstr) iplist=[] 在re.finditer ipaddr (ip_pattern str(输出)): ip=pattern.search (ipaddr.group ()) 如果ip.group () !=?27.0.0.1”: iplist.append (ip.group ()) 返回iplist elif平台==癢indows”: ipconfig_process=子流程。Popen (“ipconfig stdout=subprocess.PIPE) 输出=ipconfig_process.stdout.read () ip_pattern=re.compile (“IPv4地址(\)*:% s“% ipstr) 模式=re.compile (ipstr) iplist=[] 在re.finditer ipaddr (ip_pattern str(输出)): ip=pattern.search (ipaddr.group ()) 如果ip.group () !=?27.0.0.1”: iplist.append (ip.group ()) 返回iplist def find_all_mask(平台): ipstr=' ([0 - 9] {1,3} \) {3} [0 - 9] {1,3}’ maskstr=' 0 x ([0-9a-f] {8}) ' 如果平台====按锒摹被蚱教ā癓inux”: ipconfig_process=子流程。Popen (“ifconfig stdout=subprocess.PIPE) 输出=ipconfig_process.stdout.read () mask_pattern=re.compile((子网掩码% s)的% maskstr) 模式=re.compile (maskstr) 如果平台==癓inux”: mask_pattern=re.compile (r 'Mask: % s % ipstr) 模式=re.compile (ipstr) masklist=[] 在mask_pattern.finditer maskaddr (str(输出)): 掩码=pattern.search (maskaddr.group ()) 如果mask.group () !=0 xff000000和mask.group () !=?55.0.0.0”: masklist.append (mask.group ()) 返回masklist elif平台==癢indows”: ipconfig_process=子流程。Popen (“ipconfig stdout=subprocess.PIPE) 输出=ipconfig_process.stdout.read () mask_pattern=re.compile (r”子网掩码(\)*:% s“% ipstr) 模式=re.compile (ipstr) masklist=[] 在mask_pattern.finditer maskaddr (str(输出)): 掩码=pattern.search (maskaddr.group ()) 如果mask.group () !=?55.0.0.0”: masklist.append (mask.group ()) 返回masklist def get_broad_addr (ipstr maskstr): iptokens=地图(int, ipstr.split (“。”) masktokens=地图(int, maskstr.split (“。”) broadlist=[] 因为我在范围(len (iptokens)): ip=iptokens[我] 掩码=masktokens[我] 广泛=ip和;面具|(~面具,255) broadlist.append(广泛) 返回“。”。加入(地图(str, broadlist)) def find_all_broad(平台): ipstr=' ([0 - 9] {1,3} \) {3} [0 - 9] {1,3}’ 如果平台====按锒摹被蚱教ā癓inux”: ipconfig_process=子流程。Popen (“ifconfig stdout=subprocess.PIPE) 输出=(ipconfig_process.stdout.read ()) broad_pattern=re.compile ((% s)播出的% ipstr) 如果平台==癓inux”: broad_pattern=re.compile (r 'Bcast: % s % ipstr) 模式=re.compile (ipstr) broadlist=[] 在broad_pattern.finditer broadaddr (str(输出)): 广义=pattern.search (broadaddr.group ()) broadlist.append (broad.group ()) 返回broadlist elif平台==癢indows”: iplist=find_all_ip(平台) masklist=find_all_mask(平台) broadlist=[] 因为我在范围(len (iplist)): broadlist。追加(get_broad_addr (iplist[我],masklist[我])) 返回broadlist 系统=platform.system () print (find_all_ip(系统) print (find_all_mask(系统) print (find_all_broad(系统)
以上就是本文关于Python获取本机所有网卡ip、掩码和广播地址实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!