Section I Problem Specification
本次实验主要是写一个程序:能够扫描到指定Ip地址的端口是否开放。主要利用TCP协议,因为如果端口开放,目的主机将会:发送固定格式的TCP数据给源主机,表示:可以利用TCP进行连接。如果端口没有开发,那么也会返回一个特别的TCP数据包给源主机,表示不能连接。我们主要是根据返回的TCP数据包判断该端口是否开放。
TCP数据包:
作为必备的知识,主要就是TCP数据包的格式以及各个字段的含义:
上面两幅图清楚的指明了TCP数据包的格式以及内容,下面对其内容作简要的解释:
序列号(sequence Number):TCP协议将发送一段连接的数据,这个序列号也就是按照数据流的先后顺序给每个发送的数据包编号
确认号(Acknowledgement number):表示接收端希望接受的下一个TCP协议包的第一个字节的编号,与发送端下一个要发的序列号相对应。
头部长度:TCP数据包的长度,单位为ULONG,其范围为5到15之间,基本长度为20B,最长可以是60B。
保留字段:无实际用途,设置为0。
控制字段:
SYN:同步信息,用于建立一个新的TCP连接
SYN:同步信息,用于建立一个新的TCP连接
ACK:确认信息,当当前号设置为1时,表示确认号才有效。
PSH:表示希望协议栈尽快向上层传递数据
RST:表示Reset,强制切断连接
URG:表示需要紧急处理的数据存在。
FIN:连接正常终止,用来接收现有的TCP连接
PSH:表示希望协议栈尽快向上层传递数据
RST:表示Reset,强制切断连接
URG:表示需要紧急处理的数据存在。
FIN:连接正常终止,用来接收现有的TCP连接
窗口大小:用来表示滑动窗口的大小
校验和:数据报的忘记校验和
紧急指针:代表紧急数据在数据包中的位置,在URG置位时才有效(置位一词说的是将该位设置为1)
利用TCP扫描端口:
TCP连接的正常流程,
- Host A 发一个 SYN 包 给Hos