From aa72fa9a42fa010313202d955fd49bdad3c6f99e Mon Sep 17 00:00:00 2001 From: zhuo-github <41674383+zhuo-github@users.noreply.github.com> Date: Fri, 19 Dec 2025 17:05:47 +0800 Subject: [PATCH] fix: add DNS hijacking fix for macOS wired network(#5728) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [bugfix][issues-2701]mac有线网络下dns劫持失败 * [bugfix][issues-2701]mac有线网络下dns劫持失败。删除弃用代码,删除打印端口日志 * fix(changelog): add DNS hijacking fix for macOS wired network --------- Co-authored-by: zhuocanhe Co-authored-by: Tunglies <77394545+Tunglies@users.noreply.github.com> --- Changelog.md | 2 ++ scripts/set_dns.sh | 7 ++++--- scripts/unset_dns.sh | 13 +++---------- 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/Changelog.md b/Changelog.md index 6d82bf37f..6b8a3ed18 100644 --- a/Changelog.md +++ b/Changelog.md @@ -2,6 +2,8 @@ ### 🐞 修复问题 +- 修复 macOS 有线网络 DNS 劫持失败 +
✨ 新增功能 diff --git a/scripts/set_dns.sh b/scripts/set_dns.sh index 300e90855..8741eff13 100644 --- a/scripts/set_dns.sh +++ b/scripts/set_dns.sh @@ -39,9 +39,10 @@ function is_valid_ip() { # 获取网络接口和硬件端口 nic=$(route -n get default | grep "interface" | awk '{print $2}') -hardware_port=$(networksetup -listallhardwareports | awk -v dev="$nic" ' - /Hardware Port:/{port=$0; gsub("Hardware Port: ", "", port)} - /Device: /{if ($2 == dev) {print port; exit}} +# 从网络服务列表中获取硬件端口 +hardware_port=$(networksetup -listnetworkserviceorder | awk -v dev="$nic" ' + /^\([0-9]+\) /{port=$0; sub(/^\([0-9]+\) /, "", port)} + /\(Hardware Port:/{interface=$NF;sub(/\)/, "", interface); if (interface == dev) {print port; exit}} ') # 获取当前DNS设置 diff --git a/scripts/unset_dns.sh b/scripts/unset_dns.sh index 6b46b61f2..405809f80 100644 --- a/scripts/unset_dns.sh +++ b/scripts/unset_dns.sh @@ -1,16 +1,9 @@ #!/bin/bash nic=$(route -n get default | grep "interface" | awk '{print $2}') -hardware_port=$(networksetup -listallhardwareports | awk -v dev="$nic" ' - /Hardware Port:/{ - port=$0; gsub("Hardware Port: ", "", port) - } - /Device: /{ - if ($2 == dev) { - print port; - exit - } - } +hardware_port=$(networksetup -listnetworkserviceorder | awk -v dev="$nic" ' + /^\([0-9]+\) /{port=$0; sub(/^\([0-9]+\) /, "", port)} + /\(Hardware Port:/{interface=$NF;sub(/\)/, "", interface); if (interface == dev) {print port; exit}} ') if [ -f .original_dns.txt ]; then