View Full Version : Programma Monitoraggio Banda O_o'
Rubberick
09-03-2005, 18:36
Chiedo qui e non in programmi & utility perke' e' una cosa + tecnica... anche perke' se non trovo un programma sta cosa me la dovrei buildare io a mano...
ho un server su win2kpro, si tratta di un server casalingo... ci ho istallato su il simpatico programma NetLimiter... che permette oltre a limitare la banda anche di visualizzare statistiche in termini di banda in upload e download giornaliera, mensile, annuale, etc..
il mio problema e' che io avrei bisogno di elaborare tali valori di banda per le singole applicazioni... il programma permette di fare un export in html dei dati, ma non permette un'automatizzazione dell'operazione...
io avrei bisogno invece di avere un txt sempre aggiornato con i vari valori per fare delle elaborazioni in tempo reale su pagine php...
Come posso fare? Esiste un programma come il NetLimiter ma un attimino + complesso?
Del resto mi serve solo un programma che mi faccia un dump periodico della banda utilizzata per ogni singola applicazione
Ma NetLimiter controlla già quanta banda è utilizzata da ogni applicazione ?
si ma non ci permette di farlo da remoto; quello che vogliamo realizzare è un pannello in php che ci permetta di controllare costantemente lo stato del server da remoto; non possiamo usare programmi di accesso remoto (che cmq già usiamo x altri scopi) perché il pannello deve essere accessibile anche ad altre persone.
ho provato a cercare qualche libreria che mi permetta di effettuare uno sniffing dei pacchetti in entrata e uscita, ma non ho trovato un bel nulla; le WinPCap ad es. andrebbero benissimo se mi permettessero di fare la distinzione tra il traffico di un'applicazione e l'altra, ma da quanto ho capito non si può.
Infatti...è per quello che ti chiedevo se lo faceva...perchè non è una cosa banale... Dovresti cercare un qualche metodo che ti permetta di risalire a partire dall'applicazione agli handle relativi ai socket aperti o vicevarsa...
Un po' come fa questa utility: http://www.sysinternals.com/ntw2k/source/tcpview.shtml
Rubberick
10-03-2005, 16:15
Avevamo visto se era possibile rubare dai file di salvataggio del netlimiter i valori... visto che lui li salva periodicamente da qualche parte... sniffando i file in lettura e scrittura abbiamo trovato una bella directory con tanti bei files .dat (una per ogni processo monitorato dal momento dell'istallazione del netlimiter) tali files non sono scritti in chiaro pare :\ altrimenti i dati li prendevamo direttamente da li...
Originariamente inviato da cionci
Infatti...è per quello che ti chiedevo se lo faceva...perchè non è una cosa banale... Dovresti cercare un qualche metodo che ti permetta di risalire a partire dall'applicazione agli handle relativi ai socket aperti o vicevarsa...
Un po' come fa questa utility: http://www.sysinternals.com/ntw2k/source/tcpview.shtml
hmmmmmmmm... IP Helper API... vediamo 1 po'... ma mi sa che non porta a nulla; il metodo che (suppongo) usi quel programma non è abbastanza efficace (funziona solo coi sockets; esclude ad esempio tutte le comunicazioni RPC); l'unico valido sistema sarebbe di realizzare un network driver, cosa che a) non so fare b) potrei documentarmi e farla ma ci vorrebbe troppo tempo c) esiste di sicuro un driver già fatto fornito assieme a delle librerie apposite, ma vai a trovare il tutto...
be', però ora che ci penso a noi interessano solo le comunicazioni tcp/ip, giusto rubbe? un programma come quello che c'è su sysinternals sarebbe sufficiente x te?
Però di quello non c'è il sorgente...
C'è un sorgente, ma non rileva il nome dell'applicazione che usa una determinata porta...
Rubberick
10-03-2005, 18:45
Che casino... come fare?? Ma tu sei sicuro che non e' possibile analizzare il contenuto dei files .dat?? :\
Ah no...invece lo rileva... Allora perchè dice: . "Note, however, that netstatp doesn't show process names on NT 4 and Win2K like TCPView and TCPVCon."
Originariamente inviato da Rubberick
Che casino... come fare?? Ma tu sei sicuro che non e' possibile analizzare il contenuto dei files .dat?? :\
In teoria sì...in pratica è un casino... Supponendo di riuscire facilmente a trovare il formato del file, prima di tutto il problema è di sincronizzazione con NetLimiter, visto che c'è il rischio di rilevare dati inconsistenti...e poi non sai come NetLimiter accede ai file (se trova un file bloccato, cosa fa ? Da un errore o aspetta ?)...
rubberick, spero che NetStat ti vada bene, perché altrimenti guarda qua (http://www.ndis.com/papers/winpktfilter.htm) in che razza di ginepraio che dovrei cacciarmi... (ovviamente questa frase non significa che a mali estremi potrei decidere di cacciarmici, significa solo che a mali estremi non avrai il tuo programma :D)
Originariamente inviato da cionci
In teoria sì...in pratica è un casino... Supponendo di riuscire facilmente a trovare il formato del file, prima di tutto il problema è di sincronizzazione con NetLimiter, visto che c'è il rischio di rilevare dati inconsistenti...e poi non sai come NetLimiter accede ai file (se trova un file bloccato, cosa fa ? Da un errore o aspetta ?)...
quest'ultimo non è affatto un problema: in Win32 basta aprire il file senza bloccarlo, cioè impostando al max i permessi di condivisione (vedere documentazione di CreateFile); il problema è che io detesto il reverse engineering...
Originariamente inviato da 71104
quest'ultimo non è affatto un problema: in Win32 basta aprire il file senza bloccarlo, cioè impostando al max i permessi di condivisione (vedere documentazione di CreateFile); il problema è che io detesto il reverse engineering...
Peccato che se lo apri senza bloccarlo potresti avere problemi di consistenza sui dati...
Originariamente inviato da cionci
Peccato che se lo apri senza bloccarlo potresti avere problemi di consistenza sui dati...
manco per niente! una volta ottenuto il mio buffer di memoria relativo a quel file io ho la mia copia, e NetLimiter la sua. ribadisco: è sufficiente chiamare CreateFile senza nessuna restrizione di condivisione; dopodiché le altre applicazioni col file ci possono fare quello che gli pare; forse l'unica cosa che potrebbe dare problemi al mio programma sarebbe la cancellazione/spostamento del file (anche se non ne sono sicuro, forse non darebbe problemi neanche quella), ma tanto tutto questo è un castello costruito in aria perché io non andrò MAI a fare un reverse engineering sul NetLimiter!
tutto quello che mi serve sono delle librerie già pronte e documentate tipo le winpcap, che mi permettano però anche di fare la distinzione tra un procio e l'altro! possibile che non esistano, o che nessuno le conosca??? :cry:
ah be', dimenticavo le IP Helper; e vabbè si, al limite userò quelle.
Rubberick
10-03-2005, 20:20
Oppure aspettare quando si degnano quelli del NetLimiter a fare una nuova versione decente :\ ma questo e' un'altro paio di maniche :(
Originariamente inviato da 71104
manco per niente! una volta ottenuto il mio buffer di memoria relativo a quel file io ho la mia copia,
Appunto, ma il buffer chi lo va a leggere/scrivere dal disco ?
CreateFile, che domanda...
Scusate ma non vi sono sufficenti le notizie pervenute da netstat,
Se vi sono sufficenti vi basta reidirizzare lo stdout del netstat su di un qualsiasi file per poi leggerlo con il php....
Ciao
No, lui vuole sapere la banda utilizzata da ogni applicazione...
Originariamente inviato da 71104
CreateFile, che domanda...
Appunto...pensa a CreateFile che legge in contemporanea con una scrittura anche parziale sul file...
Altrimenti per sniffare la rete esiste Ethereal che usa le librerie pwincup ed è disponibile anche il codice sorgente
Ciao!!
Originariamente inviato da cionci
Appunto...pensa a CreateFile che legge in contemporanea con una scrittura anche parziale sul file...
-.-'
Originariamente inviato da tglman
Altrimenti per sniffare la rete esiste Ethereal che usa le librerie pwincup ed è disponibile anche il codice sorgente
Ciao!!
-.-'
Inizio col dire che il mio parere è quello che voi dovreste costuire dei softwere su misura anche se ci vuole troppo tempo, etheral fornisce un numero elevato di informazioni che possono essere molto utili. e avendo il codice sorgente (etheral è open source)
potete lavorarci un po sopra per avere esattamente cio che vi serve.
Ciao..
uffaaaa, ethereal si basa sulle winpcap, che non vanno bene x i nostri scopi; ringrazio tutti per i loro interventi, ma ricordo a tutti (pur non essendo moderatore) che in genere su un forum per postare bisogna prima leggere o almeno scorrere velocemente quello che è già stato scritto, altrimenti (come sta succedendo ora) bisogna ripetere 3 volte le stesse cose. :(
e dimenticavo: giusto per chiarezza, le winpcap non vanno bene perché non permettono di distinguere il traffico di un processo da quello di un altro.
bene: e ora gli headers delle IP Helper API dove li trovo? :( :mad:
il processo si puo identificare dal numero di porta della connessione, tutti i processi server anno uno o più numeri di porte, ad esempio 80 http, e non si può mettere in listen la stessa porta due volte, quindi basta controllare il traffico sulle porte di un processo per sapere la banda.
Esempio:
dal netstat si possono ricavare informazioni rigardo i binomio porta-processo(su winxp), e dall winpcap si possono ricavare le informazioni riguardo il binomio porta-banda
mettendo insieme queste due informazioni riesci ad avere il binomio proceso-banda.
Rubberick
11-03-2005, 17:14
forse non e' una cattiva idea... ma per programmi che non nascono con collegamenti a porte aperte?? o che le aprono randomicamente al momento? risulta un po' complesso...
e' comunque una soluzione... seppur limitata... vediamo se si puo' trovare un'altra via altrimenti ricorreremo a questa grazie ;)
A me il sorgente di Sysinternals l'ha compilato con Visual Studio...
Originariamente inviato da tglman
il processo si puo identificare dal numero di porta della connessione, tutti i processi server anno uno o più numeri di porte, ad esempio 80 http, e non si può mettere in listen la stessa porta due volte, quindi basta controllare il traffico sulle porte di un processo per sapere la banda.
Esempio:
dal netstat si possono ricavare informazioni rigardo i binomio porta-processo(su winxp), e dall winpcap si possono ricavare le informazioni riguardo il binomio porta-banda
mettendo insieme queste due informazioni riesci ad avere il binomio proceso-banda.
no scusa, qui mi sa che stiamo confondendo qualcosa; allora, io ho un numero di porta; come faccio da un numero a ricavare l'handle (o quantomeno il PID) del processo (sempre che esista) che sta ascoltando su quella porta?
e poi scusa, se invece non si tratta di un processo server? come faccio a ricavare il pid di un programma che si connette verso l'esterno?
e ancora una volta ricordo che non tutti i programmi usano i sockets...
il problema fondamentalmente è il seguente: diciamoci la verità quello che ci vorrebbe è un bel driver, da solo risolverebbe ogni problema, ma non abbiamo la possibilità di farlo, quindi la domanda si traduce in: COME FARE PER INTERCETTARE IL TRAFFICO DI RETE DI CIASCUN SINGOLO PROCESSO OPERANDO ESCLUSIVAMENTE IN USER MODE???
(la mia risposta: non si può...)
Rubberick
11-03-2005, 21:16
bel casino davvero... ma quello che mi chiedo io... il netlimiter usa un driver?? a me pare di no! infatti lo installi e da subito lo puoi avviare e ti visualizza tutto quello che fanno le app... se fosse un driver quanto meno toccherebbe riavviare!
Originariamente inviato da Rubberick
bel casino davvero... ma quello che mi chiedo io... il netlimiter usa un driver?? a me pare di no! infatti lo installi e da subito lo puoi avviare e ti visualizza tutto quello che fanno le app... se fosse un driver quanto meno toccherebbe riavviare!
non necessariamente; so poco sullo sviluppo dei drivers, ma una cosa che so è che possono essere caricati "on system boot" oppure "on demand".
a tal proposito questo (http://www.codeproject.com/system/driverdev.asp) link è molto istruttivo; introduce allo sviluppo di programmi kernel mode e me lo sto leggendo, ma non vuol dire che abbia intenzione di creare un driver.
Capiamo prima come funziona il sistema windows sulle comunicazioni di rete, quando viene installata una rete viene creato automaticamente un dispositivo(cioè un file apribile con createfile) che si occupa del livello fisico della comunicazione, tutti i dati scritti sul dispositivo vengono inviati sulla rete e tutti quelli letti vengono dalla rete, però ricordiamoci che questa specie di file si occupa solo del livello fisico e quindi tutti i protocolli come il tcp devono essere inplementati sopra, tutti i programmi di sniffing leggono da questi dispositivi e rielaborano i dati a seconda del protocollo dato, poi qualche software riassocia anche i dati agli handle e quindi ai processi, e per fare questo non ce bisogno di alcuni nessun driver perchè al di sopra del livello fisico tutte le strutture sono standard.
Infine se si possiede un sistema winxp(solo su xp) il banale programma netstat associa alle connessioni l'id del processo che le sta usando.
Abbiamo il sorgente di un programma simile al netstat ed è nella pagina precedente...per ottenere il binomio applicazione-porta...
Non si può fare un query diretta tramite l'eseguibile di nestat perchè è un procedura molto lenta...
Una volta mi guardai un programma che faceva lo sniffing di tutte le connessioni...funzionava alla perfezione su Windows 98, ma su Windows 2000 mi prendeva solo il traffico in ingresso e non quello in uscita (o viceversa, non mi ricordo)...comunque non faceva uso di un driver... Lo trovai su Planet Source Code...
Rubberick
12-03-2005, 11:51
Intanto... io ho notato che quelli del netlimiter stanno per far uscire la 2.0 e c'e' la 2.0 alpha gia' disponibile con un forum dove discutere con le varie proposte...
non ho perso un'attimo e ho fatto vari post con registrazioni diverse a chiedere tale funzione :P
mi sono presentato una volta come Rubberick, una volta come un certo Antony Marklands ecc... :P
Tale signor Marklands, Network Manager per la ditta Zyfay United che usa nei loro uffici il netlimiter ecc ecc ghgh
Speramo che mo la implementano! :P
E' carino il netlimiter 2 stanno aggiungendo un sacco di cavolate tipo una specie di firewall integrata... e si spera aggiungeranno anche una gestione dinamica della banda in seguito alla priorita' di applicazioni e cose varie :P!
EDIT: Gli ho anche mandato un'email al supporto tecnico chiedendo se tale opzione e' disponibile nella ver 1.3... insomma li sto un attimino bombardando :P
BWUAHWUAHWUAHWUA ma che LOL!!!!!!!!! :D :D :D :D
Antony Marklands... ma come t'è venuto in mente...!!! :D
Originariamente inviato da tglman
Capiamo prima come funziona il sistema windows sulle comunicazioni di rete, quando viene installata una rete viene creato automaticamente un dispositivo(cioè un file apribile con createfile) che si occupa del livello fisico della comunicazione, tutti i dati scritti sul dispositivo vengono inviati sulla rete e tutti quelli letti vengono dalla rete, però ricordiamoci che questa specie di file si occupa solo del livello fisico e quindi tutti i protocolli come il tcp devono essere inplementati sopra, tutti i programmi di sniffing leggono da questi dispositivi e rielaborano i dati a seconda del protocollo dato, poi qualche software riassocia anche i dati agli handle e quindi ai processi, e per fare questo non ce bisogno di alcuni nessun driver perchè al di sopra del livello fisico tutte le strutture sono standard.
Infine se si possiede un sistema winxp(solo su xp) il banale programma netstat associa alle connessioni l'id del processo che le sta usando.
ehm, ma scusa, questo fatto del file dove l'hai saputo? e cmq a noi non serve perché anche se fosse, quello è ancora il kernel mode.
soluzione non ortodossa, poco efficace, ma relativamente semplice: creare una DLL da iniettare in ciascun processo che intercetti tutte le chiamate Winsock; come già detto, semplice da implementare, decisamente poco ortodossa, e poco efficace (anche questa riguarda solo i sockets ed esclude quindi tutte le comunicazioni RPC).
Rubberick
15-03-2005, 19:29
embe? 71 che hai fatto? ti sei fermato?
Se avete qualcosa per collegare applicazione-porta potete a questo punto utilizzare le winpcup se volete creare voi un'applicazione sniffer oppure ethereal che dorebbe consentire di scrivere i dati sniffati in file di testo (non sono sicuro..).
Ciao..
Originariamente inviato da Rubberick
embe? 71 che hai fatto? ti sei fermato?
no, sto sviluppano il resto del programma, senza il monitoraggio della banda, e a proposito, mi devi dire quali sono le modalità di input e output; il mio prog sta sempre in background, dopodiché il modulo PHP che combina? come glielo da l'input e come riceve l'output? stdio? oppure semplicemente il mio prog deve scrivere su un file ogni tot sec e basta? in ogni caso ci dobiamo mettere d'accordo sul formato, del file o di stdio che sia.
Rubberick
16-03-2005, 22:09
su questo ci stavo appunto pensando... ero indeciso se andare a prendermi io a mano i dati da un file txt o se tu potessi sfruttare una cosa tipo un driver ODBC per scrivere la roba su un db mysql...
cosi' avrei gia' i dati senza dover stare li a grabbarli e ordinarli :P
Originariamente inviato da Rubberick
su questo ci stavo appunto pensando... ero indeciso se andare a prendermi io a mano i dati da un file txt o se tu potessi sfruttare una cosa tipo un driver ODBC per scrivere la roba su un db mysql...
BWUAHWUAHWUAHWUAHWUAHWUAHUW COS'E' UNA BATTUTA??? :sofico:
vada per il file txt.
PS: per la cronaca, sviluppare un network driver per me sarebbe molto più semplice che andare a spaccarmi il cranio su database, mysql, e tutto quel pappone che ho sempre odiato.
Rubberick
17-03-2005, 14:34
Mah esistono comodi driver (ODBC) e funzioni scritti apposta dove tu devi solo usare 2 funzioni idiote per connetterti, autenticarti, fare la query e chiudere la connessione...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.