python arp扫描_python实现arp扫描

from scapy.all import *

import sys,getopt,socket

def get_local_net():

#获取网段。如:192.168.50

try:

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

s.connect(('8.8.8.8', 80))

# 获取本机ip。如:192.168.50.110

ip = s.getsockname()[0]

ippre_list = ip.split(r".")

ippre_list.pop()

# 获取网段字串。如:192.168.50

ipnet = '.'.join(ippre_list)

except Exception:

ipnet = False

finally:

s.close()

return ipnet

def get_vlan_ip_and_mac(locnet,start_num=1,end_num=255):

# 通过arp协议扫描,发现本网段存活ip和mac

result = []

localnet = locnet

scansum=int(end_num)-int(start_num)+1

print("%s.%s - %s.%s 共计 %s 个被扫描ip"% (localnet,start_num,localnet,end_num,scansum))

print()

counter=1

# 如果无法识别本网段,则退出扫描

if not localnet:

print("扫描终止:无法识别本网段。")

return result

for ipFix in range(start_num,end_num+1):

# 构造本网段的ip。如:192.168.50.20

ip =localnet+"."+str(ipFix)

# 组合协议包

# 通过 '/' 可叠加多个协议层(左底层到右上层),如Ether()/IP()/UDP()/DNS()

arpPkt=Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=ip)

# 发送arp请求,并获取响应结果。设置1s超时。

res = srp1(arpPkt,timeout=1,verbose=0)

# 如果ip存活

if res:

print("%3d --> %s %s"%(counter,ip, res.hwsrc))

result.append({"localIP":res.psrc,"mac":res.hwsrc})

counter+=1

# 如果ip不存活

else:

print("%3d --> %s"%(counter,ip))

counter+=1

return result

if __name__ == '__main__':

locnet=get_local_net()

print("一、开始扫描本网段(%s.xx)活动的ip" % locnet )

# 扫描ip起始和终止范围

start_num=126

end_num=135

# 开始扫描

result = get_vlan_ip_and_mac(locnet,start_num,end_num)

print()

print("二、Mac表汇总清单(活动ip共计 %s个):" % len(result))

for dic in result:

print(dic)

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值