引言:
netstat -an这个命令大家都十分熟悉,但是我发现自己对于这个命令的输出内容却不是十分理解,我们不该止步于仅仅看一个端口号而已,这里其实还包含了其他信息。
测试工具:
- telnet : 可以对指定的TCP端口进行测试。
- netcat : 可以对指定的 TCP/UDP 端口进行测试。
样例:
C:\Documents and Settings\Administrator>netstat -an
Active Connections
Proto Local Address Foreign Address State
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING
TCP 0.0.0.0:1025 0.0.0.0:0 LISTENING
TCP 127.0.0.1:5152 0.0.0.0:0 LISTENING
TCP 192.168.1.111:139 0.0.0.0:0 LISTENING
UDP 0.0.0.0:445 *:*
UDP 192.168.1.111:137 *:*
UDP 192.168.1.111:138 *:*
疑问与解答:(ip地址:端口号)
- TCP协议下为什么会有
0.0.0.0:135
127.0.0.1:5152
192.168.1.111:139
这三种不同的IP表示形式?(UDP同理)
答:
1.10.0.0.0:135
表示在多IP主机下,假设该主机有三个IP地址,分别为IPA,IPB,IPC。则0.0.0.0:135
等价于IPA:135 ,IPB:135 ,IPC:135
。即对于外部主机来说,可以访问它任意一个IP下的135端口的服务。
1.2127.0.0.1:5152
表示该端口仅对本主机开放,外网无法访问。
1.3192.168.1.111:139
表示外部主机可以访问192.168.1.111
下的139端口的服务。 - TCP协议下
Foreign Address
的0.0.0.0:0
与State
2.1 表示允许任何IP地址的主机访问(可以修改规则,进行限制)。
2.2 State表示状态(监听、建立连接等等)。TCP三次握手 - UDP协议下
Foreign Address
为什么是*:*
,State
为什么为空?
3.1 UDP协议是非面向链接的不可靠传输协议,该协议下的UDP传输过程与TCP有很大差别。因为不需要三次握手建立连接,所以就不需要指定外部主机的IP地址,故这里表示为*:*
;。
3.2 State状态是针对于TCP协议的,UDP是非面向连接的,不存在类似于TCP的各种状态。所以State为空。
总结:
脑子里想了很多,但是写起来却感觉力不从心、杂乱无章。感觉自己理解的也不是十分透彻,可能会出现一些错误,希望得到大家的意见。