zoukankan      html  css  js  c++  java
  • 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() + "33[1;32m(This device)33[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)
    

     

  • 相关阅读:
    实现带有头结点的链表
    数据结构之链式线性表
    HDU 1010 dfs+奇偶剪枝
    数据结构之顺序线性表
    POJ 1753 dfs+枚举
    HDU 4277 dfs+set去重
    平衡二叉树
    线性素数筛+欧拉线性筛(证明)
    dp--2019南昌网络赛B-Match Stick Game
    线段树+单调栈+前缀和--2019icpc南昌网络赛I
  • 原文地址:https://www.cnblogs.com/ssooking/p/6146492.html
Copyright © 2011-2022 走看看