我在下面创建了一个get_mac函数,它接受一个IP地址并找到它的mac地址,返回它或不返回它。在
实际的python函数是:
def get_mac(ip_addr):
"get_mac is used to obtain the mac address of the target ip."
print "Getting Mac for: %s" % ip_addr
responses, unanswered = srp(Ether(dst="de:ad:be:ef:ca:fe")/ARP(pdst=ip_addr),timeout=2,retry=10)
for s,r in responses:
return r[Ether].src
return None
我想也许有更好的方法来做这件事。这是从Black Hat Python书籍中摘取的,我利用了导入:
^{pr2}$我一直在处理的整个文件。我正在为一个非常精细的目的创建一个自定义工具。我用ipconfig告诉我他的IP是192.168.0.20,所以当我运行它的时候,我可以看到控制台输出这些信息。在
....
Begin emission:
Finished to send 1 packets.
Received 12 packets, got 0 answers, remaining 1 packets
....
12次,然后打印了我告诉它的内容,因为它没有返回。在
! Failed to find Target Mac
这是正确的做法吗?我的朋友给我发错IP地址了吗?我想我看到他在ipconfig
给了我ipv4
我想我很好奇是否有比我最后调用的srp()
函数更好的方法。在
我使用的基本示例是BlackhatPython的第52页,名为:ARP Cache poxing via Scapy。
假设您只是试图实现一个ARP请求,那么该请求应该被发送到MAC广播地址(
FF-FF-FF-FF-FF-FF
)。你应该填写你自己的网卡的MAC地址作为源地址,既在以太网报头,也作为ARP发送方MAC地址。在ARP的典型工作方式是向本地网络发送广播消息,本质上是说“嗨,大家好,谁有IP地址
N.N.N.N
?告诉我<my MAC address>
。“它通常也包括发送者的IP地址,实际上是说“哦,顺便说一下,我的IP地址是M.M.M.M
。”然后,响应通常通过单播发送回请求者,这就是为什么您需要填写自己的MAC作为发送者地址:这样您就可以得到响应。在
还有其他ARP用法,其中“who has?”part是一个虚拟的,“哦,顺便说一下,我的地址是…”是我们称之为免费ARP的主要目标,因为它通常是在没有预先请求的情况下发送的,基本上只是宣布发送方自己的IP/MAC关联。在
(看来你不是想问ARP缓存中毒的问题,但这基本上只是在“哦,顺便说一下”条款上撒谎。要么是错误的MAC地址,要么是一个完全伪造的地址。)
scapy
srp
函数可以完成此操作。可能是在python中实现它的最简单方法。在相关问题 更多 >
编程相关推荐