我尝试使用libpcap
将嗅探数据包转发到真实目的地。我正在使用arp欺骗来重定向流量,我可以在Win7上启用TCP / IP路由来路由它。是否可以仅使用libpcap(或者libnet)来做到这一点?我尝试了各种方式,使用libnet我重建了带有RAW4
接口的数据包,尝试使用链接层,将源设置为我的MAC,以及目标广播地址。
我尝试使用pcap
:
static void ForwardCallback(byte* args, const pcap_pkthdr *header, const byte* packet)
{
assert(args);
ForwInput* input = (ForwInput*)args;
PcapHandle* handle = input->handle;
assert(handle);
EthernetHeader* ethernet_header = (EthernetHeader*)packet;
//modifying the spoofed addresses
memcpy(ethernet_header->src_addr.data, input->my_mac.data, ETHER_ADDR_LEN); //my mac address
memcpy(ethernet_header->dest_addr.data, ether_broadcast, ETHER_ADDR_LEN); //0xff, 0xff...
IPv4Header* ipv4_header = (IPv4Header*)(packet + LIBNET_ETH_H);
if (pcap_sendpacket(handle, packet, header->len) == -1)
{
DumpError(pcap_geterr(handle)); //no errors
};
};
默认网关和测试笔记本电脑之间的连接是欺骗性的,并且在我的电脑上禁用转发(路由和远程访问)。我用
打开了句柄handle = pcap_open(device.c_str(),
0xffff,
PCAP_OPENFLAG_PROMISCUOUS,
100,
nullptr,
&error[0]
);
未应用过滤,我的电脑中的ARP缓存是正确的。我可以看到受害者pc中的所有广播包,IP头地址也是有效的。我不确定这是否属实,但仅修改链路层(以太网头)对于这种情况就足够了,因为只有它们是欺骗性的。
有时页面加载终止,DNS服务无法使用或无法找到主机,但有时它只是无限加载。
答案 0 :(得分:0)
在阅读了Windows RRAS和Wiki的文档后,我发现Windows(我不了解其他人)只有在目标IP地址是多播地址时才接受以太网广播数据包。所以将代码更改为(我稍后会改进):
EthernetHeader* ethernet_header = (EthernetHeader*)packet;
memcpy(ethernet_header->src_addr, input->my_mac, ETHER_ADDR_LEN); //my mac address
memcpy(ethernet_header->dest_addr, input->mitm_target, ETHER_ADDR_LEN);
pcap_sendpacket(handle, packet, header->len);
memcpy(ethernet_header->dest_addr, input->mitm_gateway, ETHER_ADDR_LEN);
pcap_sendpacket(handle, packet, header->len);
我正在使用"ip or ip6"
pcap程序过滤掉ARP数据包。我已将标记设置为PCAP_OPENFLAG_NOCAPTURE_LOCAL
和PCAP_OPENFLAG_MAX_RESPONSIVENESS
。
这将改进以使用捕获的IP从ARP表解析MACS,并且仅将数据包发送到目标MAC地址。现在它工作得很好,使用Windows 7中使用RRAS的互联网只会慢一点。
问题与libnet
相同。我完全剥离了数据包,并从第3层uwing RAW4
和RAW6
上下文重建,但API也使用广播MAC地址作为目的地,这就是为什么它可能被受害者嗅探并且无法正常工作无论如何。