Loading

python调用nmap探测局域网设备

平台: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()

 

执行结果

 

关于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)

 

 

posted @ 2016-12-08 21:08  ssooking  阅读(17143)  评论(0编辑  收藏  举报