文章目录
macOS 免sudo 运行 mtr
mtr 是一个简单的跨平台命令行网络诊断工具,它将常用的 traceroute 和 ping 程序的功能整合到一个工具中。与 traceroute 类似,mtr 也会打印数据包从运行 mtr 的主机到用户指定的目标主机的路径信息。
我在使用中发现通过 brew 安装完 mtr 之后发现每次运行都需要 sudo 才可以运行,不然就会弹出如下错误;
mtr-packet: Failure to open IPv4 sockets
mtr-packet: Failure to open IPv6 sockets
mtr: Failure to start mtr-packet: Invalid argument
这是因为 mtr 需要访问网络接口,而在 macOS 上,这通常需要 root 权限。但是,我们可以通过一种简单的方法来解决这个问题,让我们可以在不使用 sudo 的情况下运行 mtr。下面是解决方案:
解决这个问题可以通过 Terminal 程序直接运行如下命令,即可免sudo 运行 mtr ,此方案适用于任何版本;
mtr_ver=$(brew list mtr --versions |awk '{print $2}')
#创建软连接
ln -s /usr/local/Cellar/mtr/$mtr_ver/sbin/mtr /usr/local/bin/mtr
ln -s /usr/local/Cellar/mtr/$mtr_ver/sbin/mtr-packet /usr/local/bin/mtr-packet
#设定权限
sudo chown root /usr/local/Cellar/mtr/$mtr_ver/sbin/mtr-packet
sudo chmod 4755 /usr/local/Cellar/mtr/$mtr_ver/sbin/mtr-packet
运行完上面的命令后就可以直接使用 mtr 命令而不需要加 sudo
啦,比如运行如下命令;
mtr example.com
可以看到直接就会输出如下参考内容;
Start: Mon Jul 19 10:00:00 2023
HOST: example.com Loss% Snt Last Avg Best Wrst StDev
1.|-- 192.0.2.1 0.0% 10 1.0 1.5 1.0 2.0 0.4
2.|-- 203.0.113.1 0.0% 10 2.0 2.5 2.0 3.0 0.4
3.|-- 198.51.100.1 0.0% 10 3.0 3.5 3.0 4.0 0.4
4.|-- 172.16.0.1 0.0% 10 4.0 4.5 4.0 5.0 0.4
5.|-- 10.0.0.1 0.0% 10 5.0 5.5 5.0 6.0 0.4
6.|-- 192.168.0.1 0.0% 10 6.0 6.5 6.0 7.0 0.4
7.|-- 10.10.10.1 0.0% 10 7.0 7.5 7.0 8.0 0.4
8.|-- 172.20.20.1 0.0% 10 8.0 8.5 8.0 9.0 0.4
9.|-- 203.0.113.254 0.0% 10 9.0 9.5 9.0 10.0 0.4
10.|-- 198.51.100.254 0.0% 10 10.0 10.5 10.0 11.0 0.4
11.|-- example.com 0.0% 10 11.0 11.5 11.0 12.0 0.4
这就是 mtr 的输出结果,它显示了数据包从你的主机到目标主机的路径信息。
总的来说,mtr 是一个非常有用的工具,但是在 macOS 上使用它可能会遇到一些权限问题。我希望这篇文章能帮助你解决这些问题,让你可以更方便地使用 mtr 工具。如果你有任何问题或者建议,欢迎在评论区留言。