无论是为了排错还是监测或者检查电脑是否与外界未知连接的情况,都需要对当前电脑的实时网络连接情况进行了解,比如每打开一个网页,每个云服务,App Store等,如果有可疑的目标,就要检查一下是哪个程序引起的,下面只是列出一些常用命令和初步的解释,提供一个简单的思路:
查找当前系统中打开并建立连接的网络信息
netstat -aW | grep -i -e "ESTABLISHED"
如果只想看没有被转换语意的数字信息,加上-n这个参数, 如
netstat -anW | grep -i -e "ESTABLISHED"
要想查找某个端口名称对应的端口号
grep https /etc/services
或者到IANA的官方网站去查找,里面有详细解释和最新更新:
Service Name and Transport Protocol Port Number Registry
查看了每个连接后,可以用下面命令来查看哪个程序占用了某个端口。比如要查找端口4001
sudo lsof -i:4001
sudo lsof -p <pid>
这个命令相当于Activity Monitor中的Inspect功能。
uptime来查看当前系统运行的时长,我的系统显示,4天没有关机,同时有5个用户连接,在过去的1/5/15分钟里系统资源的使用情况。
15:20 up 4 days, 6:47, 5 users, load averages: 0.70 0.52 0.45
users命令告诉你当前登陆系统的所有用户:
blnestor toliu
现在我知道,不仅有我登陆,还有另外一个人blnestor.
使用命令w来看当前登陆的用户
比如我的是:
15:14 up 4 days, 6:41, 4 users, load averages: 0.41 0.38 0.39
USER TTY FROM LOGIN@ IDLE WHAT
toliu console - Mon08 4days -
toliu s001 - 14:37 2 /usr/bin/less -is
toliu s002 - 14:37 - w
toliu s000 - 14:37 36 -bash
blnestor s003 10.37.16.104 15:17 - bash
因为我开了3个terminal窗口,分别对应s000, s001, s002, 同时又有一个用户blnestor从远程机器10.37.16.104连接过来。</p>
使用命令who也可以得到类似的信息,为了确定当前terminal的TTY名,用命令who am I;上次系统启动时间who -b
使用上面的知识,判断远程用户使用的什么连接:
$ netstat -aW | grep -i -e "ESTABLISHED" | grep "10.37.16.104"
tcp4 0 0 10.37.5.245.ssh 10.37.16.104.58784 ESTABLISHED
可以看出是ssh
使用kill来停止连接
先来找到该ssh连接的PID,比如:
$ ps -lt ttys003
UID PID PPID F CPU PRI NI SZ RSS WCHAN S ADDR TTY TIME CMD
502 26922 26921 4006 0 31 0 2433436 1192 - Ss+ 0 ttys003 0:00.01 -bash
那么
sudo kill -9 26922
就好了