[特殊字符] MacOS 自定义 pin 命令:智能 IPv4/IPv6 Ping 工具

📌 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 目标了! 🎯

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值