我正在尝试创建一个内核模块,该模块能够通过netfilter挂钩从它接收到的数据包中发送出已修改的数据包。我正在使用提供here的代码框架。我只是使用这段代码在内核中创建一个原始套接字:
struct socket *sockptr;
sock_create(PF_INET, SOCK_RAW, IPPROTO_TCP, &sockptr);
sendpacket函数由此调用:
len = sendpacket(sockptr, dev, IPPROTO_TCP, duplicate, ntohs(dupiph->tot_len));
socketptr是我创建的原始套接字,dev是挂钩函数传递给我的net_device,而复制是原始数据包的修改副本。
从调用返回到dev_queue_xmit表示数据包已成功传输但我无法在线路上看到数据包。我有两个问题:首先,我希望能够更好地调试正在发生的事情,因此对此提出的任何建议都非常感谢。另外,我想知道我是否正确处理套接字创建或者是否存在某种类型的配置我缺少。这对我来说都很新鲜,所以很可能是我错过了一些愚蠢的东西。
答案 0 :(得分:1)
您不太可能需要修改内核来完成任务。您是否考虑过使用tun或tap界面,以便在用户空间中完成所有工作?这是一个教程:http://backreference.org/2010/03/26/tuntap-interface-tutorial/