調用python-nmap實現掃描局域網
- 2020 年 1 月 19 日
- 筆記
使用環境:Raspberry 3b+ +netifaces+python-nmap+nmap
調用netifaces自動獲取ip地址:
def get_gateways(): return netifaces.gateways()['default'][netifaces.AF_INET][0]
將ip地址生成一個網段中所有ip地址的列表:
def get_ip_lists(ip): ip_lists = [] for i in range(1, 256): ip_lists.append('{}{}'.format(ip[:-1], i)) return ip_lists
主要實現代碼及數據分割:
def main(ip=None): ip=get_gateways() ip_lists=get_ip_lists(ip) nmScan,temp_ip_lists,hosts = nmap.PortScanner(),[],ip[:-1]+'0/24' ret = nmScan.scan(hosts=hosts, arguments='-sP') print('掃描時間:'+ret['nmap']['scanstats']['timestr']+'n命令參數:'+ret['nmap']['command_line']) for ip in ip_lists: print('ip地址:'+ip+':') if ip not in ret['scan']: temp_ip_lists.append(ip) print('掃描超時') else:print('已掃描到主機,主機名:'+ret['scan'][ip]['hostnames'][0]['name']) print(str(hosts) +' 網絡中的存活主機:') for ip in temp_ip_lists:ip_lists.remove(ip) for ip in ip_lists:print(ip)
完整代碼:
#!/usr/bin/python #_*_ coding:utf8 _*_ import netifaces,nmap def get_gateways(): return netifaces.gateways()['default'][netifaces.AF_INET][0] def get_ip_lists(ip): ip_lists = [] for i in range(1, 256): ip_lists.append('{}{}'.format(ip[:-1], i)) return ip_lists def main(ip=None): ip=get_gateways() ip_lists=get_ip_lists(ip) nmScan,temp_ip_lists,hosts = nmap.PortScanner(),[],ip[:-1]+'0/24' ret = nmScan.scan(hosts=hosts, arguments='-sP') print('掃描時間:'+ret['nmap']['scanstats']['timestr']+'n命令參數:'+ret['nmap']['command_line']) for ip in ip_lists: print('ip地址:'+ip+':') if ip not in ret['scan']: temp_ip_lists.append(ip) print('掃描超時') else:print('已掃描到主機,主機名:'+ret['scan'][ip]['hostnames'][0]['name']) print(str(hosts) +' 網絡中的存活主機:') for ip in temp_ip_lists:ip_lists.remove(ip) for ip in ip_lists:print(ip) if __name__ == '__main__': main()
實驗截圖:

