我在一个小型防火墙上工作,我必须从端口80 (http)的每个tcp数据包中检索数据,以便对其进行解析。这段代码在debian 32位虚拟机上运行良好,我可以打印每个网页的页眉,但当我试图加载内核模块并通过http端口传输一些数据时,它不打印数据。
当我编译时,它只在我的64位计算机上显示这些警告:
/home/dev3/C/FIREWALL/firewall.c: In function ‘hook_func’:
/home/dev3/C/FIREWALL/firewall.c:179: warning: cast from pointer to integer of different s
我正试图为Ubuntu构建一个可加载的内核模块(LKM),以阻止一系列IP地址。我的测试地址范围是172.217.13.68/24。我已经试着比较iphdr->马赛尔与网络和广播地址的范围.网络地址和广播地址最初是作为字符提供的,但随后被类型转换为无符号int。当我们将这种方法用于范围时,所有的网络流量数据包都会被阻塞,而不是那些仅仅在范围内的数据包。对于如何进行比较,有什么建议吗?
My代码:语言C
static struct nf_hook_ops nfho; //struct holding set of hook function options
//function to b
我正在尝试创建linux内核模块,它将检查传入的数据包。目前,我正在提取数据包的TCP报头并读取源端口和目标端口->,但是我得到了不正确的值。我有钩子功能:
unsigned int hook_func(unsigned int hooknum, struct sk_buff *skb,
const struct net_device *in,
const struct net_device *out,
int (*okfn)(struct sk
我想将使用netfilter捕获的数据包的源和目标IP地址转换为char *。
在我的netfilter钩子函数中,我有:
sock_buff = skb; // argument 2 of hook function
// ip_header is struct iphdr*
ip_header = (struct iphdr *)skb_network_header(sock_buff);
// now how to convert ip_header->saddr & ip_header->daddr to char *
// ip_header->sadd