能说下是用哪个工具构造的包吗,我也很感兴趣,应该很好玩吧,是不是wireshark?
不用工具,自己构建tcp包,然后再构建ip包,再用原始套接字发送出去
@prisoner: soga,那用的是Java语言吗?大约是哪个包下的API呢?再次感谢了
@ThreeTree: 用的C,
struct ip iph;//ip头部
struct tcphdr tcph;//tcp头部
然后填充ip头部,填充上要发送的数据,填充tcp头部,建立一个原始套接字,然后sendto()发送出去
@prisoner: 3Q
看到“但是不用三次握手”我就知道你没学过网络基础···
TCP连接的建立是一定会发生三次握手的。
http包就是字符串流,你接收后能解析字符串就没问题了
不不不,我知道tcp连接建立必须三次握手,只是我现在只需要给他发送某个内容的数据包,而不必理会服务器怎么处理我的数据包,也不必理会服务器会给我返回什么内容,只需要发送这个包并且发到服务器即可
我想问一下如果我没建立tcp链接的话我发送的包发过去后服务器会怎么处理,如果是http请求的包wireshark抓包后会不会显示是http包
@prisoner: 你这是先建立一个连接,然后传输请求的HTTP报文.不等待返回值,马上断掉连接.
这个还真不清楚WEB服务器的处理方式.万一要是有的WEB服务一看原来的连接断了.就把处理线程终止了呢..
不推荐这样做.其实你开个后台线程让他跑着,然后不管他返回值就行了.
你那个抓包用的东西还真不知道.不过这种抓包软件一般是通过端口来验证一个包的类型的.
也就是说如果你不走80端口.他不会识别成HTTP包的.
@吴瑞祥: 恩,开了个线程让他跑了,结果基本达到预期了
就是有时候发送的包发送显示是HTTP包,但是有时候不显示HTTP包,而是显示 [TCP segment of a reassembled PDU](wireshark抓包的结果),意思是在tcp层上发生了分包,像ip分片一样,发送的http报文并不是很大,整个ip包也就是不到200Byte,不知道什么原因,走的都是80端口
@prisoner: 明白了。这个有可能抓的是2层的包。IP包在二层会被分包的
你的 HTTP 请求的内容是什么?
“GET / HTTP/1.1\r\nHost:www.baidu.com\r\nConnection:keep-alive\r\n\r\n”
就是一个向百度发送的请求报文,也可以是别的类型的报文,只要是http的报文就行,主要是用作网络模拟用的,产生各种http报文的流量
@prisoner: 请求格式没啥问题。TCP 本身是没有什么标识来让应用程序识别出是否为 HTTP,而是应用程序通过对 TCP 的有效载荷进行 HTTP 词法分析得出结论。你可以换几种抓包软件试试。
另外“TCP segment of a reassembled PDU”是不是 ACK 包?
@Launcher: 不是ACK包,ACK包显示是[SYN,ACK],实在不知道是什么情况