当前位置: 技术问答>linux和unix
关于linux,tcphdr结构体未定义,求大神帮忙
来源: 互联网 发布时间:2017-01-29
本文导语: 我们现在在做一个简单的小防火墙,现在在做hook,我们已经可以阻塞固定的源、目的地址以及协议的数据包,现在想阻塞固定端口的,但tcphdr这个结构体在编译的时候总是提示:‘tcphdr’ undeclared (first use in this f...
我们现在在做一个简单的小防火墙,现在在做hook,我们已经可以阻塞固定的源、目的地址以及协议的数据包,现在想阻塞固定端口的,但tcphdr这个结构体在编译的时候总是提示:‘tcphdr’ undeclared (first use in this function),之前阻拦地址时,使用的iphdr就没有问题,现在tcphdr就不行,不知何故。求大神指导!主要代码如下:
#include
#include
#include
#include
#include
#include
#include
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_buff *))
{
if(!skb)
return NF_ACCEPT;
else {
struct iphdr * iph = (struct iphdr *)skb_network_header(skb);
if (!iph)
return NF_ACCEPT;
//else if (iph->saddr == 27240640)
// return NF_DROP;
//else if (iph->daddr == 2191501504)
// return NF_DROP;
else if (iph->protocol == IPPROTO_TCP) {
struct tcphdr * tcph = (struct tcphdr *)skb_transport_header(skb);
//struct tcphdr * tcph;
if (tcphdr->source == 21)
return NF_DROP;
if (tcphdr->dest == 80)
return NF_DROP;
return NF_ACCEPT;
}
//else if (iph->protocol == IPPROTO_UDP){
// struct udphdr * udph = (struct udphdr *)skb_transport_header(skb);
// if (tcphdr->source == 21)
// return NF_DROP;
// if (tcphdr->dest == 80)
// return NF_DROP;
// return NF_DROP;
//}
//else if (iph->protocol == IPPROTO_ICMP)
// return NF_DROP;
}
return NF_ACCEPT;
}
|
我在代码(嵌入式linux)里搜了一下,关于tcphdr的定义就有四个头文件,其中有两处明显不同,分别是 kernellinuxincludelinuxtcp.h 和 我们自己用户空间里的 定义文件。
建议你去你包含的头文件 里去查一下 tcphdr 结构的定义,是不是和你使用的是一致的。
另外,我看你的需求,无非是对源,目的IP、MAC、PORT之类的流做过滤,这个功能用iptables就很容易实现啊,为什么要自己做呢?
建议你去你包含的头文件 里去查一下 tcphdr 结构的定义,是不是和你使用的是一致的。
另外,我看你的需求,无非是对源,目的IP、MAC、PORT之类的流做过滤,这个功能用iptables就很容易实现啊,为什么要自己做呢?