我在下面创建了一个get_mac函数的问题,它接受一个IP地址并查找其mac地址,返回它或None。
实际的python函数是:
function getCommandLine() {
switch (process.platform) {
case 'darwin' : return 'open';
case 'win32' : return 'start';
case 'win64' : return 'start';
default : return 'xdg-open';
}
}
var exec = require('child_process').exec;
var filepath = '...';
//dir.fullPath will throw: The file /A/example.pdf does not exist.
var child = exec(getCommandLine() + ' ' + filepath, function (error, stdout, stderr) {
if (error) {
console.error(`exec error: ${error}`);
return;
}
});
child.on('close', function (e) {
console.log('E: ', e);
});
我认为可能有更好的方法来做到这一点。这是从黑帽蟒蛇皮书中取出的,我正在利用导入:
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
我的整个文件文件我一直在工作。我正在努力创建一个非常精细的自定义工具。我正在通过ipconfig向我的伙伴运行它告诉我他的IP是192.168.0.20所以当运行时,我可以看到控制台输出这些信息。
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
12次然后打印我告诉它的内容,因为它没有返回。
....
Begin emission:
Finished to send 1 packets.
Received 12 packets, got 0 answers, remaining 1 packets
....
这是正确的行动方案吗?我的好友给我发错了IP地址吗?我想我看到他在! Failed to find Target Mac
我想我很好奇是否有更好的方式,然后ipconfig
函数我最终打电话。
我正在使用的基本样本是BlackhatPython的第52页:通过Scapy进行ARP缓存中毒。
答案 0 :(得分:1)
假设您只是尝试实现ARP请求,则应将请求发送到MAC广播地址(FF-FF-FF-FF-FF-FF
)。您应该在以太网报头中填写您自己的NIC的MAC地址作为源地址,并作为ARP发送方MAC地址填写。
ARP通常的工作方式是将广播消息发送到本地网络,实质上是说“嘿所有人,谁拥有IP地址N.N.N.N
?告诉我<my MAC address>
”。它通常还包括发件人的IP地址,实际上说“哦,顺便说一句,我的IP地址是M.M.M.M
。”
然后通常通过单播将响应发送回请求者,这就是您需要填写自己的MAC作为发件人地址的原因:这样您就可以获得响应。
还有其他ARP用法,其中“谁有?” part是虚拟的,“哦,顺便说一句,我的地址是......”是主要目标 - 这就是所谓的免费ARP,因为它经常在没有先前请求的情况下发送,实际上只是宣布发送者自己的IP / MAC协会。
(看起来你似乎并不打算询问ARP缓存中毒,但这实际上只是在说“哦,顺便说一句”条款。要么使用错误的MAC地址,要么使用完全虚假的地址。)
scapy srp
函数适合这样做。可能是在python中实现它的最简单方法。