使用pcap转发数据包

时间:2014-08-20 18:34:41

标签: networking routing packet portforwarding

我尝试使用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服务无法使用或无法找到主机,但有时它只是无限加载。

1 个答案:

答案 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_LOCALPCAP_OPENFLAG_MAX_RESPONSIVENESS

这将改进以使用捕获的IP从ARP表解析MACS,并且仅将数据包发送到目标MAC地址。现在它工作得很好,使用Windows 7中使用RRAS的互联网只会慢一点。

问题与libnet相同。我完全剥离了数据包,并从第3层uwing RAW4RAW6上下文重建,但API也使用广播MAC地址作为目的地,这就是为什么它可能被受害者嗅探并且无法正常工作无论如何。