查看网络端口是否被使用

查看一个网络端口是否被使用,我们可以通过netstat命令获取当前Linux系统下网络端口的使用信息,如果里面包含我们查询的端口,说明此端口被使用;反之,说明此端口没有被使用。netstat使用如下:

// 查看UDP使用信息,其中包含了端口的使用信息
$ netstat -au
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
udp        0      0 0.0.0.0:mdns            0.0.0.0:*                          
udp        0      0 0.0.0.0:53001           0.0.0.0:*                          
udp        0      0 zrk-xxxx:domain      0.0.0.0:*                          
udp        0      0 0.0.0.0:bootps          0.0.0.0:*                          
udp        0      0 0.0.0.0:sunrpc          0.0.0.0:*                          
udp        0      0 localhost:323           0.0.0.0:*                          
udp        0      0 0.0.0.0:56070           0.0.0.0:*                          
udp        0      0 localhost:804           0.0.0.0:*                          
udp6       0      0 [::]:mdns               [::]:*                             
udp6       0      0 [::]:60681              [::]:*                             
udp6       0      0 [::]:40404              [::]:*                             
udp6       0      0 [::]:sunrpc             [::]:*                             
udp6       0      0 localhost:323           [::]:*      

// 查看TCP使用信息,其中包含了端口的使用信息
$ netstat -at
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 zrk-xxxx:domain      0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN     
tcp        0      0 localhost:ipp           0.0.0.0:*               LISTEN     
tcp        0      0 localhost:33125         0.0.0.0:*               LISTEN     
tcp        0      0 localhost:10248         0.0.0.0:*               LISTEN     
tcp        0      0 localhost:10249         0.0.0.0:*               LISTEN     
tcp        0      0 localhost:9099          0.0.0.0:*               LISTEN
......

进一步思考netstat是如何得知端口的占用情况的呢?查看netstat源码可以看出它是通过解析/proc/net路径下对应的文件得知对应的端口使用情况的。不同的网络协议对应不同的文件。例如,/proc/net/udp文件存放的就是udp协议相关的网络使用信息。

$ ls /proc/net/
anycast6   fib_trie      igmp6          ip_tables_matches  ip_vs_conn          netfilter            protocols  rpc        sockstat      udp
arp        fib_triestat  ip6_flowlabel  ip_tables_names    ip_vs_conn_sync     netlink              psched     rt6_stats  sockstat6     udp6
connector  icmp          ip6_mr_cache   ip_tables_targets  ip_vs_stats         netstat              ptype      rt_acct    softnet_stat  udplite
dev        icmp6         ip6_mr_vif     ipv6_route         ip_vs_stats_percpu  nf_conntrack         raw        rt_cache   stat          udplite6
dev_mcast  if_inet6      ip_mr_cache    ip_vs              mcfilter            nf_conntrack_expect  raw6       snmp       tcp           unix
dev_snmp6  igmp          ip_mr_vif      ip_vs_app          mcfilter6           packet               route      snmp6      tcp6          xfrm_stat

// upd使用信息
$ cat /proc/net/udp
  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode ref pointer drops             
  436: 00000000:14E9 00000000:0000 07 00000000:00000000 00:00000000 00000000    70        0 29973 2 00000000dcd009eb 54        
  980: 00000000:CF09 00000000:0000 07 00000000:00000000 00:00000000 00000000    70        0 29975 2 00000000b8175bcd 0         
 1280: 017AA8C0:0035 00000000:0000 07 00000000:00000000 00:00000000 00000000     0        0 35039 2 00000000cb5140c4 0         
 ......

其中local_address列就是udp使用的地址,‘:’后面的就是其使用的端口的十六进制表示。例如00000000:CF09,CF09==53001,在上面使用netstat -au查看的信息里就有53001端口信息。

你可能感兴趣的:(查看网络端口是否被使用)