为什么在UDP包中不能获取发包方的地址

首先,我们要先了解一下UDP包的结构。

image

                                  图1 UDP报文格式

从图1,我们可以看出,从UDP包中,我们可以获取的信息只有源端口和目的地端口。我们不能获取到源IP因为报文中没有源IP。真正包含IP地址的是IPV4伪报头中

image

                                   图2 UDP包的IPV4伪报头格式

可以看出,图1中的UDP包其实是包含在图2中的,图2中清楚地指出了包的源地址(source addresses)和目标地址(destination addresses)都在IPv4头中。图2的协议是UDP专用的(详见List of IP protocol numbers):17(0x11)。UDP length指的是UDP头(head)和数据(data)的长度。

再让我们通过抓包工具直观地看一下,见图3。

image

                                                      图3 抓包工具的截图

那么我们如何获取一个IP地址呢?

方法1、查看ARP表是最简单的方法。

方法2、使用libpcap是最可靠的。可以参考linux下网络监听与发送数据包的方法(即libpcap、libnet两种类库的使用方法)

方法3、写自己的网卡驱动,应该没几个人会这样搞。

参考链接

Getting the source hardware address of received UDP packets?

User Datagram Protocol

原文地址:https://www.cnblogs.com/kissazi2/p/3159781.html