Usare Nestat per monitorare connessione pc

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Unicondor
Linux 1.x
Linux 1.x
Messaggi: 147
Iscritto il: mar 30 nov 2004, 0:00
Slackware: 13.1
Kernel: 2.6.37.6
Località: Potenza
Contatta:

Usare Nestat per monitorare connessione pc

Messaggio da Unicondor »

Salve a tutti, la mia domanda è come usare netstat per monitorare le connessioni in entrata ed uscita dal mio pc.
L'idea è quella implementata da http://conky.sourceforge.net/ che uso sul mio desktop.

Per ora sono riuscito a capire le connessioni in uscita tramite il seguente comando

Codice: Seleziona tutto

/usr/sbin/netstat -f inet inet6 unix  | awk '($5 != "*.*"){print $5 , $1}' 
in questo modo vedo le connessioni in uscita (foreign-address) i protocolli e la porta.

Ora vorrei fare la stessa cosa per le connessioni in entrata al mio e vorrei qualche suggerimento su come fare ( dovrei confrontare le due riga che mi da ip in ingresso ed ip in uscita).

Purtroppo ho visto i sorgenti di Conky ma non ho trovato la sezione dove loro implementano tali funzioni.

Qualcuno può essermi di aiuto??

Vi ringrazio

Flavio

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6643
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Usare Nestat per monitorare connessione pc

Messaggio da targzeta »

Io ho sempre attivo un xterm con netstat. Faccio quanto segue:

Codice: Seleziona tutto

xterm +bc +sb -class "my_netstat" -fn 7x13 -bg "#232717" -fg "dark gray" -g =101x29+-2-14 -e "my_netstat.sh"&
l'opzione '-class' mi serve per istruire il windows manager (icewm) ad inserire il terminale nel 3° desktop virtuale (e altre cosette).

my_netstat.sh è questo script:

Codice: Seleziona tutto

clear;
while (( 1 )); 
  do 
  netstat --tcp --udp -nap | sed -n '1p;2{s/PID/  PID/;p};/ESTABLISHED/{s/D/D   /;p;d};/LISTEN/{s/N/N   /;p;d};/0\.0\.0\.0:/{s/\( \)\([[:digit:]]\+\/.*\)/\1   \2/;p;d};'
  sleep 5; 
  clear;
done
Spina
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Unicondor
Linux 1.x
Linux 1.x
Messaggi: 147
Iscritto il: mar 30 nov 2004, 0:00
Slackware: 13.1
Kernel: 2.6.37.6
Località: Potenza
Contatta:

Re: Usare Nestat per monitorare connessione pc

Messaggio da Unicondor »

Davvero un bel script..potrebbe tornarmi utile :D

E' un po come il mio, l'unica differenza è che io stampo solo le connessioni ( o melgio quelle con almeno un dns specificato in foreign) attive mentre tu stampi tutto il listato di netstat, però devo ammettere che l'uso di "sed" è molto più elegamente rispetto al mio "awk".

Il problema però è capire come implementare un comando che mi mostri solo quelle in entrata. Se qualcuno conosce i sorgenti di Conky potrebbe darmi una mano e suggerirmi la porzione di codice dove viene implemtentato tutto ciò.

comunque grazie per la risposta :D

A presto

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6643
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Usare Nestat per monitorare connessione pc

Messaggio da targzeta »

Cosa intendi per connessioni in entrata? Ho provato il tuo codice ma a me dice che -f non è un opzione valida. Se mi spieghi cosa vorresti ottenere...

Spina
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Unicondor
Linux 1.x
Linux 1.x
Messaggi: 147
Iscritto il: mar 30 nov 2004, 0:00
Slackware: 13.1
Kernel: 2.6.37.6
Località: Potenza
Contatta:

Re: Usare Nestat per monitorare connessione pc

Messaggio da Unicondor »

Scusami spina, il comando che do con il flag -f serve a specificare la famiglia degli indirizzi in Mac OSX

Codice: Seleziona tutto

-f address_family
           Limit statistics or address control block reports to those of the
           specified address family.  The following address families are rec-
           ognized: inet, for AF_INET, inet6, for AF_INET6 and unix, for
           AF_UNIX.
in poche parole fa lo stessa cosa dei tuoi flag --tcp --udp .

Sto svilippando un widget il quale mi mostra le connessioni in entrata e quelle in uscita del mio pc. In poche parola deve mostrami la stessa schermata di Conky in cuoi c'è ip( il dns melgio) il protocollo tcp/udp e la parta.
Ora con quel comando che to mi trovo tutte le connessione dal mio pc verso la rete, ora vorrei fare la stessa cosa per le connessioni in entrata al mio pc.

Spero di essermi spiegato meglio.

Ti ringrazio

Flavio

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6643
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Usare Nestat per monitorare connessione pc

Messaggio da targzeta »

Unicondor ha scritto:...
Sto svilippando un widget il quale mi mostra le connessioni in entrata e quelle in uscita del mio pc. In poche parola deve mostrami la stessa schermata di Conky in cuoi c'è ip( il dns melgio) il protocollo tcp/udp e la parta.
Mi fai un copia incolla, poiché conky è configurabile e a me non mostra queste informazioni. Come fai a dire che il comando di sopra ti mostra solo le connessioni in uscita?
Scusami, ma un socket non dovrebbe essere bidirezionale? Tramite lo stato potresti vedere se stai ricevendo una richiesta di SYN_RECV ma una volta stabilita la connessione come fai a dire quali sono quelle in entrata e quelle in uscita?

Comunque conky dovrebbe trovare le informazioni nella directory /proc/net.

Spina
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Unicondor
Linux 1.x
Linux 1.x
Messaggi: 147
Iscritto il: mar 30 nov 2004, 0:00
Slackware: 13.1
Kernel: 2.6.37.6
Località: Potenza
Contatta:

Re: Usare Nestat per monitorare connessione pc

Messaggio da Unicondor »

Perche il comando netstat mostra gli ip "locali" e quelli "foreign", quindi dovrebbe riconoscere il primo ACK_SYN mandato dall'ip e riconoscere quale dei due ip abbia mandato per prima tale segnale...
comunque ti incollo il mio conky.conf

Codice: Seleziona tutto

root@darkstar:/etc/conky# cat conky.conf
# Conky, a system monitor, based on torsmo
#
# Any original torsmo code is licensed under the BSD license
#
# All code written since the fork of torsmo is licensed under the GPL
#
# Please see COPYING for details
#
# Copyright (c) 2004, Hannu Saransaari and Lauri Hakkarainen
# Copyright (c) 2005-2007 Brenden Matthews, Philip Kovacs, et. al. (see AUTHORS)
# All rights reserved.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
# $Id: conky.conf 990 2007-11-22 19:38:17Z pkovacs $

alignment top_right
background yes
border_width 1
cpu_avg_samples 2
default_color white
default_outline_color white
default_shade_color white
draw_borders no
draw_graph_borders yes
draw_outline no
draw_shades no
font 6x10
gap_x 5
gap_y 60
minimum_size 5 5
net_avg_samples 2
no_buffers yes
out_to_console no
own_window yes
own_window_class Conky
own_window_type override
own_window_transparent yes
stippled_borders 0
update_interval 3.0
uppercase no
use_spacer no

TEXT
$nodename - $sysname $kernel on $machine
$hr
${color grey}Uptime:$color $uptime
${color grey}Frequency (in MHz):$color $freq
${color grey}Frequency (in GHz):$color $freq_g
${color grey}RAM Usage:$color $mem/$memmax - $memperc% ${membar 4}
${color grey}Swap Usage:$color $swap/$swapmax - $swapperc% ${swapbar 4}
${color grey}CPU Usage:$color $cpu% ${cpubar 4}
${color grey}Processes:$color $processes  ${color grey}Running:$color $running_processes
$hr
${color grey}File systems:
 / $color${fs_free /}/${fs_size /} ${fs_bar 6 /}
${color grey}Networking:
Up:$color ${upspeed eth0} k/s${color grey} - Down:$color ${downspeed eth0} k/s
$hr
${color grey}Name                  PID   CPU%   MEM%
${color lightgrey} ${top name 1} ${top pid 1} ${top cpu 1} ${top mem 1}
${color lightgrey} ${top name 2} ${top pid 2} ${top cpu 2} ${top mem 2}
${color lightgrey} ${top name 3} ${top pid 3} ${top cpu 3} ${top mem 3}
${color lightgrey} ${top name 4} ${top pid 4} ${top cpu 4} ${top mem 4}
$hr

${color lightgrey}Impiego di RAM:${color #E26200} $mem/$memmax - $memperc% ${membar}
$hr

${color lightgrey}Rete Internet: ${color grey} ${addr eth1}
Down:${color #54FF9F} ${downspeed eth1} k/s${color lightgrey} ${offset 80}Up:${color #FFFF00} ${upspeed eth1} k/s
${color #54FF9F}${downspeedgraph eth1 32,150 ff0000 0000ff} ${color #FFFF00}${upspeedgraph eth1
32,150 0000ff ff0000}
$hr

${color #0077ff}Port(s)${alignr}#Connections
$color Inbound: ${tcp_portmon 1 32767 count}  Outbound: ${tcp_portmon 32768 61000 count}${alignr}ALL: ${tcp_portmon 1 65535 count}
${color #0077ff}Inbound Connection ${alignr} Local Service/Port$color
 ${tcp_portmon 1 32767 rhost 0} ${alignr} ${tcp_portmon 1 32767 lservice 0}
 ${tcp_portmon 1 32767 rhost 1} ${alignr} ${tcp_portmon 1 32767 lservice 1}
 ${tcp_portmon 1 32767 rhost 2} ${alignr} ${tcp_portmon 1 32767 lservice 2}
 ${tcp_portmon 1 32767 rhost 3} ${alignr} ${tcp_portmon 1 32767 lservice 3}
 ${tcp_portmon 1 32767 rhost 4} ${alignr} ${tcp_portmon 1 32767 lservice 4}
${color #0077ff}Outbound Connection ${alignr} Remote Service/Port$color
 ${tcp_portmon 32768 61000 rhost 0} ${alignr} ${tcp_portmon 32768 61000 rservice 0}
 ${tcp_portmon 32768 61000 rhost 1} ${alignr} ${tcp_portmon 32768 61000 rservice 1}
 ${tcp_portmon 32768 61000 rhost 2} ${alignr} ${tcp_portmon 32768 61000 rservice 2}
 ${tcp_portmon 32768 61000 rhost 3} ${alignr} ${tcp_portmon 32768 61000 rservice 3}
 ${tcp_portmon 32768 61000 rhost 4} ${alignr} ${tcp_portmon 32768 61000 rservice 4}
$hr

Wireless Info

${color lightgrey}Essid:${color red} ${wireless_essid eth1}
${color lightgrey}Qualita' del link:${color red} ${wireless_link_qual eth1}% ${wireless_link_bar eth1}
${color lightgrey}Bitrate:${color red} ${wireless_bitrate eth1}
$hr

${color green}Slackware Security Announces

${color lightgrey}${execi 300 /home/unicondor/Desktop/conky-rss.sh http://dev.slackware.it/rss/slackware-security.xml 5 2}
La sezione "inbound Connection" mi dice le connessioni entranti al mio pc.

Ho visto al sezione /proc/net del filesystem virtuale pero' non ho trovato nulla che possa aiutarmi in merito.

In effetti Inbound mi dice correttamente gli ip che si collegano al mio pc , Es. quando accedo con ssh, ftp ecc.. al mio pc

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6643
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Messaggio da targzeta »

Unicondor ha scritto:Perche il comando netstat mostra gli ip "locali" e quelli "foreign", quindi dovrebbe riconoscere il primo ACK_SYN mandato dall'ip e riconoscere quale dei due ip abbia mandato per prima tale segnale...
netstat ti mostra semplicemente lo stato delle connessioni, anche le connessioni in cui sei tu a fare da server dovrebbero comparire con netstat. Quindi a mio avviso il comando che hai postato sopra non ti da solo le connessioni in uscita, ma tutte le connessioni.

Se vuoi monitorare le porte come fa conky dovresti escogitare qualcosa di diverso.

Ad esempio dovresti beccare tutti i sever che hai attivi, quindi scovi le porte su cui ascoltano, e poi vedere quali thread usano quella porta per colloquiare con l'esterno, quelle connessioni sono inbound. Ti mostro la parte l'output di:

Codice: Seleziona tutto

cat /proc/net/tcp
che ci interessa:

Codice: Seleziona tutto

local_address rem_address   st
0100007F:0050 00000000:0000 0A       
0100007F:0050 0100007F:E812 01
0100007F:E812 0100007F:0050 01
0100007F:0050 0100007F:E80B 06
I socket LISTEN hanno '0A' come stato, quindi io ho un server attivo sulla porta '0050' (esadecimale, in decimale sarebbe la '80', il server apache). I socket ESTABLISHED hanno '01' come stato, mentre quelli in TIME_WAIT hanno '06', ha te interessano quelli con '01'. La seconda riga quindi indica che c'è una connessione dall'esterno verso il mio server apache, l'indirizzo esterno è '0100007F:E812', ovvero sono sempre io (ricorda che gli indirizzi sono memorizzati a coppie di numeri in esadecimale da destra verso sinistra, quindi sarebbe 7F000001, ovvero 127.0.0.1) con la porta 'E812' -> '59410'.
Se poi prendi tutte le righe con stato '01' e ci elimini quelle in cui è un tuo server a gestirle, le altre sono tutto connessioni outbound (ovviamente, la 3° riga indica che ho una connessione verso "l'esterno", ovvero il mio server apache).

Questo lavoro va fatto sia con il file /proc/net/tcp, che con quello /proc/net/tcp6, e volendo anche sui file udp, se ti interessa anche quel protocollo.
Oppure usi:

Codice: Seleziona tutto

netstat
estrapolando le informazioni che ti servono.

Questo sarebbe un modo ;),
Spina
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6643
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Usare Nestat per monitorare connessione pc

Messaggio da targzeta »

Ho capito di averti spaventato, quindi eccoti uno script che dovrebbe fare questo:

Codice: Seleziona tutto

#!/bin/bash
casa=$(netstat -nlt | sed -n '/^tcp/{s/.*:\([[:digit:]]\+\)[[:space:]]\+.*/\1/;p;}')

netstat -nt | awk  -v casa=" $casa " 'BEGIN{inbound=outbound=""; in_cont=out_cont=0; gsub("\n"," ",casa)}\
                                     /ES/{riga=$0; sub(".*:","",$4);\
                                          if ( match(casa," " $4 " ") ) {inbound=inbound "\n" riga; in_cont++}\
                                          else {outbound=outbound "\n" riga; out_cont++}}\
                                     END{print "INBOUND (" in_cont "):" inbound "\n\nOUTBOUND (" out_cont "):" outbound}'
Ovviamente l'output non è il massimo, ma sono sicuro che saprai migliorarlo,
Spina
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Unicondor
Linux 1.x
Linux 1.x
Messaggi: 147
Iscritto il: mar 30 nov 2004, 0:00
Slackware: 13.1
Kernel: 2.6.37.6
Località: Potenza
Contatta:

Re: Usare Nestat per monitorare connessione pc

Messaggio da Unicondor »

In effetti mi ero spaventato :?

Ora provo il tuo script...

comunque stamattina stavo pensando, come faccio a riconoscere le connessioni in entrata al mio pc?? ed ho pensato che le connessioni in entrata al mio pc hanno una porta in Local-Address sempre inferiore a 1024 , mentre quelle in uscita sono sempre maggiori di 36000 e qualcosa.
Giusto Spina? correggimi se sbaglio..

Per tale motivo avevo pensato a qualcosa del genere

Codice: Seleziona tutto

netstat -tn | awk '{print $4}' | grep : | cut -d: -f2 | awk '($1<1024)' 
in poche parole, delle connessioni in entrata al mio pc mi stampo solo la porta di quelle Attive-Established con protocollo tcp tcp ( parametro -t), ora sto vedendo in comando "cut" per farmi stampare sia il ip che la porta..ma per ora sono riuscito a stampare solo -f2 ( cioe la stringa a destra dei : ).
L'ultimo Awk mi serve per controllare che la porta sia inferiore a 1024 e quindi è una connessione in entrata al mio pc
Sai darmi qualche suggerimento su come stampare entrambi ( cioeè sia la porta che ip della connessione in entrata)???

comunque ora provo anche il tuo script...magari il tuo funziona meglio :D

Ti ringrazio per tutto l'aiuto che mi stai dando :D

Flavio

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6643
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Usare Nestat per monitorare connessione pc

Messaggio da targzeta »

Unicondor ha scritto:In effetti mi ero spaventato :?

Ora provo il tuo script...

comunque stamattina stavo pensando, come faccio a riconoscere le connessioni in entrata al mio pc?? ed ho pensato che le connessioni in entrata al mio pc hanno una porta in Local-Address sempre inferiore a 1024 , mentre quelle in uscita sono sempre maggiori di 36000 e qualcosa.
Questo era quello a cui avevo pensato anche io, però c'è il problema dei server che girano su porte più grandi. Le porte basse (ora non ricordo se effettivamente siano al più 1024) sono riservate a server di sistema, ma nessuno ti impedisce di aprirti un tuo server apache sulla porta 8080. Il mio script becca le porte su cui sono attivi i server e quindi controlla chi si è connesso a quella porta. O meglio, dovrebbe :)
Unicondor ha scritto: Sai darmi qualche suggerimento su come stampare entrambi ( cioeè sia la porta che ip della connessione in entrata)???

comunque ora provo anche il tuo script...magari il tuo funziona meglio :D
Si, magari guarda lo script forse ti risponde direttamente lui :).

Spina
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Unicondor
Linux 1.x
Linux 1.x
Messaggi: 147
Iscritto il: mar 30 nov 2004, 0:00
Slackware: 13.1
Kernel: 2.6.37.6
Località: Potenza
Contatta:

Re: Usare Nestat per monitorare connessione pc

Messaggio da Unicondor »

Questo era quello a cui avevo pensato anche io, però c'è il problema dei server che girano su porte più grandi. Le porte basse (ora non ricordo se effettivamente siano al più 1024) sono riservate a server di sistema, ma nessuno ti impedisce di aprirti un tuo server apache sulla porta 8080. Il mio script becca le porte su cui sono attivi i server e quindi controlla chi si è connesso a quella porta. O meglio, dovrebbe :)
Vero non ci avevo pensato a questa cosa...infatti io ,per esempio, faccio girare sshd su un altra porta ( superiore a 1024).

Ho provato il tuo script e funziona a meraviglia =D> =D>

Ora non mi resta altro che studiare la seconda parte del tuo script, e vedere i vari comandi che hai usato per estrapolarti le varie info...

TI irngrazio ancora una volta e nel caso avessi problemi di "interpretazione" del codice aspettati alcune domande :lol: :lol:

grazie ancora

Flavio

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6643
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Usare Nestat per monitorare connessione pc

Messaggio da targzeta »

Unicondor ha scritto:TI irngrazio ancora una volta e nel caso avessi problemi di "interpretazione" del codice aspettati alcune domande :lol: :lol:
Io sono già sorpreso che funzioni :), comunque chiedi pure senza problemi.

Spina

P.S. Sono sicuro che lo avrai notato, ma io l'ho fatto solo per le connessioni tcp, se vuoi puoi estenderlo anche per le connessioni udp aggiungengo anche '-u' ad entrambi i netstat.
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Rispondi