C 用于演示网络中链路层通信而不使用ip地址的套接字程序
众所周知,在网络中,通信是通过MAC地址而不是ip地址进行的。因此,我一直认为,我们是否可以在服务器-客户机范例中编写一个套接字程序,该程序只使用MAC地址进行通信,而不使用ip地址,即结构sock_____________________________________________可以工作以允许您访问L3标头。但是,请注意,在更新更多的Windows(XP SP3、Vista和7)上,原始套接字受到套接字层的极大限制,因此很难发送您选择的任意数据C 用于演示网络中链路层通信而不使用ip地址的套接字程序,c,sockets,networking,C,Sockets,Networking,众所周知,在网络中,通信是通过MAC地址而不是ip地址进行的。因此,我一直认为,我们是否可以在服务器-客户机范例中编写一个套接字程序,该程序只使用MAC地址进行通信,而不使用ip地址,即结构sock_____________________________________________可以工作以允许您访问L3标头。但是,请注意,在更新更多的Windows(XP SP3、Vista和7)上,原始套接字受到套接字层的极大限制,因此很难发送您选择的任意数据 您还可以使用允许对以太网适配器进行更原始的
您还可以使用允许对以太网适配器进行更原始的访问的特殊库。(对于Windows)或(对于Linux)将允许您操作整个数据包数据,包括以太网报头,并确实发送任何其他您想要的L2协议。您当然可以编写这样的程序,是的。你有什么问题吗?你能告诉我怎么写这样一个程序吗?因为我已经用C写了很多程序,但是从来没有尝试过这个。你能给我一些提示吗。但是它在代码中填充了ip地址结构;主机地址。sin\u addr.s\u addr=INADDR\u ANY;它不是基于硬件地址。你读得够多了吗?第一个例子是UDP,第二个是原始以太网。哦,非常抱歉,感谢您提供的链接。当我想在Windows中使用
socket()
和sendto()发送ARP数据包时,该限制是否适用?是的。由于ARP是介于L1和L2之间的数据包(类似于L1.5),您无法直接控制ARP数据包,也无法从标准的套接字生成它们。你能回答这个问题吗?看到我的个人资料,你就会发现问题所在。