我正在尝试通过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;
答案 0 :(得分:1)
这仅仅是因为您在tcpdump中看到的源MAC地址是最后一个路由器之一,位于接收者之前。不是发送方主机之一:接收方主机与发送方不在同一本地网络上,因此将路由包含UDP有效负载的IP数据包。因此,发送方MAC地址在第一个路由器之后就丢失了。而收到的是最后一个路由器之一。
请注意,使用除有线以太网或Wi-Fi(例如PPP,某些VPN等)之外的另一层2互连,您甚至根本没有MAC地址。
MAC地址仅由本地链路层使用。不在网络层。