當前位置:
首頁 > 新聞 > 網卡廠商自動識別工具(Python版, 附源代碼)

網卡廠商自動識別工具(Python版, 附源代碼)

看了

這篇文章 ,覺得很實用,於是寫了一個python 版的,支持Linux 和windows 平台使用,對於Linux (arp -n ) 和windows (arp -a)導出的arp表,進行解析並輸出結果。


如何使用


—oui-file 指的是 oui.txt的路徑,程序默認值為當前目錄下的oui.txt , 即:./oui.txt


—arp-tab-file 指的是 導出的arp表的路徑


1、首先你要導出系統上的arp 表



windows > arp -a > arp.txt
Linux # arp -n >arp.txt


2、 然後執行網卡廠商解析工具(這裡暫為mac.py)


3、解析結果保存在當前目錄下的result.txt 中


測試效果如下:


Linux:


Windows:



源碼:



#!/usr/bin/env python


# -*- coding:utf8 -*-




"""




Coded by bgusko63190



"""




import re


import sys


import codecs


import argparse




def parse_oui(oui_path):


"""

載入並解析oui.txt,生成"廠商標識":"廠商名稱" 字典


"""


oui_dict = dict()


with codecs.open(oui_path, "r", encoding="utf8") as fd:


for line in fd:


if "(hex)" in line:


_line = line.split("(hex)")


flag = _line[0].strip()


manufacturers = _line[1].strip()


oui_dict[flag] = manufacturers



return oui_dict




def parse_arp_tab(arp_tab_path, oui_path):


"""


:param arp_tab_path: arp -n 生生結果保存文件路徑(支持windows ar -a 和Linux的arp -n 結果格式)


:param oui_path: oui.txt的路徑


:return:


"""


parse_result = []



oui_dict = parse_oui(oui_path)


# 支持 00:42:5a:38:9f:56 , 00-42-5a-38-9f-56,00.42.5a.38.9f.56 3種格式的MAC地址


mac_pattern = re.compile(


"([0-9a-fA-F]{1,2}[-]){5}([0-9a-fA-F]{1,2})|([0-9a-fA-F]{1,2}[:]){5}([0-9a-fA-F]{1,2})|([0-9a-fA-F]{1,2}[.]){5}([0-9a-fA-F]{1,2})",


re.VERBOSE | re.IGNORECASE)




result_lines = []




with codecs.open(arp_tab_path, "r", encoding="utf8") as fd:

for line in fd:


_line = None


if u"類型" in line:


_line = line.strip() + " " + u"廠商"


elif "Type" in line or "Iface" in line:


_line = line.strip() + " " + "manufacturers"


else:


try:


if u"態" in line or "dynamic" in line or "static" in line or "ether" in line:


# _line = line.strip() + " " + oui_dict[mac_pattern.search(line).group().rsplit("-", 3)[0].upper()]

manu = re.split("[-:.]", mac_pattern.search(line).group(), 3)


manu_flag = manu[0] + "-" + manu[1] + "-" + manu[2]


_line = line.strip() + " " + oui_dict[manu_flag.upper()]


except KeyError:


_line = line.strip() + " " + u"unknown"


except:


# print line.strip()


pass


if _line:


result_lines.append(_line + "
")

else:


# print line


pass




with codecs.open("result.txt", "w", encoding="utf8") as fd:


fd.writelines(result_lines)




if __name__ == "__main__":


reload(sys)




sys.setdefaultencoding("utf8")




parse = argparse.ArgumentParser()


parse.add_argument("--oui-file", dest="oui", type=str, default="./oui.txt", help="oui file path")


parse.add_argument("--arp-tab-file", dest="arp", type=str, required=True, help="arp tab file path")




argument = parse.parse_args()




parse_arp_tab(argument.arp, argument.oui)


*本文作者:bgusko63190,轉載請註明FreeBuf.COM


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python 的精彩文章:

Java、PHP、Python、JS 等開發者如何繪製統計圖?
Python Web 部署:Nginx + Gunicorn + Supervisor + Flask 部署筆記
用Python從Youtube下載視頻
Python多線程編程基礎1:為什麼要使用線程
7 個你該學習 Python的理由

TAG:Python |

您可能感興趣

專註於商品自動識別技術研發,「逗號智能」未來要做中國的Amazon Go
自動識別聲控 Facebook推出兩款智能音箱
AR周報|AR眼鏡電力巡檢首次實現狀態批量自動識別|0glass低調原創
數據挖掘案例:CART決策樹——用戶竊漏電自動識別
蘋果發布捷徑Beta版:可自動識別照片天氣情況
數據挖掘實戰1:利用LM神經網路演算法進行電力竊漏電用戶自動識別
完爆蘋果手錶,自動識別運動類型,還為女性打造閨蜜級APP
華為P30Pro被質疑自動識別月亮 拍出來的燈泡出現環形山?
AI手寫體自動識別,會打字的筆記本
DNF又添新操作?開過掛的賬號建團自動識別!飛機團的末日?
衛星裝上人工智慧,自動識別艦船型號,隨時引導東風21D打擊
自動識別目標!美軍計劃為其未來步槍配備AI技術
日本AI攝像頭:自動識別小偷並報警
被外國警局採購的國產車,優化後,能自動識別車牌號?
中文點選驗證碼之自動識別
演算法偏見就怪數據集?MIT糾偏演算法自動識別「弱勢群體」
美國陸軍測試自動駕駛卡車:配備自動識別並射擊目標的機槍
人工智慧發力!中國吉林一號升級為智能衛星,快速自動識別航母
能把「半月傳」自動識別為「羋月傳」,「三角獸」想讓 NLP 技術更賺錢
故意掩蓋?失聯MH370搜救船隻發生故障,自動識別系統失靈