Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.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# 为什么libpcap有一个使用sockaddr\u in定义设备地址的结构pcap\u addr\t?_C#_.net_Network Programming_Libpcap - Fatal编程技术网

C# 为什么libpcap有一个使用sockaddr\u in定义设备地址的结构pcap\u addr\t?

C# 为什么libpcap有一个使用sockaddr\u in定义设备地址的结构pcap\u addr\t?,c#,.net,network-programming,libpcap,C#,.net,Network Programming,Libpcap,我很好奇为什么在调用pcap\u-addr\t时给您的pcap\u-findalldevs中使用sockaddr。之所以不那么直截了当,是因为中的sockaddr\u包含有关地址和端口的信息。这类似于.NET的System.NET.IPEndPoint类 如果我们查看的是.NET库,我不希望看到这样的属性,其中包含关于属于设备的地址的描述。据我所知,在描述系统上的设备时,没有协议定义地址和端口 在我的所有设备(仅IPv4和IPv6)上,端口为0 什么时候将地址和端口关联到设备作为其拥有的端点之一

我很好奇为什么在调用
pcap\u-addr\t
时给您的
pcap\u-findalldevs
中使用
sockaddr
。之所以不那么直截了当,是因为中的
sockaddr\u包含有关地址端口的信息。这类似于.NET的
System.NET.IPEndPoint

如果我们查看的是.NET库,我不希望看到这样的属性,其中包含关于属于设备的地址的描述。据我所知,在描述系统上的设备时,没有协议定义地址和端口

在我的所有设备(仅IPv4和IPv6)上,端口为0

什么时候将地址和端口关联到设备作为其拥有的端点之一是有益的?我问这个问题的原因是因为我正在为libpcap开发一个C#绑定,我想知道在我的
NetworkDeviceAddress
类中将
sockaddr\u中的所有数据以
System.Net.IPEndPoint
属性的形式暴露给用户是有用的还是错误的/愚蠢的,该类描述了特定设备

什么时候将地址和端口关联到设备作为其拥有的端点之一是有益的

充其量也很少,也许永远不会。您假设这就是使用
sockaddr
的原因

事实上,它被用作支持多种地址类型的一种方式;是的,
sockaddr
可能包含端口号,如果它是
AF_INET
AF_INET6
,但正如“if is”子句所示,它还包含地址族值

libpcap/WinPcap是一个跨平台库,最初是为BSD UN*X创建的,在.NET存在之前很久就创建了它,因此它的设计显然没有考虑到.NET的网络对象。(
pcap\u findalldevs()
在最初的libpcap中不是API,但它是在2001年8月至9月添加的,那时是.NET 1.0最终版本发布之前。)


pcap\u findalldevs()
没有将端口号设置为任何重要的值,因此不需要在包装器中公开它。

很公平。我认为使用熟悉的结构很方便,尤其是在今天。我想,如果有一天出现这种情况,有人可以制定一个新的协议,将设备分配到特定的地址和端口,
sockaddr
仍然是合适的。我只是想确保没有人知道公开完整的
sockaddr
的任何原因,而不仅仅是IP地址。
sockaddr
s不包含端口<代码>sockaddr_in
s和
sockaddr_in 6
s这样做是因为它们都用于引用IPv4/IPv6端点和TCP/UDP端点。在网络堆栈的同一层拥有地址和端口的唯一方法是使用与Internet协议非常不同的协议;在这一点上,许多网络内容可能需要重新构建,包括.NET网络内容。当然是指在
中编写
sockaddr\u和在6
中编写
sockaddr\u,感谢您的更正。