netstat

TL;DR

# List all ports:
$ netstat --all

# List all listening ports:
$ netstat --listening

# List listening TCP ports:
$ netstat --tcp

# Display PID and program names:
$ netstat --program

# List information continuously:
$ netstat --continuous

# List routes and do not resolve IP addresses to hostnames:
$ netstat --route --numeric

# List listening TCP and UDP ports (+ user and process if you're root):
$ netstat --listening --program --numeric --tcp --udp --extend

# MacOS 查看监听的端口
$ netstat -AaLlnW
$ sudo netstat -rn

Flag 含义

对于一个给定的路由器,可以打印出五种不同的标志(flag):

  • U: 该路由可以使用。
  • G: 该路由是到一个网关(路由器)。如果没有设置该标志,说明目的地是直接相连的。
  • H: 该路由是到一个主机,也就是说,目的地址是一个完整的主机地址。 如果没有设置该标志,说明该路由是到一个网络,而目的地址是一个网络地址: 一个网络号,或者网络号与子网号的组合。
  • D: 该路由是由重定向报文创建的。
  • M: 该路由已被重定向报文修改。

标志G是非常重要的,因为由它区分了间接路由和直接路由(对于直接路由来说是不设置标志G的)。 其区别在于,发往直接路由的分组中不但具有指明目的端的IP地址,还具有其链路层地址。 当分组被发往一个间接路由时,IP地址指明的是最终的目的地,但是链路层地址指明的是网关(即下一站路由器)。