【问题标题】:Forwarding packets with pcap使用 pcap 转发数据包
【发布时间】:2014-08-20 18:34:40
【问题描述】:

我尝试使用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 缓存是正​​确的。我可以看到受害者电脑中的所有广播数据包,IP 标头地址也是有效的。我不确定这是否属实,但是对于这种情况,仅修改链路层(以太网标头)就足够了,因为只有它们被欺骗了。

有时页面加载会因 DNS 服务不可用或找不到主机而终止,但有时它只是无限加载。

【问题讨论】:

    标签: networking routing packet portforwarding


    【解决方案1】:

    阅读 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 地址作为目标,这就是为什么它可以被受害者嗅探并且无论如何都无法工作的原因。

    【讨论】:

      猜你喜欢
      • 2014-03-14
      • 1970-01-01
      • 2017-03-29
      • 1970-01-01
      • 2018-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多