Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IGMP连接消息给出错误的校验和_C#_Sockets_Wireshark_Multicast_Igmp - Fatal编程技术网

C# IGMP连接消息给出错误的校验和

C# IGMP连接消息给出错误的校验和,c#,sockets,wireshark,multicast,igmp,C#,Sockets,Wireshark,Multicast,Igmp,我正在尝试连接到多播组以接收一些UDP数据包。 我使用的代码运行良好,我正在接收数据包,我以前没有遇到过这个问题。但是现在有一个新的需求,需要数据包通过一个交换机,该交换机需要查看多播连接消息。以前,它只是哑开关,这并不是一个问题 要加入多播组,我使用以下代码: var LocalAddress = "228.12.12.27"; var LocalPort = 46715; var LocalEndPoint = new IPEndPoint(IPAddress.Parse(LocalAddr

我正在尝试连接到多播组以接收一些UDP数据包。 我使用的代码运行良好,我正在接收数据包,我以前没有遇到过这个问题。但是现在有一个新的需求,需要数据包通过一个交换机,该交换机需要查看多播连接消息。以前,它只是哑开关,这并不是一个问题

要加入多播组,我使用以下代码:

var LocalAddress = "228.12.12.27";
var LocalPort = 46715;
var LocalEndPoint = new IPEndPoint(IPAddress.Parse(LocalAddress), LocalPort);
var RxSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

RxSocket.Blocking = false;
RxSocket.ReceiveBufferSize = UInt16.MaxValue;
RxSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);

RxSocket.Bind(new IPEndPoint(IPAddress.Any, LocalEndPoint.Port));
RxSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(LocalEndPoint.Address));
RxSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 50);

RxSocket.Close();
生成IGMP连接消息的行是

RxSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(LocalEndPoint.Address));
然后发送IGMP Join消息

然而,当我用Wireshark窥探网络时,我发现IGMP消息有一个错误的校验和;


这是我的代码还是输入有问题?或者还有其他什么吗?

在硬件中进行校验和的现代网卡中,这是人们所期望的。别担心这个

这是我的代码的问题吗

不,因为您的代码没有生成IP校验和。这要么是由操作系统的网络堆栈生成的,要么是由网络适配器生成的,正如尼古拉·费迪索夫在回答中所指出的那样

如果您的网络分析仪在发送数据包的机器上运行,并且校验和是由网络适配器而不是网络堆栈生成的,那么,因为捕获您自己的数据包是由网络堆栈“循环这些数据包”完成的对于捕获机制,而不是通过网络适配器捕获它传输的数据包(如果有适配器的话,很少有适配器会这样做),捕获的数据包不会计算IP校验和,因此几乎肯定会出现错误的IP校验和

注意Wireshark显示屏中的“可能是由IP校验和卸载导致的”。这就是Wireshark所说的