目录
python3.7 windows环境
以下两个都可以扫描指定主机或者指定网段的 IP 对应的 MAC 地址,然后保存到 csv 文件中。用scapy模块写的脚本速度很快,几秒就可以全部扫描完,用python-nmap扫描的比较慢,建议用 scapy 模块写的。
用scapy模块写
-H 参数可以是一个ip地址,也可以是一个网段。例:192.168.10.100 或 192.168.10.10-20 或 192.168.10.0/24
# -*- coding: utf-8 -*-
"""
Created on Wed Nov 7 22:27:55 2018
@author: 小谢
"""
from scapy.all import *
import csv
import optparse
import time
def Ip_Mac(host):
try:
ans,unans=srp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=host),timeout=2,verbose=False) #发送ARP请求包,verbose=False的话,就不显示发包信息
except Exception as e:
print("异常对象的类型是:%s"%type(e))
print("异常对象的内容是:%s"%e)
else:
try:
with open("ip.csv","w",newline="") as f:
csv_writer=csv.writer(f)
csv_writer.writerow(('IP','MAC'))
for send,rec in ans:
ip_mac=rec.sprintf("{ARP:%ARP.psrc%-%Ether.src%}") #将包按照固定的格式打印
print(ip_mac)
mac=ip_mac.split("-") #去除中间的 - ,返回元组型数据
csv_writer.writerow(mac) #将元组写入到文件中
except Exception as e:
print("异常对象的类型是:%s"%type(e))
print("异常对象的内容是:%s"%e)
finally:
f.close()
def main():
usage="python %proc -H 192.168.10.10 / 192.168.10.0/24"
parser=optparse.OptionParser(usage)
parser.add_option('-H',dest='Hosts',type='string',help='target hosts')
(options,args)=parser.parse_args()
Hosts=options.Hosts
if Hosts==None:
print(parser.usage)
exit(0)
else:
Ip_Mac(Hosts)
main()
既可以扫描一个ip地址,也可以扫描一个网段
用 python-nmap 模块写
这个模块扫描特别慢,不建议使用。
-H 参数可以是一个IP地址或者一个网段。例:192.168.10.100 或192.168.10.10-20 或 192.168.10.0/24
# -*- coding: utf-8 -*-
"""
Created on Sun Nov 4 19:58:51 2018
@author: 小谢
"""
##列出给定网段的主机的MAC地址表
import nmap
import optparse
import time
import csv
def ListMac(hosts):
nm=nmap.PortScanner()
nm.scan(hosts)
targets=[]
for t in nm.all_hosts():
if nm[t]['status']['state']=="up":
mac=nm[t]['addresses']['mac']
print("ip: %s mac: %s"%(t,mac))
targets.append((t,mac))
else:
pass
return targets
def main():
usage="python %proc -H 192.168.10.10-20"
parser=optparse.OptionParser(usage)
parser.add_option('-H',dest='Hosts',type='string',help='target hosts')
(options,args)=parser.parse_args()
Hosts=options.Hosts
if Hosts==None:
print(parser.usage)
exit(0)
else:
target=ListMac(Hosts)
try:
with open("ip.csv","w",newline="") as f:
csv_writer=csv.writer(f)
csv_writer.writerow(('IP','MAC'))
for i in target:
csv_writer.writerow(i)
except Exception as e:
print("异常对象的类型是:%s"%type(e))
print("异常对象的内容是:%s"%e)
finally:
f.close()
if __name__=='__main__':
main()
相关文章: Python中Scapy网络嗅探模块的使用