怎样用libpcap收到一个包后用libnet将目的ip改变后转发出去
要在linux下用libpcap收到一个包后用libnet将目的ip改变后转发出去。
u_char enet_src[6] = {0x00, 0x13, 0xd3, 0x87, 0x3c, 0xe2};
u_char enet_dst[6] = {0x00, 0x13, 0x20, 0xe5, 0x69, 0x21};
t = libnet_build_ethernet(
enet_dst, /* ethernet destination */
enet_src, /* ethernet source */
ETHERTYPE_IP, /* protocol type */
NULL, /* payload */
0, /* payload size */
l,
0);
以上结果可以在Ethereal中可以看到该包已经正确发出。
但如果
u_char enet_src[6] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
u_char enet_src2[6] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
memcpy(enet_src, lpEthdr->eh_dst,6);
memcpy(enet_dst, lpEthdr->eh_src,6);
t = libnet_build_ethernet(
(u_int8_t *)enet_src, /* ethernet destination */
(u_int8_t *)enet_dst, /* ethernet source */
ETHERTYPE_IP, /* protocol type */
NULL, /* payload */
0, /* payload size */
l, /* libnet handle */
0);
在Ethereal中看不到该包,但enet_src、enet_dst的值是对的。
以太网头是这样定义的:
typedef struct _et_header //以太网头部
{
unsigned char eh_dst[6];
unsigned char eh_src[6];
unsigned short eh_type;
}ET_HEADER;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论