问题

异地一台远程计算机,有线连接,固定IP,使用easytier或者zerotier都能远程连接,能ping通内网(网关),也能ping通外网(如www.baidu.com),系统代理均已关闭,但无法上网。

思路

能ping通外网,但不能上网,首先想到的是可能存在IP地址冲突,于是打算将另一台电脑挤下去,把ip地址“抢回来”。

方法

绑定IP地址和MAC

以管理员身份打开Powershell,运行:

$ arp -s 192.168.2.42 E8-6A-64-3C-A0-66 

紧接着输入命令arp -a查询绑定是否成功。

$ arp -a
接口: 192.168.2.42 --- 0x2
  Internet 地址         物理地址              类型
  192.168.2.101         94-c6-91-d2-a7-43     动态
  192.168.2.243         bc-31-e2-58-af-b4     动态
  192.168.2.247         50-da-00-97-93-f9     动态
  192.168.2.253         3c-8c-40-bd-d9-d1     动态
  192.168.2.254         a8-49-4d-88-68-76     动态
  192.168.2.42          E8-6A-64-3C-A0-66     静态  # 表示绑定成功
  224.0.0.22            01-00-5e-00-00-16     静态
  224.0.0.251           01-00-5e-00-00-fb     静态
  224.0.0.252           01-00-5e-00-00-fc     静态
  239.255.255.250       01-00-5e-7f-ff-fa     静态

IP和MAC绑定成功后,其他计算机之后再上网时如果抢用192.168.2.42地址时,就会出现无法上网的故障现象。

但到这里,只是解决了防止被“抢”IP的问题,接下来就是要把其他计算机挤下去。

重启网络连接,“抢回”IP地址

最简单的重启网络连接方法是,在控制面板-网络和Internet-网络连接中,右键点击有线网卡禁用,然后再点击启用。但由于是通过远程桌面连接的计算机,所以如果直接点击禁用,结果就是断网,远程连接自然也就断了。因此,只能使用命令行+批处理来实现重启网络。

查看网卡名称

命令行模式下运行:

$ ipconfig
以太网适配器 以太网 2:  # "以太网 2"即为有线网卡名称

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::56e3:b392:fe18:bd83%2
   IPv4 地址 . . . . . . . . . . . . : 192.168.2.42
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : 192.168.2.254

创建批处理文件

新建一个.bat批处理文件,内容如下:

netsh interface set interface "以太网 2" admin=disable # 这里网卡名称应为Wired,下同

netsh interface set interface "以太网 2" admin=enable

保存后,以管理员模式运行.bat文件。

我这里不出意外出意外了,运行批处理文件后有线网卡毫无反应,多次尝试依然如此。为了找到问题所在,于是在批处理文件最后加一个pause,如下:

netsh interface set interface "以太网 2" admin=disable 

netsh interface set interface "以太网 2" admin=enable

pause

运行批处理文件后,返回如下:

C:\Windows\System32>netsh interface set interface "浠ュお缃?2" admin=disable
没有可用的数据了。
C:\Windows\System32>netsh interface set interface "浠ュお缃?2" admin=enable
没有可用的数据了。
C:\Windows\System32>pause
请按任意键继续. . .

返回里出现了乱码,而且明显就是网卡名称部分,我第一反应就是网卡名称是中文的原因。于是,接下来尝试将网卡名称改为纯英文。

首先尝试了直接在控制面板-网络和Internet-网络连接中,右键点击网卡然后点击重命名,结果毫无反应,多次尝试依然如此。因此,还是要通过命令行来实现。

修改网卡名称

以管理员身份打开命令行,运行下列命令:

$ netsh interface set name "以太网 2" "Wired"  # 第一个双引号里是旧网卡名称,第二个是新网卡名称 

该命令无需重启网络,直接就能重命名。

运行ipconfig查看网卡是否重命名成功:

$ ipconfig

以太网适配器 Wired:  #这里显示新网卡的名称,说明已经重命名成功

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::56e3:b392:fe18:bd83%2
   IPv4 地址 . . . . . . . . . . . . : 192.168.2.42
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : 192.168.2.254

然后修改批处理文件中的网卡名称,保存后以管理员身份运行:


C:\Windows\System32>netsh interface set interface "Wired" admin=disable

C:\Windows\System32>netsh interface set interface "Wired" admin=enable

C:\Windows\System32>pause
请按任意键继续. . .

在这个过程中,远程桌面会断开连接,重新连接即可。

新问题

远程重启网络连接后,尝试用浏览器打开网页,发现依然上不了网,网页显示ERR_CONNECTION_FAILED ,查找了很多资料,终于找到了解决办法。

原因

因为系统缓冲区空间不足,或是伫列已满造成 ERR_CONNECTION_FAILED 问题。

解决方案

查看系统端口占用情况

打开Powershell,运行以下命令,

$  Get-NetTCPConnection | Group-Object -Property State, OwningProcess | Select -Property Count, Name, @{Name="ProcessName";Expression={(Get-Process -PID ($_.Name.Split(',')[-1].Trim(' '))).Name}}, Group | Sort Count -Descending

该命令主要是检查目前系统端口占用情况,并根据单个进程占用的端口数量降序排列。返回结果如下:

Count Name               ProcessName       Group
----- ----               -----------       -----
16366 Bound, 4904        PublicWiFiService {MSFT_NetTCPConnection (InstanceID = "0.0.0.0??65535??0.0.0.0??0"), MSFT_...
   12 Listen, 4          System            {MSFT_NetTCPConnection (InstanceID = "::??43568??::??0"), MSFT_NetTCPConn...
    3 Listen, 11952      easytier-gui      {MSFT_NetTCPConnection (InstanceID = "::??11010??::??0"), MSFT_NetTCPConn...
    3 Established, 2704  ARCGIS            {MSFT_NetTCPConnection (InstanceID = "127.0.0.1??49758??127.0.0.1??27000"...
    2 Listen, 5392       vmware-authd      {MSFT_NetTCPConnection (InstanceID = "0.0.0.0??912??0.0.0.0??0"), MSFT_Ne...
    2 Listen, 1716       svchost           {MSFT_NetTCPConnection (InstanceID = "::??3389??::??0"), MSFT_NetTCPConne...
    2 Listen, 1364       svchost           {MSFT_NetTCPConnection (InstanceID = "::??135??::??0"), MSFT_NetTCPConnec...
    2 Established, 5088  zerotier-one_x64  {MSFT_NetTCPConnection (InstanceID = "127.0.0.1??49673??127.0.0.1??49672"...
    2 TimeWait, 0        Idle              {MSFT_NetTCPConnection (InstanceID = "192.168.2.42??50214??40.126.35.87??...
    2 Bound, 2704        ARCGIS            {MSFT_NetTCPConnection (InstanceID = "0.0.0.0??49758??0.0.0.0??0"), MSFT_...
    2 Listen, 5088       zerotier-one_x64  {MSFT_NetTCPConnection (InstanceID = "::??9993??::??0"), MSFT_NetTCPConne...
    2 Listen, 3388       svchost           {MSFT_NetTCPConnection (InstanceID = "::??49668??::??0"), MSFT_NetTCPConn...
    2 Listen, 3180       svchost           {MSFT_NetTCPConnection (InstanceID = "::??49667??::??0"), MSFT_NetTCPConn...
    2 Listen, 4116       spoolsv           {MSFT_NetTCPConnection (InstanceID = "::??49669??::??0"), MSFT_NetTCPConn...
    2 Listen, 1052       services          {MSFT_NetTCPConnection (InstanceID = "::??49674??::??0"), MSFT_NetTCPConn...
    2 Listen, 1096       svchost           {MSFT_NetTCPConnection (InstanceID = "::??49666??::??0"), MSFT_NetTCPConn...
    2 Listen, 500        wininit           {MSFT_NetTCPConnection (InstanceID = "::??49665??::??0"), MSFT_NetTCPConn...
    2 Listen, 1060       lsass             {MSFT_NetTCPConnection (InstanceID = "::??49664??::??0"), MSFT_NetTCPConn...
    1 Established, 11952 easytier-gui      {MSFT_NetTCPConnection (InstanceID = "192.168.2.42??49698??117.72.51.14??...
    1 Listen, 10832      listary-core      {MSFT_NetTCPConnection (InstanceID = "127.0.0.1??50098??0.0.0.0??0")}
    1 Listen, 4864       jhi_service       {MSFT_NetTCPConnection (InstanceID = "::1??49671??::??0")}
    1 Listen, 5348       svchost           {MSFT_NetTCPConnection (InstanceID = "0.0.0.0??5040??0.0.0.0??0")}
    1 Established, 1716  svchost           {MSFT_NetTCPConnection (InstanceID = "2.2.2.2??3389??2.2.2.3??4605")}
    1 Established, 2300  lmgrd             {MSFT_NetTCPConnection (InstanceID = "127.0.0.1??27000??127.0.0.1??49758")}
    1 Listen, 2300       lmgrd             {MSFT_NetTCPConnection (InstanceID = "0.0.0.0??27000??0.0.0.0??0")}
    1 Listen, 2704       ARCGIS            {MSFT_NetTCPConnection (InstanceID = "0.0.0.0??49754??0.0.0.0??0")}
    1 Bound, 11952       easytier-gui      {MSFT_NetTCPConnection (InstanceID = "192.168.2.42??49698??0.0.0.0??0")}
    1 Bound, 4276        Listary           {MSFT_NetTCPConnection (InstanceID = "0.0.0.0??50093??0.0.0.0??0")}
    1 Bound, 5776        msedge            {MSFT_NetTCPConnection (InstanceID = "0.0.0.0??50076??0.0.0.0??0")}
    1 Bound, 5088        zerotier-one_x64  {MSFT_NetTCPConnection (InstanceID = "0.0.0.0??49673??0.0.0.0??0")}
    1 Listen, 6824       explorer          {MSFT_NetTCPConnection (InstanceID = "127.0.0.1??50059??0.0.0.0??0")}
    1 Established, 5776  msedge            {MSFT_NetTCPConnection (InstanceID = "192.168.2.42??50076??150.171.28.11?...
    1 Listen, 13904      HipsDaemon        {MSFT_NetTCPConnection (InstanceID = "127.0.0.1??58140??0.0.0.0??0")}

可以看到,PublicWiFiService这一进程竟然绑定了16366个端口!PublicWiFiService是MyPbulicwifi软件的进程,目前并无需要运行,因此在任务管理器中结束该进程即可。

结束进程

结束该进程后,重新查看系统端口占用情况:

Count Name               ProcessName      Group
----- ----               -----------      -----
   12 Listen, 4          System           {MSFT_NetTCPConnection (InstanceID = "::??43568??::??0"), MSFT_NetTCPConne...
   10 TimeWait, 0        Idle             {MSFT_NetTCPConnection (InstanceID = "127.0.0.1??50231??127.0.0.1??9993"),...
    7 Bound, 5096        vmnat            {MSFT_NetTCPConnection (InstanceID = "0.0.0.0??50229??0.0.0.0??0"), MSFT_N...
    6 Established, 5096  vmnat            {MSFT_NetTCPConnection (InstanceID = "192.168.2.42??50229??192.168.2.42??1...
    3 Listen, 11952      easytier-gui     {MSFT_NetTCPConnection (InstanceID = "::??11010??::??0"), MSFT_NetTCPConne...
    3 Established, 2704  ARCGIS           {MSFT_NetTCPConnection (InstanceID = "127.0.0.1??49758??127.0.0.1??27000")...
    2 Listen, 1364       svchost          {MSFT_NetTCPConnection (InstanceID = "::??135??::??0"), MSFT_NetTCPConnect...
    2 Established, 11952 easytier-gui     {MSFT_NetTCPConnection (InstanceID = "192.168.2.42??49698??117.72.51.14??1...
    2 Established, 5088  zerotier-one_x64 {MSFT_NetTCPConnection (InstanceID = "127.0.0.1??49673??127.0.0.1??49672")...
    2 Bound, 2704        ARCGIS           {MSFT_NetTCPConnection (InstanceID = "0.0.0.0??49758??0.0.0.0??0"), MSFT_N...
    2 Listen, 5392       vmware-authd     {MSFT_NetTCPConnection (InstanceID = "0.0.0.0??912??0.0.0.0??0"), MSFT_Net...
    2 Listen, 1716       svchost          {MSFT_NetTCPConnection (InstanceID = "::??3389??::??0"), MSFT_NetTCPConnec...
    2 Listen, 4116       spoolsv          {MSFT_NetTCPConnection (InstanceID = "::??49669??::??0"), MSFT_NetTCPConne...
    2 Listen, 1096       svchost          {MSFT_NetTCPConnection (InstanceID = "::??49666??::??0"), MSFT_NetTCPConne...
    2 Listen, 3180       svchost          {MSFT_NetTCPConnection (InstanceID = "::??49667??::??0"), MSFT_NetTCPConne...
    2 Listen, 1052       services         {MSFT_NetTCPConnection (InstanceID = "::??49674??::??0"), MSFT_NetTCPConne...
    2 Listen, 3388       svchost          {MSFT_NetTCPConnection (InstanceID = "::??49668??::??0"), MSFT_NetTCPConne...
    2 Listen, 1060       lsass            {MSFT_NetTCPConnection (InstanceID = "::??49664??::??0"), MSFT_NetTCPConne...
    2 Listen, 5088       zerotier-one_x64 {MSFT_NetTCPConnection (InstanceID = "::??9993??::??0"), MSFT_NetTCPConnec...
    2 Listen, 500        wininit          {MSFT_NetTCPConnection (InstanceID = "::??49665??::??0"), MSFT_NetTCPConne...
    1 Listen, 2300       lmgrd            {MSFT_NetTCPConnection (InstanceID = "0.0.0.0??27000??0.0.0.0??0")}
    1 Listen, 4864       jhi_service      {MSFT_NetTCPConnection (InstanceID = "::1??49671??::??0")}
    1 Listen, 2704       ARCGIS           {MSFT_NetTCPConnection (InstanceID = "0.0.0.0??49754??0.0.0.0??0")}
    1 Bound, 11952       easytier-gui     {MSFT_NetTCPConnection (InstanceID = "192.168.2.42??49698??0.0.0.0??0")}
    1 Established, 1716  svchost          {MSFT_NetTCPConnection (InstanceID = "2.2.2.2??3389??2.2.2.3??4605")}
    1 Established, 2300  lmgrd            {MSFT_NetTCPConnection (InstanceID = "127.0.0.1??27000??127.0.0.1??49758")}
    1 Listen, 5348       svchost          {MSFT_NetTCPConnection (InstanceID = "0.0.0.0??5040??0.0.0.0??0")}
    1 Bound, 5088        zerotier-one_x64 {MSFT_NetTCPConnection (InstanceID = "0.0.0.0??49673??0.0.0.0??0")}
    1 Listen, 13904      HipsDaemon       {MSFT_NetTCPConnection (InstanceID = "127.0.0.1??58140??0.0.0.0??0")}
    1 Bound, 4276        Listary          {MSFT_NetTCPConnection (InstanceID = "0.0.0.0??50093??0.0.0.0??0")}
    1 Bound, 5776        msedge           {MSFT_NetTCPConnection (InstanceID = "0.0.0.0??50076??0.0.0.0??0")}
    1 Established, 5776  msedge           {MSFT_NetTCPConnection (InstanceID = "192.168.2.42??50076??150.171.28.11??...
    1 Listen, 6824       explorer         {MSFT_NetTCPConnection (InstanceID = "127.0.0.1??50059??0.0.0.0??0")}
    1 SynSent, 5096      vmnat            {MSFT_NetTCPConnection (InstanceID = "192.168.2.42??50228??220.191.222.35?...
    1 Listen, 10832      listary-core     {MSFT_NetTCPConnection (InstanceID = "127.0.0.1??50098??0.0.0.0??0")}

然后打开浏览器输入网址,终于可以上网了。

总结

虽然最后解决了无法上网的问题,但解决过程有些曲折,走了很多弯路。比如,重启网络连接其实根本就不是必要的动作,但在这个过程中,确实学到了在远程计算机上,如何通过命令重启网络连接的方法。