netstat und sed

F

Fiete

Grünschnabel
Hallo zusammen und ein gesundes neues Jahr....

I need :hilfe2: !!!

Ich habe vor in einem Perl Skript den Befehl netstat -t auf einem Router auszuführen auf dem Openwrt läuft.
Auf den Router via Telnet im Skript zu kommen und dort Befehle auszuführen ist nicht das Problem... Mein Problem ist nur dann wenn ich netstat -t ausführe kommt:

root@ROUTER_4:/# netstat -t
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 172.21.1.153:23 172.21.1.100:56782 ESTABLISHED
netstat: no kernel support for AF INET6 (tcp)

Wichtig ist mir nur die IP Adresse des Client's ! Sprich 172.21.1.100 diese soll in eine Variable Geschrieben werden. Es sollte eigendlich mit sed funktionieren, jedoch bin ich damit unerfahren und habe keine Ahnung wie das geht... Ich hoffe hier gibt es Hilfe..

Danke im Vorraus...

lg
Fiete
 
netstat -t | awk '/^tcp/ {print $5}'
wäre 'ne Variante, musste dann halt in eine Varibale (bzw. ein Array) packen.
bei längeren Listen würde ich perl nehmen.
 
Ok danke erstmal.. funzt aber nur so halb, hier mal mein skript

Code:
#!/usr/bin/perl 

use strict;
use warnings;
use Net::Telnet ();
my $t;
my @output;

$t = new Net::Telnet 	(Timeout => 10,
                      	Prompt => '/root\@ROUTER/',
			Errmode => 'die');

$t->open("172.21.1.153");
$t->waitfor('/root/'); 
#$t->cmd(string => 'insmod nfs'); 
@output = $t->cmd(string => 'netstat -t | awk \'/^tcp/ {print $5}\'');

print @output;

AUSGABE:
Code:
netstat: no kernel support for AF INET6 (tcp)
172.21.1.100:53506
172.21.1.100:35760

ich will aber wie gesagt nur die IP ohne Port...
 
Hi,
im Perl systemcall Pipes und awk etc. zu verwenden ist alles andere als performant, besser du machst die Auswertung dann auch im Perl Skript, z.B.
Code:
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;

my @output = `netstat -t`;
my @ips;
my $i = 0;
for (@output) {
  if (/^tcp/) {
    my @fields = split(/[\s:]+/, $_);
    $ips[$i++] = $fields[5];
  }
}
print Dumper @ips;
Es gibt übrigens auch ein Net::Netstat::Wrapper Modul auf CPAN, das hab ich aber noch nicht ausprobiert.
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

ach so: ob das $5 in Zeile 12 so stimmt musst du testen, die netstat Ausgabe ist auf Linux etwas anders als auf deinem Router.
 
Zuletzt bearbeitet:
Kuhl.. es läuft danke dir

AUSGABE:

$VAR1 = '172.21.1.100';
$VAR2 = '172.21.1.100';

und wie mache ich das jetzt, dass ich jetz nur VAR1 in eine Variable schreibe?
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

print $ips[1];
ok habs... danke dir vielmals....
 
Zuletzt bearbeitet:
Kurzform für mal schnell auf der Shell:
Code:
netstat -t|perl -anle 'print ((split /:/,$F[4])[0]) if(/^tcp/)'

Gibt dir nur die IP ohne Port aus.

Wolfgang
 
Danke auch dir Wolfgang, aber mein router supported zur Zeit noch kein perl
 
Hmmm nicht ganz das Skript führe ich ja net aufm Router aus, sondern auf irgend nem client.... das skript stellt ne telnetverbindung her und führt befehle aus....
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

Ach hey Leute ich habe da noch ein Problem.... Ziel ist es zu übersprüfen ob in einem Array ein bestimmter Inhalt steht... (Ich weiß schon 1000mal durchgekaut), jedoch habe ich ja schon ein ansatz..

Code:
#!/usr/bin/perl

use strict; 
use warnings;
use Net::Telnet ();
my $t = new Net::Telnet 	(Timeout => 10,
                      		Prompt => '/root\@ROUTER/',
				Errmode => 'die');

$t->open("IP");
$t->waitfor('/root/'); 

my @output = $t->cmd(string => 'cat /etc/samba/smb.conf');

my $test = "@output";

print $test;

Ausgabe ist dann

Code:
[global]
         netbios name = Router4 
         workgroup = workgroup
         server string = openwrt-router4
         syslog = 10
         encrypt passwords = true
         passdb backend = smbpasswd
         obey pam restrictions = yes
         socket options = TCP_NODELAY
         unix charset = ISO-8859-1
         preferred master = yes
         os level = 20
         security = user
         guest account = nobody
         invalid users = root
         smb passwd file = /etc/samba/smbpasswd
         username map = /etc/samba/smbusers
         map to guest = bad user
         
 [config]
         path = /tmp
         guest ok = yes
         writeable = yes
         browseable = yes
         create mode = 0664
         directory mode = 0775
 
 [homes]
         comment = Home Directories
         browseable = no
         read only = no
         create mode = 0750
 
 [tmp]
         path = /tmp
         guest ok = yes
         create mask = 0700
         directory mask = 0700

und mein Ziel ist haltzu überprüfen ob der Block

[config]
path = /tmp
guest ok = yes
writeable = yes
browseable = yes
create mode = 0664
directory mode = 0775

vorhanden ist.

Ich dachte da so irgendwie an

if ($test =~ /.*[config]......)

aber ich bin mir nicht sicher wie ich das machen soll ?

sowas schon mal jmd gemacht?

Thanks for help!

lg Fiete
 
Zuletzt bearbeitet:

Ähnliche Themen

OpenVPN - Server kann clients nicht erreichen.

bind failed on port 445 und 139

NagiosGrapher 1.7.1 funktioniert nicht

Another web server daemon with SSL is already running

Portknocking mit iptables

Zurück
Oben