首页新闻找找看学习计划

构造http请求报文的数据包时tcp的各标志字段怎么设置?

0
[待解决问题]

现在我需要向某个服务器发送http请求的包,但是不用tcp三次握手,只是将包发送出去即可,并且是自己构造tcp包和ip包,我将http请求报文填充到tcp包中后可以发送出去,但是wireshark抓包后为什么不显示是http包,而就是显示tcp包,是不是我的tcp某字段设置不正确,但是服务器那可以抓到我发送的这个包,也是不显示是http包,困扰很长时间了,求解答

prisoner的主页 prisoner | 菜鸟二级 | 园豆:206
提问于:2014-06-02 10:59
< >
分享
所有回答(3)
0

能说下是用哪个工具构造的包吗,我也很感兴趣,应该很好玩吧,是不是wireshark?

ThreeTree | 园豆:1490 (小虾三级) | 2014-06-02 12:40

不用工具,自己构建tcp包,然后再构建ip包,再用原始套接字发送出去

支持(0) 反对(0) prisoner | 园豆:206 (菜鸟二级) | 2014-06-03 09:06

@prisoner: soga,那用的是Java语言吗?大约是哪个包下的API呢?再次感谢了

支持(0) 反对(0) ThreeTree | 园豆:1490 (小虾三级) | 2014-06-03 12:12

@ThreeTree: 用的C,

struct ip iph;//ip头部
struct tcphdr tcph;//tcp头部

然后填充ip头部,填充上要发送的数据,填充tcp头部,建立一个原始套接字,然后sendto()发送出去

支持(0) 反对(0) prisoner | 园豆:206 (菜鸟二级) | 2014-06-03 19:24

@prisoner: 3Q

支持(0) 反对(0) ThreeTree | 园豆:1490 (小虾三级) | 2014-06-03 19:35
0

看到“但是不用三次握手”我就知道你没学过网络基础···

TCP连接的建立是一定会发生三次握手的。

http包就是字符串流,你接收后能解析字符串就没问题了

吴瑞祥 | 园豆:28733 (高人七级) | 2014-06-03 06:58

不不不,我知道tcp连接建立必须三次握手,只是我现在只需要给他发送某个内容的数据包,而不必理会服务器怎么处理我的数据包,也不必理会服务器会给我返回什么内容,只需要发送这个包并且发到服务器即可

我想问一下如果我没建立tcp链接的话我发送的包发过去后服务器会怎么处理,如果是http请求的包wireshark抓包后会不会显示是http包

支持(0) 反对(0) prisoner | 园豆:206 (菜鸟二级) | 2014-06-03 09:10

@prisoner: 你这是先建立一个连接,然后传输请求的HTTP报文.不等待返回值,马上断掉连接.

这个还真不清楚WEB服务器的处理方式.万一要是有的WEB服务一看原来的连接断了.就把处理线程终止了呢..

不推荐这样做.其实你开个后台线程让他跑着,然后不管他返回值就行了.

你那个抓包用的东西还真不知道.不过这种抓包软件一般是通过端口来验证一个包的类型的.

也就是说如果你不走80端口.他不会识别成HTTP包的.

支持(0) 反对(0) 吴瑞祥 | 园豆:28733 (高人七级) | 2014-06-03 10:54

@吴瑞祥: 恩,开了个线程让他跑了,结果基本达到预期了

就是有时候发送的包发送显示是HTTP包,但是有时候不显示HTTP包,而是显示 [TCP segment of a reassembled PDU](wireshark抓包的结果),意思是在tcp层上发生了分包,像ip分片一样,发送的http报文并不是很大,整个ip包也就是不到200Byte,不知道什么原因,走的都是80端口

支持(0) 反对(0) prisoner | 园豆:206 (菜鸟二级) | 2014-06-03 19:29

@prisoner: 明白了。这个有可能抓的是2层的包。IP包在二层会被分包的

支持(0) 反对(0) 吴瑞祥 | 园豆:28733 (高人七级) | 2014-06-04 09:08
0

你的 HTTP 请求的内容是什么?

Launcher | 园豆:45030 (高人七级) | 2014-06-03 09:24

“GET / HTTP/1.1\r\nHost:www.baidu.com\r\nConnection:keep-alive\r\n\r\n”

就是一个向百度发送的请求报文,也可以是别的类型的报文,只要是http的报文就行,主要是用作网络模拟用的,产生各种http报文的流量

支持(0) 反对(0) prisoner | 园豆:206 (菜鸟二级) | 2014-06-03 19:21

@prisoner: 请求格式没啥问题。TCP 本身是没有什么标识来让应用程序识别出是否为 HTTP,而是应用程序通过对 TCP 的有效载荷进行 HTTP 词法分析得出结论。你可以换几种抓包软件试试。

另外“TCP segment of a reassembled PDU”是不是 ACK 包?

支持(0) 反对(0) Launcher | 园豆:45030 (高人七级) | 2014-06-04 09:17

@Launcher: 不是ACK包,ACK包显示是[SYN,ACK],实在不知道是什么情况

支持(0) 反对(0) prisoner | 园豆:206 (菜鸟二级) | 2014-06-06 19:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册