netfilter内核修改点东西,可以出钱,有能力的希望可以帮助下我
netfilter下要获取http请求的相关参数,从SKB里获取http的请求相关内容,不需要写什么勾子什么的,只要告诉我怎么从skb里获取到http的内容就行了,可以出钱请人帮写代码,有能力的希望留下联系方式,谢谢了。 回复 1# yywx1314LZ 觉得难点在于什么。skb 都可以拿到,那就按照 skb->data 然后自己一点一点取数据就行了。
看一下置顶精华帖中构造 skb 的帖子,无非就是取出 iphdr,然后再取出 tcphdr,然后再解析出 tcp payload。然后解析出payload 中最开始的 GET /XXX 的数据就 OK 了。
解析出 tcp payload这里是难点,我怎么都解析不出这里 我是centos7,内核是3.10.0 Godbach 发表于 2016-05-04 22:08 static/image/common/back.gif
回复 1# yywx1314
LZ 觉得难点在于什么。skb 都可以拿到,那就按照 skb->data 然后自己一点一点取数据就 ...
前辈可以给个具体的实现代码吗? 回复 5# yywx1314
解析 iphdr 你知道怎么获取吗?
Godbach 发表于 2016-05-04 22:46 static/image/common/back.gif
回复 5# yywx1314
解析 iphdr 你知道怎么获取吗?
struct sk_buff *sk = NULL;
sk = skb_copy(skb, GFP_ATOMIC);
struct iphdr *iph = ip_hdr(sk);
struct tcphdr *tcph;
char * payload = NULL;
tcph = (void*)iph + iph->ihl * 4;
if (iph->protocol == IPPROTO_TCP)
{
int daddr = iph->daddr;
int dport = tcph->dest;
int port = ntohs(dport);
if (likely(port == 80)) {
if (0 != skb_linearize(skb)) {
return NF_ACCEPT;
}
payload = skb->data + 40
pr_warn("plyload数据 %s\n", payload);//我这里输出的好像不对,是乱码,而且每次刷新都不一样
}
}
我是这样的,你看对吗? Godbach 发表于 2016-05-04 22:46 static/image/common/back.gif
回复 5# yywx1314
解析 iphdr 你知道怎么获取吗?
前辈,加个Q吧,我的QQ:五八74九7 回复 7# yywx1314
payload = skb->data + 40
pr_warn("plyload数据 %s\n", payload);//我这里输出的好像不对,是乱码,而且每次刷新都不一样
通过 tcph 取出 payload,不要用 skb->data + 40。你怎么保证一定是 40 bytes 之后就是 payload 呢。
送你一行代码试试 {:qq28:}unsigned char *tcp_appdata = (unsigned char *) tcph + (tcph->doff << 2); 回复 8# yywx1314
六位 qq 号,很流弊的样子。{:qq11:}