Net::RawIP 填写来源mac-地址错误(Ubuntu)

Net::RawIP fill source mac-address wrongly (Ubuntu)

我正在尝试通过 Net::RawIP module 发送 udp IP 数据包,然后收听 tcpdump,当我检查数据包中的源 mac-地址时,我发现它与我的设备不匹配 mac-地址。我正在使用 ubuntu。我尝试了 2 ubuntu 台设备,但给出了相同的结果(错误的来源 mac 地址)。 Mac-address 似乎被填充了一些东西但不是正确的值。来自不同的设备,它充满了相同的源 mac-地址(错误)。什么会导致这个?我们如何修复它以发现正确的价值?

代码示例:

#!/usr/bin/perl

use Net::RawIP;
use strict;
use warnings;

my $ip_dst   = $ARGV[0];
my $port_dst = $ARGV[1];

my $payload  = "TestingMac";

my $packet = new Net::RawIP({udp => {}});

$packet->set({
            ip => {
                    saddr => 0,
                    daddr => $ip_dst
                },
            udp => {
                     source => 50,
                     dest   => $port_dst,
                     data   => $payload
                }
});

$packet->send;

这仅仅是因为您使用 tcpdump 看到的源 MAC 地址是最后一个路由器之一,就在接收方之前。不是发送主机之一:接收主机与发送主机不在同一本地网络上,因此路由包含 UDP 负载的 IP 数据包。所以发件人 MAC 地址在第一个路由器之后丢失。收到的是最后一台路由器。

请注意,您甚至可以根本没有 MAC 地址,使用有线以太网或 Wi-Fi 之外的另一个第 2 层互连(想想 PPP、某些 VPN,...)。

MAC 地址仅供本地 link 层使用。不是网络层。