netsh和NetworkInterface.GetIPProperties()

时间:2018-11-22 13:16:01

标签: c# networking mtu

How to get the current MTU of an interface in C#相关
但是这种解决方案(将两个mtu大小都设置为相同的值),对我而言并没有帮助。

GetIPv4Properties()中存在一个问题,如果ipv4和ipv6的mtu大小设置不同,则...

如果启用了ipv6,则两个(GetIPv4Properties / GetIPv6Properties)都将返回ipv6的mtu大小!
仅当禁用ipv6协议时,Mtu值才正确。

using System.Net.NetworkInformation;
foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces())
{
    if (ni.Name == "Local Area Connection")
    {
        Console.WriteLine(ni.GetIPProperties().GetIPv4Properties().Mtu);
        Console.WriteLine(ni.GetIPProperties().GetIPv6Properties().Mtu);
    }
}

但是netsh显示正确的值

netsh interface ipv4 show subinterface "Local Area Connection"
netsh interface ipv6 show subinterface "Local Area Connection"

没有协议版本,将显示ipv4的值。

netsh interface ip show subinterface "Local Area Connection"

就我而言,我需要独立于ipv6协议启用或禁用状态来检查ipv4的MTU大小。
因为我的软件只能工作,所以如果mtu大小设置为1500,否则我想警告用户。

是否可以使用NetworkInterface类,还是应该使用讨厌的骇客?

Process process = Process.Start(new ProcessStartInfo("netsh.exe", "interface ipv4 show subinterface \"Local Area Connection\"") {
                UseShellExecute = false,
                RedirectStandardOutput = true
            });
string output = process.StandardOutput.ReadToEnd();
process.WaitForExit();
Console.WriteLine(output);

@EDIT:
@RonMaupin发表评论

  

IPv4或IPv6的MTU没有区别,它们是第3层   协议。 MTU是第2层的最大有效负载大小   协议,例如以太网

那是正确的,但是对于Windows,每个协议都使用它自己的mtu大小和碎片。
使用mtu ipv4 = 1300和ipv6 = 1500并ping 1400字节进行了测试:

netsh interface ipv4 set subinterface "Local Area Connection" mtu=1300 store=persistent
netsh interface ipv6 set subinterface "Local Area Connection" mtu=1500 store=persistent

ping6 -c 5 ff02::1:3 -s 1400
  

112 28.860467 fe80 :: 64aa:56e9:fb1e:2081 ff02 :: 1:3 ICMPv6 1462回声   (ping)请求ID = 0x3160,seq = 2,跳数限制= 1(多播)

ping 192.168.101.11 -s 1400 
  

152 102.027390 192.168.101.223 192.168.101.11 IPv4 1314分段IP   协议(proto = ICMP 1,off = 0,ID = 2712)
  153 102.027409 192.168.101.223 192.168.101.11 ICMP 162回声(ping)   请求ID = 0x3450,seq = 0/0,ttl = 128(未找到响应!)

0 个答案:

没有答案