Linux netstat
命令 可以查看网络的连接状态信息,我们用于查看应用程序的端口连接信息。
命令格式
netstat [选项]
其中选项可以缺省,相关选项如下:netstat 命令参数 | 说明 |
---|---|
-a (all) | 显示所有选项,默认不显示LISTEN相关 |
-t (tcp) | 仅显示tcp相关选项 |
-u (udp) | 仅显示udp相关选项 |
-n | 拒绝显示别名,能显示数字的全部转化成数字。 |
-l | 仅列出有在 Listen (监听) 的服務状态 |
-p | 显示建立相关链接的程序名 |
-r | 显示路由信息,路由表 |
-e | 显示扩展信息,例如uid等 |
-s | 按各个协议进行统计 |
-c | 每隔一个固定时间,执行该netstat命令。 |
返回字段的含义
通过netstat
命令我们可以看到返回结果中有些参数需要我们了解的,如下:
- Proto:代表协议(tcp、tcp6、udp、udp6)
- Recv-Q:数据已经在本地接收缓冲,但是还没有recv()
- Send-Q:对方没有收到的数据或者说没有Ack的,还是本地缓冲区
- Local Address: 本地IP:本地端口
- Foreign Address: 远程IP:远程端口
- State:链接状态(监听状态:LISTEN、建立连接状态:ESTABLISHED等)
- PID:进程PID号
- Program name:程序名字
例子
1. 通过进程id查看应用程序的端口占用情况
[root@localhost ~]# netstat -anp|grep 17830
tcp6 0 0 :::8081 :::* LISTEN 17830/java
tcp6 0 0 192.168.8.199:59334 192.168.8.15:1521 ESTABLISHED 17830/java
tcp6 0 0 127.0.0.1:43988 127.0.0.1:3306 ESTABLISHED 17830/java
tcp6 0 0 192.168.8.199:48412 192.168.8.134:1433 ESTABLISHED 17830/java
unix 2 [ ] STREAM CONNECTED 45022028 17830/java
unix 2 [ ] STREAM CONNECTED 45018064 17830/java
其中17830是进程ID,
我们可以看到这个java应用的程序所在的ip地址为192.168.8.199,监听端口8081,它连接了3个服务,根据端口号我们可以知道。
127.0.0.1:3306,显然是本地mysql数据库
192.168.8.15:1521,显然是ip地址为192.168.8.15的oracle数据库
192.168.8.134:1433,显然是sqlserver的数据库。
以上,看来netstat 命令可以更好的查看应用程序的连接异常问题。
2. 查看某个端口的网络连接
[root@localhost ~]# netstat -anp|grep 8081
tcp6 0 0 :::8081 :::* LISTEN 17830/java
tcp6 0 0 192.168.8.199:8081 192.168.8.131:39125 TIME_WAIT -
tcp6 0 0 192.168.8.199:8081 192.168.8.131:39124 TIME_WAIT -
tcp6 0 0 192.168.8.199:8081 192.168.8.131:39123 TIME_WAIT -
tcp6 0 0 192.168.8.199:8081 192.168.8.131:39117 TIME_WAIT -
unix 3 [ ] STREAM CONNECTED 80814 780/dbus-daemon /var/run/dbus/system_bus_socket
unix 3 [ ] STREAM CONNECTED 80813 1213/gdm
这里查询端口8081与之连接的服务器为192.168.8.131。