繁体   English   中英

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

[英]How do you get a mac address from an IP address on your network?

我在下面创建的get_mac函数遇到问题,该函数需要一个IP地址并找到其mac地址,然后将其返回或返回None。

实际的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》一书中删除的,并没有充分利用这些导入:

from scapy.all import *
from scapy.base_classes import Gen, SetGen
import scapy.plist as plist
from scapy.utils import PcapReader
from scapy.data import MTU, ETH_P_ARP
import os
import sys
import threading
import signal

对于我的整个文件文件,我一直在努力。 我正在为非常精细的目的创建自定义工具。 我是通过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页,名为:通过Scapy进行ARP缓存中毒。

假设您只是尝试实现ARP请求,则应将请求发送到MAC广播地址( FF-FF-FF-FF-FF-FF )。 您应该在以太网标头和ARP发送方MAC地址中填写自己的NIC的MAC地址作为源地址。

ARP通常的工作方式是将广播消息发送到本地网络,本质上说:“嘿,谁拥有IP地址NNNN ?请告诉我<my MAC address> 它通常包括发送者的IP地址,实际上是说“哦, MMMM ,我的IP地址是MMMM

然后通常将响应通过单播发送回请求者,这就是为什么您需要填写自己的MAC作为发送者地址的原因:这样您就可以获取响应。

还有其他“谁拥有”的ARP用法。 部分是一个虚拟对象,“哦,顺便说一句,我的地址是...”是主要目标-这被称为免费ARP,因为它通常是在没有事先请求的情况下发送的,而实际上只是宣布发送者自己的IP / MAC关联。

(您似乎并没有想问有关ARP缓存中毒的问题,但这实际上只是在讲“哦,顺便说一句”。要么使用错误的MAC地址,要么使用完全伪造的MAC地址。)

scapy srp函数非常适合执行此操作。 可能是在python中实现它的最简单方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM