【发布时间】: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