网卡-热点搜索不到或者无法连接问题

大屏设置网卡开启热点后,经常收到反馈,手机端无法搜索到大屏热点、或者手机连接大屏热点失败

这类问题一般有以下几类情况:

  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,但出现问题我们貌似只能通过热点虚拟网卡来规避此冲突了

  1. 热点网卡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冲突

相关推荐
我是如子啊8 天前
【UBuntu20 配置usb网卡】 记录Ubuntu20配置usb网卡(特别是建立热点)
linux·网卡·教程·ubuntu20.04·wifi热点·ap·usb网卡
ZachOn1y19 天前
计算机网络:数据链路层 —— 网络适配器与 MAC 地址
网络·计算机网络·网卡·数据链路层·mac地址
OTZ_23334 个月前
ubuntu丢失网络/网卡的一种原因&&解决方案
linux·网络·ubuntu·网卡
cui_win4 个月前
网络-网卡多队列
运维·网络·性能优化·网卡·cpu软中断
江湖有缘4 个月前
Ubuntu系统下修改网卡IP地址
tcp/ip·ubuntu·网卡·ip
心若向阳花自开5 个月前
Linux虚拟网卡TUN和TAP
linux·内核·网卡·虚拟化·通信·转发·sdn·sdwan·tun·tap
华为云开发者联盟1 年前
带宽优化新思路:RoCE网卡聚合实现X2增长
网卡·宽带
dvlinker1 年前
获取网卡上的IP、网关及DNS信息,获取最佳路由,遍历路由表中的条目(附源码)
网卡·ip地址·路由表·网关地址·dns服务器地址·最佳路由
惠惠软件1 年前
ifconfig不是eth0(eth1/2/3/4其他网卡)的解决办法
linux·服务器·网络·网卡