Net :: RawIP错误填充源Mac地址(Ubuntu)

时间:2018-08-19 01:20:47

标签: perl network-programming

我正在尝试通过Net::RawIP module发送udp IP数据包,然后听tcpdump,当我检查数据包中的源mac-address时,我发现它与我的设备mac-address不匹配。我正在使用ubuntu。我尝试使用2个ubuntu设备,但给出了相同的结果(错误的源mac地址)。 Mac地址似乎填充了一些东西,但没有正确的值。从不同的设备中,它充满了相同的源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;

1 个答案:

答案 0 :(得分:1)

这仅仅是因为您在tcpdump中看到的源MAC地址是最后一个路由器之一,位于接收者之前。不是发送方主机之一:接收方主机与发送方不在同一本地网络上,因此将路由包含UDP有效负载的IP数据包。因此,发送方MAC地址在第一个路由器之后就丢失了。而收到的是最后一个路由器之一。

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

MAC地址仅由本地链路层使用。不在网络层。