我一直netstat
在 MacBook 上查看输出。我注意到有些应用程序允许您指定它使用的端口。例如,utorrent
允许您这样做。我选择了端口 55743,然后运行netstat | grep 55743
,输出如下。
udp6 0 0 *.55743 *.*
udp4 0 0 *.55743 *.*
当我退出时,utorrent
端口被释放。但是,如果我不知道端口号,那么我怎么知道哪个应用程序正在使用哪个端口?有些应用程序是否有可能秘密使用端口与外部服务器设备通信?
答案1
正如 David Houde 提到的,lsof -i
您的朋友会为您提供当前套接字连接/操作的快照。不幸的是,在 OS X 上,netstat
不支持此功能。
其他选项包括:
Activity Monitor.app
允许您查看应用程序打开的文件和端口。双击进程并打开“打开文件和端口”选项卡即可完成此操作。
Dtrace——签出索连接该脚本会持续向您提供有关网络操作的信息,直到您退出(control+c)。示例输出:
sudo /tmp/soconnect.d
PID PROCESS FAM ADDRESS PORT LAT(us) RESULT
8211 X-Lite 2 192.168.1.109 5060 25 Success
4112 Google Chrome 2 173.194.34.134 443 53 In progress
8211 X-Lite 2 192.168.1.109 5060 30 Success
我个人非常喜欢的一个应用程序是 little snitch,但它恰好是商业软件。虽然这是一款桌面防火墙软件,但它有许多可能让您感兴趣的功能:
- 网络监视器,它会告诉您哪些应用程序正在连接到哪里(类似于 soconnect.d 的输出)
- 捕获每个应用程序的网络流量(类似于 wireshark,您可以观察网络流量,但将其限制为仅限特定应用程序)
回答你的第二个问题 - 是的,在传统操作系统(例如 OS X、Windows)上,应用程序能够以各种方式连接到第三方系统并发送任何内容。许多桌面防火墙试图通过允许你指定每个应用程序可以连接到的位置来解决此问题,从而拥有一种白名单。与安全领域的其他任何事情一样,这种方法并非没有缺陷。
附言:我与任何桌面防火墙软件供应商均无任何关系 :)
答案2
您可以使用更多的 netstat 参数或使用 lsof 来实现此目的:
netstat -lp
lsof -i udp:55743