大屏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衝突