python - Python ARP 扫描器
问题描述
此代码是一个 arp 扫描器,它扫描网络上除电话之外的所有主机。
程序只打印电脑的ip和mac地址,不打印手机
没有人知道为什么会这样?谢谢
import scapy.all as scapy
class scan:
def Arp(self, ip):
self.ip = ip
print(ip)
arp_r = scapy.ARP(pdst=ip)
br = scapy.Ether(dst='ff:ff:ff:ff:ff:ff')
request = br/arp_r
answered, unanswered = scapy.srp(request, timeout=1)
print('\tIP\t\t\t\t\tMAC')
print('_' * 37)
for i in answered:
ip, mac = i[1].psrc, i[1].hwsrc
print(ip, '\t\t' + mac)
print('-' * 37)
arp = scan() # create an instance of the class
arp.Arp('192.168.0.1/24') # call the method
解决方案
看看https://stackoverflow.com/a/57017630/5459467 有些手机根本不响应 ARP ping,主要是 iPhone。
这不一定在任何地方都有解释,可能有多种解释,例如: - 安全问题 - 电池管理
他们也会倾向于忽略免费的 ARP。您实际上可以执行的唯一操作是在路由器执行实际 ARP 请求时比路由器更快地响应,或者只是被动地嗅探所有 ARP 请求。
推荐阅读
- javascript - cc_load_policy 如何在 youtube iframe Player API 中工作以显示字幕?
- java - 单击两次加/减/除/乘按钮时,计算器应用程序崩溃
- c# - Microsoft-Teams 选项卡常规设置
- c++ - 如何正确使用带有 QSharedPointer 的析构函数
exec循环停止后? - python - PyGitHub:获取用户的私人电子邮件地址和简历
- c# - 在 asp.net 核心中更改应用程序级别的默认 DateTime 文化不变量
- c# - 在 c# 中创建一个与 linux 兼容的 wchar_t* 字符串作为 char*
- sql - “OR”运算符的工作原理
- python - 使用 odeint python 绘制 ODE 系统的时间序列图之间的差异
- bash - 在第一次迭代后,在 while 循环中运行 `rg` 会中断