列出 Windows 路由表

List windows route table

提问人:och 提问时间:5/26/2015 最后编辑:och 更新时间:11/20/2019 访问量:1858

问:

我想列出 Windows 路由表中的条目。与 的输出相同。我使用 IP Helper API 中的函数。但是我得到了一些奇怪的结果,这些结果与路由命令输出不同。 我在 VirtualBox 的 Windows 7 64 位中运行它,我有 3 个网卡(NAT、桥接和内部网络),并使用以下命令在 cygwin 下编译它:route printGetIpForwardTable2

gcc -D_WIN32_WINNT=0x0601 -DNTDDI_VERSION=0x06010000 win-iproute.c -liphlpapi

这些只是为了使 Win7 的功能可用。 为了简化起见,我现在才考虑 ipv4。_WIN32_WINNTNTDDI_VERSION

代码如下:

#include <windows.h>
#include <winsock2.h>
#include <iphlpapi.h>
#include <Mstcpip.h>

#include <stdio.h>

int main(int argc, char *argv[])
{
  DWORD retval;
  MIB_IPFORWARD_TABLE2 *routes = NULL;
  MIB_IPFORWARD_ROW2 *route;
  int idx;

  retval = GetIpForwardTable2(AF_INET, &routes);
  if (retval != ERROR_SUCCESS)
  {
    fprintf(stderr, "GetIpForwardTable2 failed (0x%x)\n.", retval);
    return 1;
  }

  printf("Route entries count: %lu\n", routes->NumEntries);

  for (idx = 0; idx < routes->NumEntries; idx++)
  {
    printf("\n -- Entry #%d -- \n", idx);
    route = routes->Table + idx;
    printf("luid: \t\t Reserved: %u, NetLuidIndex %u, IfType %u\n",
      route->InterfaceLuid.Info.Reserved,
      route->InterfaceLuid.Info.NetLuidIndex,
      route->InterfaceLuid.Info.IfType);
    printf("protocol: \t %lu\n", route->Protocol);
    printf("origin: \t %lu\n", route->Origin);
    printf("loopback: \t %lu\n", route->Loopback);
    printf("next hop: \t %s\n", inet_ntoa(route->NextHop.Ipv4.sin_addr));
    printf("site prefix length: \t %u\n", route->SitePrefixLength);
    printf("prefix length: \t %u\n", route->DestinationPrefix.PrefixLength);
    printf("prefix : \t %s\n", inet_ntoa(route->DestinationPrefix.Prefix.Ipv4.sin_addr));
  }

  return 0;
}

输出为:

Route entries count: 22

 -- Entry #0 --
luid:            Reserved: 0, NetLuidIndex 6, IfType 6
protocol:        0
origin:          0
loopback:        0
next hop:        0.0.0.0
site prefix length:      0
prefix length:   0
prefix :         0.0.0.0

 -- Entry #1 --
luid:            Reserved: 0, NetLuidIndex 0, IfType 0
protocol:        0
origin:          0
loopback:        0
next hop:        0.0.0.0
site prefix length:      0
prefix length:   3
prefix :         0.0.0.0

 -- Entry #2 --
luid:            Reserved: 0, NetLuidIndex 0, IfType 0
protocol:        4294967295
origin:          257
loopback:        0
next hop:        0.0.0.0
site prefix length:      0
prefix length:   10
prefix :         0.1.0.0

 -- Entry #3 --
luid:            Reserved: 17, NetLuidIndex 0, IfType 0
protocol:        11
origin:          0
loopback:        2
next hop:        0.0.0.0
site prefix length:      17
prefix length:   0
prefix :         2.0.0.0

 -- Entry #4 --
luid:            Reserved: 0, NetLuidIndex 0, IfType 0
protocol:        32
origin:          0
loopback:        2
next hop:        0.1.0.0
site prefix length:      0
prefix length:   255
prefix :         2.0.0.0

 -- Entry #5 --
luid:            Reserved: 0, NetLuidIndex 0, IfType 0
protocol:        0
origin:          256
loopback:        255
next hop:        0.0.0.0
site prefix length:      0
prefix length:   11
prefix :         255.255.255.255

 -- Entry #6 --
luid:            Reserved: 3, NetLuidIndex 65792, IfType 0
protocol:        201326592
origin:          2
loopback:        0
next hop:        0.0.0.0
site prefix length:      3
prefix length:   24
prefix :         0.0.6.0

 -- Entry #7 --
luid:            Reserved: 5855577, NetLuidIndex 89, IfType 0
protocol:        0
origin:          2
loopback:        0
next hop:        0.1.0.0
site prefix length:      89
prefix length:   0
prefix :         0.0.0.0

 -- Entry #8 --
luid:            Reserved: 0, NetLuidIndex 0, IfType 0
protocol:        0
origin:          4294967295
loopback:        0
next hop:        2.0.0.0
site prefix length:      0
prefix length:   0
prefix :         0.0.0.0

 -- Entry #9 --
luid:            Reserved: 16777215, NetLuidIndex 65791, IfType 0
protocol:        593
origin:          1572864
loopback:        0
next hop:        2.0.0.0
site prefix length:      255
prefix length:   0
prefix :         0.0.0.0

 -- Entry #10 --
luid:            Reserved: 1, NetLuidIndex 512, IfType 0
protocol:        0
origin:          0
loopback:        0
next hop:        255.255.255.255
site prefix length:      1
prefix length:   0
prefix :         0.0.0.0

 -- Entry #11 --
luid:            Reserved: 4, NetLuidIndex 512, IfType 0
protocol:        0
origin:          0
loopback:        0
next hop:        0.0.6.0
site prefix length:      4
prefix length:   81
prefix :         0.0.0.0

 -- Entry #12 --
luid:            Reserved: 0, NetLuidIndex 16776960, IfType 65535
protocol:        3
origin:          1
loopback:        0
next hop:        0.0.0.0
site prefix length:      0
prefix length:   0
prefix :         0.1.0.0

 -- Entry #13 --
luid:            Reserved: 0, NetLuidIndex 12, IfType 6
protocol:        4294967295
origin:          0
loopback:        0
next hop:        0.0.0.0
site prefix length:      0
prefix length:   0
prefix :         0.0.0.0

 -- Entry #14 --
luid:            Reserved: 0, NetLuidIndex 0, IfType 0
protocol:        0
origin:          0
loopback:        0
next hop:        0.0.0.0
site prefix length:      0
prefix length:   3
prefix :         0.0.0.0

 -- Entry #15 --
luid:            Reserved: 0, NetLuidIndex 0, IfType 0
protocol:        4294967295
origin:          257
loopback:        0
next hop:        0.0.0.0
site prefix length:      0
prefix length:   255
prefix :         0.1.0.0

 -- Entry #16 --
luid:            Reserved: 585, NetLuidIndex 0, IfType 0
protocol:        3449440
origin:          0
loopback:        0
next hop:        0.0.0.0
site prefix length:      73
prefix length:   0
prefix :         2.0.0.0

 -- Entry #17 --
luid:            Reserved: 3211321, NetLuidIndex 13056, IfType 65
protocol:        3342403
origin:          4325427
loopback:        49
next hop:        125.0.0.0
site prefix length:      53
prefix length:   68
prefix :         54.0.45.0

 -- Entry #18 --
luid:            Reserved: 3473453, NetLuidIndex 17408, IfType 54
protocol:        0
origin:          0
loopback:        0
next hop:        0.0.0.0
site prefix length:      0
prefix length:   0
prefix :         70.0.69.0

 -- Entry #19 --
luid:            Reserved: 0, NetLuidIndex 0, IfType 0
protocol:        7471205
origin:          7274610
loopback:        0
next hop:        115.0.97.0
site prefix length:      111
prefix length:   0
prefix :         0.0.0.0

 -- Entry #20 --
luid:            Reserved: 7274611, NetLuidIndex 26112, IfType 116
protocol:        3277144
origin:          50725
loopback:        0
next hop:        49.69.55.56
site prefix length:      51
prefix length:   56
prefix :         65.0.100.0

 -- Entry #21 --
luid:            Reserved: 3277144, NetLuidIndex 0, IfType 0
protocol:        0
origin:          0
loopback:        0
next hop:        0.0.0.0
site prefix length:      192
prefix length:   0
prefix :         16.0.0.0

而 的输出如下:route print -4

===========================================================================
Interface List
 16...08 00 27 7e 98 16 ......Intel(R) PRO/1000 MT Desktop Adapter #3
 14...08 00 27 86 3d 31 ......Intel(R) PRO/1000 MT Desktop Adapter #2
 11...08 00 27 42 d2 16 ......Intel(R) PRO/1000 MT Desktop Adapter
  1...........................Software Loopback Interface 1
 12...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter
 13...00 00 00 00 00 00 00 e0 Teredo Tunneling Pseudo-Interface
 15...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #2
 17...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #3
===========================================================================

IPv4 Route Table
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0         10.0.2.2        10.0.2.15     10
          0.0.0.0          0.0.0.0       10.0.0.138        10.0.0.36     10
         10.0.0.0    255.255.255.0         On-link         10.0.0.36    266
        10.0.0.36  255.255.255.255         On-link         10.0.0.36    266
       10.0.0.255  255.255.255.255         On-link         10.0.0.36    266
         10.0.2.0    255.255.255.0         On-link         10.0.2.15    266
        10.0.2.15  255.255.255.255         On-link         10.0.2.15    266
       10.0.2.255  255.255.255.255         On-link         10.0.2.15    266
       89.89.89.0    255.255.255.0         On-link       89.89.89.89    266
      89.89.89.89  255.255.255.255         On-link       89.89.89.89    266
     89.89.89.255  255.255.255.255         On-link       89.89.89.89    266
        127.0.0.0        255.0.0.0         On-link         127.0.0.1    306
        127.0.0.1  255.255.255.255         On-link         127.0.0.1    306
  127.255.255.255  255.255.255.255         On-link         127.0.0.1    306
        224.0.0.0        240.0.0.0         On-link         127.0.0.1    306
        224.0.0.0        240.0.0.0         On-link         10.0.2.15    266
        224.0.0.0        240.0.0.0         On-link         10.0.0.36    266
        224.0.0.0        240.0.0.0         On-link       89.89.89.89    266
  255.255.255.255  255.255.255.255         On-link         127.0.0.1    306
  255.255.255.255  255.255.255.255         On-link         10.0.2.15    266
  255.255.255.255  255.255.255.255         On-link         10.0.0.36    266
  255.255.255.255  255.255.255.255         On-link       89.89.89.89    266
===========================================================================
Persistent Routes:
  None

代码输出中有很多奇怪的东西。许多条目具有未记录的值,例如:

  • Protocol应在 1-14 范围内(几乎没有输入具有这样的值)
  • Luid.IfType不应该是 0(同样,几乎所有都是零)
  • 几乎没有进入给出任何合理的Prefix

这里MIB_IPFORWARD_ROW2描述,这里NET_LUID

我应该忽略那些具有无效值的吗?如果是这样,有效的在哪里?还是我做错了什么?

我还发现,当我在拔下电缆的情况下启动 Windows 时,它给出的条目更少(这是有道理的)。然后我插入电缆并添加条目。但是当我再次拔下插头时,它们仍然存在。 命令按预期工作,当电缆被拔下时,条目减少。route

当我尝试较旧的功能时,它可以工作。但它不支持 ipv6。GetIpForwardTable

c 路由 windows-networking iphelper

评论

0赞 och 5/28/2015
Cygwin内部似乎存在一些问题。当我在Visual Studio中编译上面的代码时,它可以工作。

答:

0赞 och 9/29/2015 #1

所以问题似乎出在cygwin上。当我使用 Microsoft C 编译器编译示例代码时,它按预期工作。在更新cygwin之后,它在使用gcc编译时也可以工作。 有趣的是,使用 cygwin 安装程序更新软件包就足够了,可以保留在旧版本中。cl.excygwin1.dll