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)

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM