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,感谢您的更正。