網路卡-熱點搜尋不到或者無法連線問題

唐宋元明清2188發表於2024-08-27

大屏Windows設定網路卡開啟熱點後,經常收到反饋,手機端無法搜尋到大屏熱點、或者手機連線大屏熱點失敗

這類問題一般有以下幾類情況:

1. 物理網路卡IP與熱點網路卡IP相同

2. 熱點網路卡IP,非正常熱點IP(192.168.137.X)

熱點IP我們一般定為192.168.137.X,192.168.137.X是一個保留的IPv4地址範圍。其中,X代表了特定裝置在區域網中的唯一標識,通常是1到254之間的一個數字。

這個地址範圍通常被用作區域網內部的私有IP地址,如Wi-Fi熱點或者一些家庭網路

設定此私有IP地址範圍為熱點IP,可以避免與現有網路衝突。同時比較有特徵的IP段可以讓使用者將區域網內的裝置劃分到特定的子網中,有利於管理和監控裝置的連線和通訊

針對上面2類情況,修復熱點IP,

1. 物理網路卡IP與熱點網路卡IP相同

-- 在物理網路卡設定了某個熱點IP如192.168.137.1時,熱點網路卡IP需要規避此IP。如果區域網中已經有DHCP伺服器在分配IP地址,而熱點裝置也在嘗試分配IP地址,可能會引起IP地址分配衝突,導致網路連線問題。雖然不建議物理網路卡分配此IP,但出現問題我們貌似只能透過熱點虛擬網路卡來規避此衝突了

2. 熱點網路卡IP,非熱點IP(192.168.137.X)

-- 熱點為私有網路,建議用熱點專有IP域,可以減少與區域網正常分配IP之間的衝突。

以下是修復程式碼,團隊內部開發的網路卡一部分業務邏輯:

 1     /// <summary>
 2     /// 修復IP衝突
 3     /// </summary>
 4     public async Task RepairIpConflictAsync()
 5     {
 6         var allNetworks = await GetAllNetworkInfosAsync();
 7         // 獲取到當前虛擬網路卡
 8         var virtualAdapter = allNetworks.FirstOrDefault(x => x.IPEnabled &&
 9                                                            x.Description.Contains(VirtualWifiDescription));
10 
11         if (virtualAdapter == null) return;
12         //實際網路卡是否使用了熱點IP
13         var physicalCardErrorIps = new List<string>();
14         foreach (var x in allNetworks.Where(x => !x.Description.Contains(VirtualWifiDescription)))
15         {
16             physicalCardErrorIps.AddRange(x.Ipv4Array.Where(ip => ip.StartsWith("192.168.137.")));
17         }
18         var isVirtualCardCorrectIp = virtualAdapter.Ipv4Array.FirstOrDefault(x => x.StartsWith("192.168.137.")) != null;
19         //物理網路卡未使用熱點IP,且虛擬網路卡在使用熱點IP,不需要修復IP
20         if (physicalCardErrorIps.Count == 0 && isVirtualCardCorrectIp)
21         {
22             return;
23         }
24         var defaultHotspotIp = "192.168.137.1";
25         if (physicalCardErrorIps.Count > 0)
26         {
27             for (var i = 1; i < 255; i++)
28             {
29                 var ip = $"192.168.137.{i}";
30                 if (physicalCardErrorIps.Contains(ip)) continue;
31                 defaultHotspotIp = ip;
32                 break;
33             }
34         }
35         var networkAdapter = new NetworkAdapterController(virtualAdapter.SettingID);
36         networkAdapter.SetIPAddress(defaultHotspotIp, "255.255.255.0");
37     }

先獲取當前虛擬網路卡"Microsoft Wi-Fi Direct Virtual Adapter",virtual adapter一般會有多張,選擇IPEnabled=true的那張(在網路介面卡上繫結並啟用 TCP/IP)。

物理網路卡可能存在使用熱點IP,所以接下來獲取所有使用熱點IP的IP列表,用於後續給熱點網路卡規避這些IP。

虛擬網路卡是否採用熱點IP,未採用的話也需要重新設定下。

所以,根據網路卡ID標識,設定此虛擬網路卡為192.168.137.X範圍的熱點IP、以及預設掩碼"255.255.255.0"。同時跳過物理網路卡已經使用的熱點IP,規避IP衝突

相關文章