读书人

自定义TCP数据包广域网 传输?该如何

发布时间: 2012-01-19 20:57:58 作者: rapoo

自定义TCP数据包,广域网 传输???
前提:A、B两机,A有一个外网地址可 远程桌面;B在局域网中,无外网地址,通过路由上网。(A、B机都装有抓包软件)

我想达到的效果:
自己构建一个TCP数据包,用passthru发送,并能得到确认帧。
但是,我在实现过程中,遇到一些问题:(我未做TCP握手,直接在内核层构建数据包-->发送) B机向A机发送TCP数据包:(ETHeader+IPHeader+TCPHeader+ 84 bytes乱输的数据部分 ==> 138bytes总长) 下面是一些实验测试数据/现象:

B机中构建的数据包中的一些设置 A机中的效果/现象
flags=0x18、port:8000、SEQ=123、ACK=321 抓包软件未得到B发来的数据
flags=0x02、port:8000、SEQ=123、ACK=0 抓到SYN包,但抓到A机返回的包是flags=0x14 (即ACK+RST)
flags=0x18、port:80、SEQ=123、ACK=321 抓包软件未得到B发来的数据
flags=0x02、port:80、SEQ=123、ACK=0 抓到SYN包,并且A机返回SYN+ACK包(其中SEQ=3808281014、ACK=124) ------①

上面4中情况中 ①还算有点希望,但是,B机继续用返回的 SEQ=3808281014、ACK=124 来构建 ACK数据包(即 SEQ=124、ACK=3808281014、flags=0x10)并发送-->想模拟第三次握手,但是接着发flags=0x18数据包时,A机还是收不到 数据包。 是我发第三次握手数据包发的慢了还是别的原因?(因为我是看B机抓到的SYN+ACK包,再手动输入SEQ+ACK并发送ACK数据包的,而且看到A机发了3个SYN+ACK给B机)
再者,我不发第三次握手数据包,在收到A机发的SYN+ACK包后,直接发flags=0x18数据包,A机也收不到flags=0x18数据包。


总结一下我的问题:
要达到我的期望要求:自己构建一个TCP数据包,用passthru发送,并能得到确认帧。
应该如何实现??
1、是否必须先做TCP三次握手??
2、某端口上是否必须有应用层的Server端exe程序在等待数据??(或者说 在等待 3次握手)
3、能否不用应用层建立TCP连接,直接在内核层3次握手,建立TCP连接???And how??
4、TCP确认帧是谁发的??(应用程序?内核程序?还是别人?)什么条件触发其发送TCP确认帧???


PS:
我发送UDP数据包时(通过passthru ,B机-->A机8000端口):情况1、A机上,无程序接收8000端口数据:A机会返回ICMP destination unreachable包。
情况2、A机上,放一个UDP聊天程序接收8000信息:就不返回什么了,一切正常。

[解决办法]
总结一下我的问题:
要达到我的期望要求:自己构建一个TCP数据包,用passthru发送,并能得到确认帧。
应该如何实现??
1、是否必须先做TCP三次握手??
对。
2、某端口上是否必须有应用层的Server端exe程序在等待数据??(或者说 在等待 3次握手)
理论上是这样。client/server双方要建议一个tcp socket进程。一个做为server,一个作为client.
3、能否不用应用层建立TCP连接,直接在内核层3次握手,建立TCP连接???And how??
我不知你用什么库或者环境做开发,以我的经验看,为了简便起见,写个socket应用程序比改内核要简单。
4、TCP确认帧是谁发的??(应用程序?内核程序?还是别人?)什么条件触发其发送TCP确认帧???
TCP确认包是TCP协议栈生成的,通过数据链路被打包成帧。接收到对方发送过来的数据包就要发回ACK包。

PS:
我发送UDP数据包时(通过passthru ,B机-->A机8000端口):情况1、A机上,无程序接收8000端口数据:A机会返回ICMP destination unreachable包。
情况2、A机上,放一个UDP聊天程序接收8000信息:就不返回什么了,一切正常。

passthru,我没用过,也不知道是什么东西,有关TCP/IP协议的知识,参考《TCP/IP详解》,RFC文档。
[解决办法]
参考半开式TCP扫描工具,去实现发包
[解决办法]
最好本机也抓下包,看看数据是否正确,尤其是1个checksum

passthru没用过,我以前用winpcap发udp包,没有任何问题,关键是checksum
[解决办法]
路过, 感觉这个前提说得不太清楚!

前提:A、B两机,A有一个外网地址可 远程桌面;B在局域网中,无外网地址,通过路由上网。(A、B机都装有抓包软件)


A有一个外网地址可 远程桌面????

我觉得lz应该把你的A和B的IP地址以及外网地址和路由器的地址说出来, 并稍稍阐释一下网络连接方式.
[解决办法]
中间有NAT吗
[解决办法]
广域网的类似应用很多,象QQ等,可以参考。

读书人网 >VC/MFC

热点推荐