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 层使用。不是网络层。
我正在尝试通过 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 层使用。不是网络层。