TCP/IP 头分析
一次向baidu发送的http请求
IP头
45 00 00 28 00 f6 40 00 40 06 84 46 c0 a8 12 23 dc b5 06 13
45 —— 4代表IP4版本,50代表IP头长度20;
00 —— 8位0代表服务类型,定义了数据传输的优先级、延迟、吞吐量和可靠性等特性
00 28 —— 总长度40字节8个BIT的含义是:
000 前三位不用
0 表示最小时延,如Telnet服务使用该位
0 表示吞吐量,如FTP服务使用该位
0 表示可靠性,如SNMP服务使用该位
0 表示最小代价
0 不用
00 f6 —— IP包标识,主机使用它唯一确定每个发送的数据报
40 00 —— 表示片标志,占3个BIT。各位含义分别为:第一个“0”不用,第二个“0”为分片标志位,“1”表示分片,“0”表示不分版本。第三个0为是否最后一片标志位,0表示最后一片,1表示还有更多的片。 表示片偏移为0个Bytes。该部分占13个BIT。
40 —— 表示生存时间TTL值为40,该部分占8个BIT。
06 —— 6(TCP),表示协议类型为TCP,协议代码是6。如果是UDP协议,则此处的协议代码应为17。如果是ICMP协议,则此处的协议代码应为1。该部分占8个BIT。
84 46 —— 表示IP包头校验和为,括号内的Correct表示此IP数据包是正确的,没有被非法修改过。该部分占16个BIT,用十六进制表示。
c0 a8 12 23 —— 源IP地址
dc b5 06 13 —— 指向IP地址
TCP头信息
04 0f 00 50 3e e1 60 31 ee 34 89 49 50 10 20 00 bf 50 00 00
04 0f —— 端口 1039
00 50 —— 80端口
3e e1 60 31 —— 表示初始连接的请求号,即SEQ值。该部分占32个BIT,值从1到2的32次方减1。
—— 对方应答也应该是这个值
ee 34 89 49 —— 响应码
50 —— 数据偏移
10 —— 标记 ,该值用两个十六进制数来表示。该部分长度为6个BIT,6个标志位的含义分别是:
0 URG,紧急数据标志,为1表示有紧急数据,应立即进行传递。20 00 —— 表示窗口,该部分占16个BIT。
0 ACK,确认标志位,为1表示此数据包为应答数据包
0 PSH,PUSH标志位,为1表示此数据包应立即进行传递。
0 RST:复位标志位。如果收到不属于本机的数据包,则返回一个RST
0 SYN:连接请求标志位。为1表示为发起连接的请求数据包。
0 FIN:结束连接请求标志位。为1表示是结束连接的请求数据包。
bf 50 —— 表示校验和。该部分占16个BIT,用十六进制表示。
00 00 —— 表示紧急指针为0。该部分占16个BIT。
DLC的头和结尾在raw socket中不用设置。
Http报文问题。
在一次HTTP请求中,在 紧急指针 结束后,跟了 608 字节的Http Header
47 45 54 20 2f 69 6d 67 2f 62 61 69 64 75 5f 6c 6f 67 6f 2e 67 69 66 20 48 54 54 50 2f 31 2e 31 0d 0a 41 63 63 65 70 74 3a 20 2a 2f 2a 0d 0a 52 65 66 65 72 65 72 3a 20 68 74 74 70 3a 2f 2f 77 77 77 2e 62 61 69 64 75 2e 63 6f 6d 2f 0d 0a 41 63 63 65 70 74 2d 4c 61 6e 67 75 61 67 65 3a 20 7a 68 2d 63 6e 0d 0a 55 73 65 72 2d 41 67 65 6e 74 3a 20 4d 6f 7a 69 6c 6c 61 2f 34 2e 30 20 28 63 6f 6d 70 61 74 69 62 6c 65 3b 20 4d 53 49 45 20 38 2e 30 3b 20 57 69 6e 64 6f 77 73 20 4e 54 20 35 2e 32 3b 20 54 72 69 64 65 6e 74 2f 34 2e 30 3b 20 2e 4e 45 54 20 43 4c 52 20 31 2e 31 2e 34 33 32 32 3b 20 2e 4e 45 54 20 43 4c 52 20 32 2e 30 2e 35 30 37 32 37 3b 20 2e 4e 45 54 20 43 4c 52 20 33 2e 30 2e 30 34 35 30 36 2e 36 34 38 3b 20 2e 4e 45 54 20 43 4c 52 20 33 2e 35 2e 32 31 30 32 32 3b 20 2e 4e 45 54 20 43 4c 52 20 33 2e 30 2e 34 35 30 36 2e 32 31 35 32 3b 20 2e 4e 45 54 20 43 4c 52 20 33 2e 35 2e 33 30 37 32 39 29 0d 0a 55 41 2d 43 50 55 3a 20 78 38 36 0d 0a 41 63 63 65 70 74 2d 45 6e 63 6f 64 69 6e 67 3a 20 67 7a 69 70 2c 20 64 65 66 6c 61 74 65 0d 0a 49 66 2d 4d 6f 64 69 66 69 65 64 2d 53 69 6e 63 65 3a 20 57 65 64 2c 20 33 30 20 4a 75 6c 20 32 30 30 38 20 31 30 3a 32 33 3a 30 30 20 47 4d 54 0d 0a 49 66 2d 4e 6f 6e 65 2d 4d 61 74 63 68 3a 20 22 35 64 31 2d 34 38 39 30 34 31 30 34 22 0d 0a 48 6f 73 74 3a 20 77 77 77 2e 62 61 69 64 75 2e 63 6f 6d 0d 0a 43 6f 6e 6e 65 63 74 69 6f 6e 3a 20 4b 65 65 70 2d 41 6c 69 76 65 0d 0a 43 6f 6f 6b 69 65 3a 20 42 41 49 44 55 49 44 3d 38 45 38 34 31 39 36 35 32 43 32 38 43 34 31 44 37 41 35 44 34 42 42 32 35 32 34 36 31 33 32 32 3a 46 47 3d 31 3b 20 42 44 53 54 41 54 3d 36 62 39 64 65 66 35 36 38 32 37 61 38 35 34 33 33 30 34 65 32 35 31 66 39 35 63 61 64 31 63 38 61 37 38 36 63 39 31 37 37 66 33 65 36 37 30 39 63 39 33 64 37 30 63 66 33 61 63 37 39 33 33 64 0d 0a 0d 0a
接下来要试试 Raw Socket发送HTTP报文了。