📌 MacOS 自定义 pin 命令:智能 IPv4/IPv6 Ping 工具
在 macOS 上,ping 和 ping6 命令默认只能分别测试 IPv4 和 IPv6,而无法自动区分目标地址类型。
因此,我们创建了一个名为 pin 的脚本,它具备以下特性:
✅ 支持 IPv4 / IPv6 自动识别
✅ 支持域名解析,并分别 ping IPv4 和 IPv6
✅ 结果美观,支持 ✅ / ⚠️ / ❌ 状态指示
✅ 分段显示 ping 结果,避免混淆
🚀 pin 功能介绍
pin 命令可用于:
• 直接 ping IPv4 地址
• 直接 ping IPv6 地址
• 自动解析域名,并分别 ping IPv4 和 IPv6
📌 安装 pin
1️⃣ 创建 pin 脚本
打开终端,运行以下命令:
nano ~/pin
然后粘贴以下 完整代码 👇
#!/bin/bash
# 检查是否提供了目标地址
if [[ -z "$1" ]]; then
echo "❌ Usage: pin <hostname or IP>"
exit 1
fi
TARGET="$1"
# 计算 ping 结果并添加状态 emoji
ping_test() {
local ip=$1
local version=$2
local result
local loss
if [[ "$version" == "v4" ]]; then
result=$(ping -c 4 "$ip")
else
result=$(ping6 -c 4 "$ip")
fi
loss=$(echo "$result" | grep -oE '[0-9]+% packet loss' | awk '{print $1}')
echo "--------------------------------"
echo "$result"
echo "--------------------------------"
if [[ "$loss" == "0%" ]]; then
echo "✅ Connection to $ip successful (0% packet loss)"
elif [[ "$loss" == "100%" ]]; then
echo "❌ Connection to $ip failed (100% packet loss)"
else
echo "⚠️ Partial connectivity to $ip ($loss packet loss)"
fi
}
# 判断输入是 IPv4、IPv6 还是域名
if [[ "$TARGET" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "🌍 🔵 Detected IPv4 address: $TARGET"
ping_test "$TARGET" "v4"
elif [[ "$TARGET" =~ : ]]; then
echo "🌍 🟢 Detected IPv6 address: $TARGET"
ping_test "$TARGET" "v6"
else
# 解析域名
IPV4=$(dig +short A "$TARGET" | grep -E "^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$" | head -n 1)
IPV6=$(dig +short AAAA "$TARGET" | grep -E "^[0-9a-fA-F:]+$" | head -n 1)
echo "🌐 🔍 Resolving domain: $TARGET"
[[ -n "$IPV4" ]] && echo "🔵 IPv4 found: $IPV4" || echo "⚠️ No IPv4 address found"
[[ -n "$IPV6" ]] && echo "🟢 IPv6 found: $IPV6" || echo "⚠️ No IPv6 address found"
echo "--------------------------------"
[[ -n "$IPV4" ]] && echo "🔵 🌍 Pinging IPv4: $IPV4" && ping_test "$IPV4" "v4"
[[ -n "$IPV6" ]] && echo "🟢 🌍 Pinging IPv6: $IPV6" && ping_test "$IPV6" "v6"
fi
按 CTRL + X 退出,按 Y 保存,按 Enter 确认。
2️⃣ 移动到 /opt/homebrew/bin/,赋予执行权限
sudo mv ~/pin /opt/homebrew/bin/
sudo chmod +x /opt/homebrew/bin/pin
🚀 使用 pin 命令测试效果
🔹 直接 ping IPv4
pin 8.8.8.8
输出示例:
🌍 🔵 Detected IPv4 address: 8.8.8.8
--------------------------------
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: icmp_seq=0 ttl=113 time=43.755 ms
...
--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
--------------------------------
✅ Connection to 8.8.8.8 successful (0% packet loss)
🔹 直接 ping IPv6
pin 2400:3200::1
输出示例:
🌍 🟢 Detected IPv6 address: 2400:3200::1
--------------------------------
PING6(56=40+8+8 bytes) 2400:3200::1
16 bytes from 2400:3200::1, icmp_seq=0 hlim=116 time=29.956 ms
...
--- 2400:3200::1 ping6 statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
--------------------------------
✅ Connection to 2400:3200::1 successful (0% packet loss)
🔹 Ping 域名
pin www.qq.com
输出示例:
🌐 🔍 Resolving domain: www.qq.com
🔵 IPv4 found: 221.198.70.47
🟢 IPv6 found: 2408:8711:10:1003::30
--------------------------------
🔵 🌍 Pinging IPv4: 221.198.70.47
--------------------------------
PING 221.198.70.47 (221.198.70.47): 56 data bytes
64 bytes from 221.198.70.47: icmp_seq=0 ttl=53 time=18.110 ms
...
--- 221.198.70.47 ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
--------------------------------
✅ Connection to 221.198.70.47 successful (0% packet loss)
--------------------------------
🟢 🌍 Pinging IPv6: 2408:8711:10:1003::30
--------------------------------
PING6(56=40+8+8 bytes) 2408:8711:10:1003::30
16 bytes from 2408:8711:10:1003::30, icmp_seq=0 hlim=54 time=17.930 ms
...
--- 2408:8711:10:1003::30 ping6 statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
--------------------------------
✅ Connection to 2408:8711:10:1003::30 successful (0% packet loss)
📌 总结
✅ 支持 IPv4 / IPv6 自动识别
✅ 解析域名并分别 ping IPv4 和 IPv6
✅ 支持 ✅ / ⚠️ / ❌ 状态,直观查看网络状况
✅ 结果格式美观,避免 ping 输出混杂
🚀 现在,你可以更高效地 ping IPv4 / IPv6 目标了! 🎯

6810

被折叠的 条评论
为什么被折叠?



