FreeBSD 下普通用户无 ifconfig 权限如何查看本机 IP
在管理 FreeBSD 服务器(尤其是虚拟主机或共享主机环境)时,我们经常会遇到权限受限的情况。最典型的就是想看一眼本机 IP,习惯性输入 ifconfig,结果却收到了冷冰冰的拒绝:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
| [jicky@s2]:~> ifconfig -bash: /sbin/ifconfig: Permission denied 在这种被管理员“阉割”了常用命令权限的 Jail 或 Chroot 环境下,如何获取本机的 IP 地址信息?本文记录了几种替代方案,尤其是通过 netstat 路由表分析 IP 的技巧。
方法一:利用 SSH 环境变量(最快) 如果你是通过 SSH 远程登录的,Shell 的环境变量中通常保留了这次连接的信息。这是最简单、最不需要额外权限的方法。
Bash
echo $SSH_CONNECTION 输出示例:
Plaintext
203.0.113.15 54321 213.189.58.89 22 解读: 输出通常包含 4 个部分(以空格分隔):
客户端 IP(你的电脑 IP)
客户端端口
服务器 IP(这就是你要找的本机 IP)
服务器端口(通常是 22)
方法二:询问外部网络(查公网出口) 如果你想知道服务器对外的公网出口 IP(有时可能与网卡 IP 不同,例如在 NAT 后),可以使用 FreeBSD 自带的 fetch 命令访问 IP 查询网站。
Bash
fetch -q -o - [http://ifconfig.me](http://ifconfig.me) 注:如果是 Linux 环境,通常可以使用 curl ifconfig.me。
方法三:通过 netstat 逆向分析(硬核) 如果管理员连 ifconfig 都禁了,但往往会忽略 netstat。通过查看路由表,我们不仅能推断出 IP,还能看到网络拓扑。
执行命令:
Bash
netstat -rn 实战分析: 假设输出如下(截取自真实环境):
Plaintext
Routing tables
Internet: Destination Gateway Flags Netif Expire default 213.189.58.88 UGS ixl0 ... 213.189.58.88/31 link#1 U ixl0 213.189.58.89 link#3 UHS lo0 如何从中找到本机 IP?
看 Flags 为 UHS 的行:
U = Up (启用)
H = Host (特定主机)
S = Self (本机) —— 这是关键!
看 Netif 为 lo0 的非 127 段 IP:
在 FreeBSD 的路由表中,本机对外的 IP 地址通常会回环指向 lo0 接口。
结论: 在上面的例子中,213.189.58.89 这一行标记为 UHS 且指向 lo0,因此 213.189.58.89 就是这台机器的主 IP 地址。
本文记录于排查 www.solerry.dpdns.org 主机环境时。
---
如果您在服务器上,可以使用以下步骤快速发布:
1. **进入 Hexo 目录**(假设您的博客在 `blog` 目录): ```bash cd ~/domains/www.solerry.dpdns.org/public_html/blog
|
创建新文章(可选,或者直接新建文件):
1
| hexo new "FreeBSD check ip"
|
粘贴内容:
编辑 source/_posts/FreeBSD-check-ip.md,将上面的 Markdown 内容粘贴进去。
生成并部署:
1
| hexo clean && hexo g && hexo d
|