網卡廠商自動識別工具(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
※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搜救船隻發生故障,自動識別系統失靈