如何从网络上的IP地址获取mac地址?

2024-05-11 15:01:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我在下面创建了一个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。


Tags: theto函数ipforgetreturnmac
1条回答
网友
1楼 · 发布于 2024-05-11 15:01:52

假设您只是试图实现一个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地址,要么是一个完全伪造的地址。)

scapysrp函数可以完成此操作。可能是在python中实现它的最简单方法。在

相关问题 更多 >