#!/usr/bin/perl # ===== Aktiver ARP-Scanner ===== if ($pid1 = fork) { # ===== PARENT-PROZESS ===== print "Parent ($$) hat fork 1 durchgefuehrt \n"; if ($pid2 = fork) { # ===== PARENT-PROZESS ===== print "Parent ($$) hat fork 2 durchgefuehrt \n"; # ======================= PARENT-CODE ============================== print "===== PARENT =====\n"; print "== ARP-Analyser ==\n"; print "==================\n"; print "tcpdump : $pid1 \n"; print "nmap : $pid2 \n"; print "reader : $$ \n"; open (LOGPIPE, "/root/logpipe") || die "konnte logpipe nicht oeffnen\n"; while () # Zeilen lesen { my $logline = $_; # Zeile sichern print $logline; # Zeile ausgeben chomp($logline); # Zeilenende entfernen ($layer2,$proto,$layer3) = split(/,/,$logline); # Zeile zerlegen ($tstamp,$smac,$d1,$dmac) = split(/ /,$layer2); # Layer2 zerlegen ($d0,$d1,$bytes,$d2,$d3,$aip,$d4,$amac) = split(/ /,$layer3); # Layer3 zerlegen $bytes =~ s/://g; # Doppelpunkte vernichten $angriff = ($smac ne $amac); # ARP-Angriff print "TStamp : $tstamp #\n"; # Zeitstempel print "SrcMAC : $smac #\n"; # Sollte identisch mit Answer-MAC sein print "DstMAC : $dmac #\n"; # Sollte dieser PC sein print "Bytes : $bytes #\n"; # Paketgroesse print "AnswIP : $aip #\n"; # Sollte der angefragte PC sein print "AnsMAC : $amac #\n"; # Sollte die MAC des Angefragten sein if ($angriff) { print "ARP-Angriff!!\n"; } } # ================================================================== exit; } else { # ===== CHILD-PROZESS 2 ===== die "fehler bei fork2: $!" unless defined $pid2; print "Child 2 wurde gestartet : $$\n"; # ======================= CHILD2-CODE ============================== print "===== CHILD 2 =====\n"; print "====== nmap =======\n"; print "===================\n"; while (1) { $d1 = `/usr/bin/nmap -sP 10.10.0.1-254`; # ARP-Scan durchfuehren sleep (1); # Scan-Zyklus } print "nmap gestoppt \n"; # ================================================================== waitpid($pid2,0); } exit; } else { # ===== CHILD-PROZESS 1 ===== die "fehler bei fork1: $!" unless defined $pid1; print "Child 1 wurde gestartet : $$\n"; # ======================= CHILD1-CODE ============================== print "===== CHILD 1 =====\n"; print "===== tcpdump =====\n"; print "===================\n"; $d1 = `/usr/sbin/tcpdump -l -e -q -n -i eth0 arp and not ether dst ff:ff:ff:ff:ff:ff >/root/logpipe`; print "tcpdump gestoppt \n"; # ================================================================== waitpid($pid1,0); }