python调用nmap探测局域网设备

时间:2025-01-08 21:37:20

平台:linux

描述:利用os.popen()函数调用系统命令nmap进行扫描,并用grep命令对扫描结果关键内容进行提取

代码

#!/usr/bin/env pthon
#--*--coding=utf-8--*-- import os
from terminaltables import AsciiTable gateway = '192.168.1.1' def scan():
scan = os.popen("nmap " + gateway + "/24 -n -sP").read()
f = open('scan.txt','w')
f.write(scan)
f.close()
devices = os.popen(" grep report scan.txt | awk '{print $5}'").read()
devices_mac = os.popen("grep MAC scan.txt | awk '{print $3}'").read() + os.popen("ip addr | grep 'state UP' -A1 | tail -n1 | awk '{print $2}' | cut -f1 -d'/'").read().upper() # get devices mac and localhost mac address
devices_name = os.popen("grep MAC scan.txt | awk '{print $4 ,S$5 $6}'").read() + "\033[1;32m(This device)\033[1;m" table_data = [
['IP Address', 'Mac Address', 'Manufacturer'],
[devices, devices_mac, devices_name]
]
table = AsciiTable(table_data)
print(table.table)
os.popen("rm -f scan.txt") if __name__ == '__main__':
scan()

执行结果

python调用nmap探测局域网设备

关于terminaltables库的使用: https://robpol86.github.io/terminaltables/

实例代码:https://github.com/robpol86/terminaltables/blob/v3.1.0/example1.py(example2.py,example3.py)

>>> from terminaltables import AsciiTable
>>> table_data = [
   ['Heading1', 'Heading2'],
   ['row1 column1', 'row1 column2'],
   ['row2 column1', 'row2 column2'],
   ['row3 column1', 'row3 column2'],
   ]
>>> table = AsciiTable(table_data)

 python调用nmap探测局域网设备