+ -
当前位置:首页 → 问答吧 → 还是问RST的问题,请大家帮忙看看

还是问RST的问题,请大家帮忙看看

时间:2010-06-24

来源:互联网

昨天上网找了很多资料,发现是这样:
我在Proxy上建立了一个tcp的原始套接字,负责把网内的包转发到网外(反之亦然)
问题是:
1Proxy向网外的站点发了一个SYN的包
2站点返回一个SYN ACK的包
3这个SYN ACK包先被内核截获了,并且内核判断并不存在相应的soket,所以给站点发了RST
4在这之后,我写的tcp原始套接字才收到这个SYN ACK的包(是否内核发过来的拷贝?)
请问这样的情况,需要怎么处理?如何在内核截获并处理这个包之前,通过程序把这个包取到?

着急得不行,饭都吃不下了,觉也睡不好。在这里谢谢各位了。。。

作者: steven198662   发布时间: 2010-06-24

顶上去,高手快来帮忙

作者: 东北008   发布时间: 2010-06-24

再顶顶

作者: steven198662   发布时间: 2010-06-24

本帖最后由 ideawu 于 2010-06-24 19:11 编辑

unp:


QUOTE:
Received UDP packets and received TCP packets are never passed to a raw socket. If a process wants to read IP datagrams containing UDP or TCP packets, the packets must be read at the datalink layer, as described in Chapter 29.



所以, 你应该用下面这种方式创建 packet socket:

fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));

如果你是用这种方式来创建的

fd = socket(AF_INET, SOCK_RAW, protocol);

我怀疑第4条, 你能否收到内核发来的SYN-ACK报文.

==== 补充 ===

好像楼主用的就是第二种. 找到一个答案, 就是配置 iptables, 丢掉包RST, 楼主可以试试:

iptables -A OUTPUT -p tcp --tcp-flags RST RST -j DROP
http://stackoverflow.com/questio ... -from-responding-to

作者: ideawu   发布时间: 2010-06-24

回复 ideawu


    兄弟,太谢谢你了,真的。

作者: steven198662   发布时间: 2010-06-24