장치에서 패킷을 필터링하고 해당 장치에서 특정 IP 주소로 패킷을 필터링하는 스크립트를 작성하려고했습니다. ==perl 및 Net :: Pcap 및 Net :: PcapUtils를 사용하여 특정 IP에서 패킷을 필터링합니다.
난 당신이 특정 장치를 선택하면 데이터가 난 와이어 샤크에서 얻을 출력처럼되고 싶어요 당신은 ip.src를 사용 xx.xx.xx.xx
내 프로그램은 지금까지 같다
#!/usr/bin/perl -w
my $interface='eth1';
sub process_pkt #Packet processing routine
{
my ($user_data,$header, $packet) = @_;
my $minipacket = substr($packet,0,54);
print ("\n## raw: ###\n");
print ($minipacket);
print ("\n==Byte#/Hex/Dec/Bin==\n");
for ($i=0;$i<55;$i++)
{
$hexval = unpack('H2',substr($packet,$i,1));
$decval = hex(unpack('H2',substr($packet,$i,1)));
printf ("%03s-%02s-%03s-%08b\n", $i, $hexval, $decval, $decval);
}
}
# ######################################################################
# Here we are invoking the NetPcap module and looping through forever.
Net::PcapUtils::loop(\&process_pkt,
SNAPLEN => 65536, #Size of data to get from packet
PROMISC => 1, #Put in promiscuous mode
FILTER => 'tcp', #only pass TCP packets
DEV => $interface,);
나는 점점 오전 출력
지금은 의 eth1 장치 및 xx.xx.xx.xx 0123의 soruce의 IP에서받은 패킷을 필터링 할Net :: PcapUtils :: loop의 필터 옵션을 사용하여이를 수행 할 수 있습니까? 데이터 길이 XX의 다음 내가 원하는 패킷 ... 나는 cpan.org 에있는 문서를 통과 시도하지만 난 찾을 모두 내가 예제를 찾을 수 없습니다 .. 옵션을 사용할 수 있습니다 ..
수 있습니다 누군가 나를 도와주세요.
개선 :
내가 코드의
FILTER => 'tcp'
줄 끝에서
FILTER => 'ip src xx.xx.xx.xx'
같은 것을 사용할 수 있습니까? 그리고 어떻게 든 데이터 길이 = 86 패킷을 필터링하기 위해 패킷의 데이터 길이를 포함 할 수 있습니까? i는 패킷의 페이로드를 얻기 위해 사용하고
대체 프로그램 :
#!/usr/bin/perl -w
# #########################
#
use Net::PcapUtils;
use NetPacket::Ethernet qw(:strip);
use NetPacket::IP;
use NetPacket::TCP;
use NetPacket::IP qw(:strip);
my $interface= 'eth1';
my $snaplen= 65536;
my $filter='tcp';
my $promisc = 1;
my $timeout = 10000 ;
my $err;
sub process_pkt
{
my ($user_data,$header,$packet) = @_;
$ip= NetPacket::IP->decode(eth_strip($packet));
$tcp= NetPacket::TCP->decode($ip->{data});
$payload = $tcp->{data};
print ("payload: \n ".$payload." \n----end-----\n");
for($i=0;$i<55;$i++){
$hexval = unpack('H2',substr($payload,$i,1));
open (MYFILE, '>>perldata1.txt');
print MYFILE ($i." :hex: ". $hexval."\n");
close (MYFILE);
}
}
Net::PcapUtils::loop(\&process_pkt,
SNAPLEN => 65536,
PROMISC => 1,
FILTER => 'tcp',
FILTER => 'ip src 129.7.236.40',
DEV => $interface,);
하지만 여전히 데이터 필드의 길이를 얻는 방법을 알아낼 수 없습니다입니다. :( 감사합니다.