История изменений
Исправление vel, (текущая версия) :
гм. Если ядро с transparent proxy, то можно биндить сокет на не локальный адрес и слать с него пакеты.
Я обычно скармливал .pcap через tap-интерфейс при помощи простенького перлового скрипта, когда тестировал nDPI.
#!/usr/bin/perl
use Net::Pcap;
#use Net::IP;
use Linux::TunTap;
my($dev,$pcap,$dumper,$dump_file,$err) = ('','','','');
die "src not exist ".$ARGV[0]."\n" if ! -f $ARGV[0];
my $ai = 0;
my $tap=new Linux::TunTap(NAME => 'tap%d');
die "AAA" if !$tap;
system("/sbin/ifconfig ".$tap->{interface}." up");
system("brctl addif br0 ".$tap->{interface});
my $count = 0;
my $np = pack("N",0);
sub store_packet {
my($user_data, $header, $packet) = @_;
my $h1=unpack("n",substr($packet,12,2));
if($h1 != 0x8100) {
$tap->put_raw($np.$packet);
} else { # VLAN
my $p1=substr($packet,0,12).substr($packet,16);
$header->{len} -= 4;
$header->{caplen} -= 4;
$tap->put_raw($np.$p1);
}
$count++;
}
do {
$pcap=Net::Pcap::open_offline($ARGV[$ai],\$err);
if(!$pcap){
die "aaa ".$err if $ai == 1;
last;
}
$ai++;
Net::Pcap::loop($pcap, 0 ? 2:$total, \&store_packet, $user_text);
Net::Pcap::close($pcap);
} while( -f $ARGV[$ai]);
system("brctl delif br0 ".$tap->{interface});
Больше 800мбит получить не удавалось, пришлось переписать на сях.
Исходная версия vel, :
гм. Если ядро с transparent proxy, то можно биндить сокет на не локальный адрес и слать с него пакеты.
Я обычно скармливал .pcap через tap-интерфейс при помощи простенького перлового скрипта, когда тестировал nDPI.
#!/usr/bin/perl
use Net::Pcap;
#use Net::IP;
use Linux::TunTap;
my($dev,$pcap,$dumper,$dump_file,$err) = ('','','','');
die "src not exist ".$ARGV[0]."\n" if ! -f $ARGV[0];
my $ai = 0;
my $tap=new Linux::TunTap(NAME => 'tap%d');
die "AAA" if !$tap;
system("/sbin/ifconfig ".$tap->{interface}." up");
system("brctl addif br0 ".$tap->{interface});
my $count = 0;
my $np = pack("N",0);
sub store_packet {
my($user_data, $header, $packet) = @_;
my $h1=unpack("n",substr($packet,12,2));
if($h1 != 0x8100) {
$tap->put_raw($np.$packet);
} else { # VLAN
my $p1=substr($packet,0,12).substr($packet,16);
$header->{len} -= 4;
$header->{caplen} -= 4;
$tap->put_raw($np.$p1);
}
$count++;
}
do {
$pcap=Net::Pcap::open_offline($ARGV[$ai],\$err);
if(!$pcap){
die "aaa ".$err if $ai == 1;
last;
}
$ai++;
Net::Pcap::loop($pcap, 0 ? 2:$total, \&store_packet, $user_text);
Net::Pcap::close($pcap);
} while( -f $ARGV[$ai]);
system("brctl delif br0 ".$tap->{interface});