Python獲取本機所有網(wǎng)卡ip,掩碼和廣播地址實例代碼
本文主要研究的是使用Python獲取本機所有網(wǎng)卡ip,掩碼和廣播地址,分享了相關(guān)的實例代碼,具體介紹如下。
搜了一天,竟然沒找到一段合適的代碼來獲取機器中所有網(wǎng)卡的ip,掩碼和廣播地址,大部分都是用socket,但是socket通常返回的要不就是內(nèi)網(wǎng)地址,要不就是公網(wǎng)地址,不能夠找到所有地址,真的太憂桑了,決定自己通過ifconfig或ipconfig的返回信息,一步步地過濾了。這次的代碼主要用到了正則表達式和subprocess模塊,而且為了兼容所有平臺(win,linux和mac),也用到了platform來判斷系統(tǒng)類型,不說太多,代碼如下:
import subprocess import re import platform def find_all_ip(platform): ipstr = '([0-9]{1,3}\.){3}[0-9]{1,3}' if platform == "Darwin" or platform == "Linux": ipconfig_process = subprocess.Popen("ifconfig", stdout=subprocess.PIPE) output = ipconfig_process.stdout.read() ip_pattern = re.compile('(inet %s)' % ipstr) if platform == "Linux": ip_pattern = re.compile('(inet addr:%s)' % ipstr) pattern = re.compile(ipstr) iplist = [] for ipaddr in re.finditer(ip_pattern, str(output)): ip = pattern.search(ipaddr.group()) if ip.group() != "127.0.0.1": iplist.append(ip.group()) return iplist elif platform == "Windows": ipconfig_process = subprocess.Popen("ipconfig", stdout=subprocess.PIPE) output = ipconfig_process.stdout.read() ip_pattern = re.compile("IPv4 Address(\. )*: %s" % ipstr) pattern = re.compile(ipstr) iplist = [] for ipaddr in re.finditer(ip_pattern, str(output)): ip = pattern.search(ipaddr.group()) if ip.group() != "127.0.0.1": iplist.append(ip.group()) return iplist def find_all_mask(platform): ipstr = '([0-9]{1,3}\.){3}[0-9]{1,3}' maskstr = '0x([0-9a-f]{8})' if platform == "Darwin" or platform == "Linux": ipconfig_process = subprocess.Popen("ifconfig", stdout=subprocess.PIPE) output = ipconfig_process.stdout.read() mask_pattern = re.compile('(netmask %s)' % maskstr) pattern = re.compile(maskstr) if platform == "Linux": mask_pattern = re.compile(r'Mask:%s' % ipstr) pattern = re.compile(ipstr) masklist = [] for maskaddr in mask_pattern.finditer(str(output)): mask = pattern.search(maskaddr.group()) if mask.group() != '0xff000000' and mask.group() != '255.0.0.0': masklist.append(mask.group()) return masklist elif platform == "Windows": ipconfig_process = subprocess.Popen("ipconfig", stdout=subprocess.PIPE) output = ipconfig_process.stdout.read() mask_pattern = re.compile(r"Subnet Mask (\. )*: %s" % ipstr) pattern = re.compile(ipstr) masklist = [] for maskaddr in mask_pattern.finditer(str(output)): mask = pattern.search(maskaddr.group()) if mask.group() != '255.0.0.0': masklist.append(mask.group()) return masklist def get_broad_addr(ipstr, maskstr): iptokens = map(int, ipstr.split(".")) masktokens = map(int, maskstr.split(".")) broadlist = [] for i in range(len(iptokens)): ip = iptokens[i] mask = masktokens[i] broad = ip & mask | (~mask & 255) broadlist.append(broad) return '.'.join(map(str, broadlist)) def find_all_broad(platform): ipstr = '([0-9]{1,3}\.){3}[0-9]{1,3}' if platform == "Darwin" or platform == "Linux": ipconfig_process = subprocess.Popen("ifconfig", stdout=subprocess.PIPE) output = (ipconfig_process.stdout.read()) broad_pattern = re.compile('(broadcast %s)' % ipstr) if platform == "Linux": broad_pattern = re.compile(r'Bcast:%s' % ipstr) pattern = re.compile(ipstr) broadlist = [] for broadaddr in broad_pattern.finditer(str(output)): broad = pattern.search(broadaddr.group()) broadlist.append(broad.group()) return broadlist elif platform == "Windows": iplist = find_all_ip(platform) masklist = find_all_mask(platform) broadlist = [] for i in range(len(iplist)): broadlist.append(get_broad_addr(iplist[i], masklist[i])) return broadlist system = platform.system() print(find_all_ip(system)) print(find_all_mask(system)) print(find_all_broad(system))
總結(jié)
以上就是本文關(guān)于Python獲取本機所有網(wǎng)卡ip,掩碼和廣播地址實例代碼的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
- Python 使用指定的網(wǎng)卡發(fā)送HTTP請求的實例
- python 的 scapy庫,實現(xiàn)網(wǎng)卡收發(fā)包的例子
- Python選擇網(wǎng)卡發(fā)包及接收數(shù)據(jù)包
- Python簡單獲取網(wǎng)卡名稱及其IP地址的方法【基于psutil模塊】
- Linux服務(wù)器網(wǎng)卡流量查看方法 shell和Python各一枚
- python使用WMI檢測windows系統(tǒng)信息、硬盤信息、網(wǎng)卡信息的方法
- Python腳本實現(xiàn)網(wǎng)卡流量監(jiān)控
- python監(jiān)控網(wǎng)卡流量并使用graphite繪圖的示例
- python 獲取計算機的網(wǎng)卡信息
相關(guān)文章
Python實現(xiàn)判斷字符串中包含某個字符的判斷函數(shù)示例
這篇文章主要介紹了Python實現(xiàn)判斷字符串中包含某個字符的判斷函數(shù),涉及Python自定義函數(shù)中使用find方法針對字符串的簡單判斷查找相關(guān)操作技巧,需要的朋友可以參考下2018-01-01Python解析json之ValueError: Expecting property name enclosed in
這篇文章主要給大家介紹了關(guān)于Python解析json報錯:ValueError: Expecting property name enclosed in double quotes: line 1 column 2(char 1)的解決方法,文中介紹的非常詳細,需要的朋友們可以參考借鑒,下面來一起看看吧。2017-07-07深入剖析Python的爬蟲框架Scrapy的結(jié)構(gòu)與運作流程
這篇文章主要介紹了Python的爬蟲框架Scrapy的結(jié)構(gòu)與運作流程,并以一個實際的項目來講解Scrapy的原理機制,十分推薦!需要的朋友可以參考下2016-01-01Django博客系統(tǒng)注冊之創(chuàng)建用戶模塊應(yīng)用
本文主要介紹了Django博客系統(tǒng)注冊之創(chuàng)建用戶模塊應(yīng)用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09Python初學(xué)者必須掌握的25個內(nèi)置函數(shù)詳解
這篇文章主要介紹了Python25個常用內(nèi)置函數(shù)總結(jié),本文羅列了數(shù)學(xué)相關(guān) 、功能相關(guān)、類型轉(zhuǎn)換、字符串處理、序列處理函數(shù)等常用內(nèi)置函數(shù),需要的朋友可以參考下2021-09-09