我有一个 perl 脚本,它从 TunTap 接口读取和处理 IPv4 数据包。稍微精简一下,看起来是这样的:
#!/usr/bin/perl
use warnings;
use strict;
use Common;
use Linux::TunTap;
use NetPacket::IP;
use IO::Socket;
$|++;
###### Predecs #####
my $tun;
my %config = Loadconfig();
$tun = Linux::TunTap->new(NAME => $config{'localtun_name'})
or die "Couldn't connect to Interface $config{localtun_name}\n";
print "Interface up: " . $tun->{interface} . "\n";
while (my $rawdata = $tun->get_raw()) {
$rawdata =~ s/^....//; # Strip the TunTap header
my $packet = NetPacket::IP->decode($rawdata);
print "$packet->{id} $packet->{src_ip} -> $packet->{dest_ip} $packet->{proto} $packet->{len}\n";
# Do some processing here
}
出于路由的原因,我需要知道数据的源端口。我还没有找到一种方法来做到这一点NetPacket::IP
,那么有没有不同的方法来确定呢?我目前只是NetPacket::IP
出于调试原因使用,所以我并没有真正设置该模块,特别是如果一个不同的模块允许我提取除了序列号、大小、源 IP 和目标 IP 之外的源端口。