Autore Topic: sniffare ed analizzare i pacchetti tcp in arrivo su una data porta  (Letto 391 volte)

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Salve a tutti.
Ho una applicazione che codifica dei dati (audio) e li invia ad un altro pc su una specifica porta (la 9000 per esempio).

Sull'altro PC un'altra applicazione prende i dati e li gestisce in un certo modo.
Non posso mettere mano alla seconda applicazione, ma posso intercettare i pacchetti cosi':
Codice: [Seleziona]
sudo tcpdump -i any -v -n dst port 9000

Pero' ho solo delle informazioni di massima, volendo analizzare il CONTENUTO dei pacchetti dovrei fare una cosa cosi':
Codice: [Seleziona]
sudo tcpdump -i any -v -n dst port 9000 -w capture.cap

che pero' a lungo andare mi crea un file gigantesco.

Secondo voi posso fare un file FIFO e con una applicazione Gambas andare ad analizzare questo file?

Oppure esiste la possibilita' di gestire lo sniffing della rete direttamente dai componenti gambas?

potrei anche fare cosi':
Codice: [Seleziona]
'dati DENTRO il pacchetto in partenza verso la porta 9000:
sudo tcpdump -i any  -x -s 0 'dst port 9000'

'oppure per quelli in arrivo alla porta 9000:
sudo tcpdump -i any  -x -s 0 'src port 9000'
« Ultima modifica: 06 Dicembre 2017, 18:37:57 da allegfede »
se corri, morirai stanco (motto degli sniper)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.114
  • Tonno verde
    • Mostra profilo
Re:sniffare ed analizzare i pacchetti tcp in arrivo su una data porta
« Risposta #1 il: 06 Dicembre 2017, 19:48:11 »
Per me hai parlato arabo, comunque ti indico questa pagina della wiki di Gambas su gb.net

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Arco

  • Gambero
  • **
  • Post: 91
    • Mostra profilo
Re:sniffare ed analizzare i pacchetti tcp in arrivo su una data porta
« Risposta #2 il: 07 Dicembre 2017, 08:33:05 »
Premesso che ho un'infarinatura molto di base sulla rete.
Devi analizzare tutto il traffico di rete o solo un determinato tipo di pacchetto/dati?
Se devi analizzare solo determinati dati non puoi inviare i dati, tramite pipe, ad un altro programma per scremarli prima di salvarli. Accorci il file notevolmente.

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:sniffare ed analizzare i pacchetti tcp in arrivo su una data porta
« Risposta #3 il: 07 Dicembre 2017, 17:47:40 »
in soldoni, ho l'encoder su una macchina remota (codifica dati aac) e li incapsula in pacchetti TCP formattati ZMQ (http://zeromq.org/)

su un'altra macchina, questi vengono ricevuti (sono 10 - 15 flussi, sulle porte 9000 - 9015) ed accorpati (multiplexer).

Ora vorrei poter analizzare i pacchetti (se non ne arrivano genero un allarme) ed i dati nei pacchetti (per poter vedere un eventuale segnale in arrivo, ma senza modulazione, nel caso altro allarme).

.... quindi vorrei avere un loop che prende il pacchetto per la data porta, ne estrae il contenuto ed analizza il volume, lo butta e cosi' via ....

inoltre da quello che mi dice lo sviluppatore del multiplexer, i dati nei pacchetti sono organizzati cosi':

Codice: [Seleziona]
struct zmq_frame_header_t
{
    uint16_t version; // we support version=1 now
    uint16_t encoder; // see ZMQ_ENCODER_XYZ

    /* length of the 'data' field */
    uint32_t datasize;

    /* Audio level, peak, linear PCM */
    int16_t audiolevel_left;
    int16_t audiolevel_right;

    /* Data follows this header */
} __attribute__ ((packed));

quindi l'header di ogni pacchetto zmq e' composto da_
intero unsigned a 16 bit = versione
intero unsigned a 16 bit = nome encoder
intero unsigned a 32 bit = dati veri e propri (audio codificato suppongo)
intero a 16 bit = volume sinistro
intero a 16 bit = volume destro
« Ultima modifica: 07 Dicembre 2017, 18:06:10 da allegfede »
se corri, morirai stanco (motto degli sniper)

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:sniffare ed analizzare i pacchetti tcp in arrivo su una data porta
« Risposta #4 il: 07 Dicembre 2017, 18:39:40 »
dando un'occhiata a questa pagina, ho avuto degli spunti interessanti ed effettivamente ci potremmo anceh essere:
http://captainbodgit.blogspot.it/2016/08/using-sockets-with-gambas.html

Vi allego il codice di una piccola applicazione di controllo:
Codice: [Seleziona]
' Gambas class file



Public Sub Button_StartSocket_Click()

  ServerSocket1.Listen(1)
 
  If ServerSocket1.Status = Net.Active Then
    Button_StartSocket.Enabled = False
    Button_Stop.Enabled = True
    Debug "Listening on Port: " & ServerSocket1.Port
   
    'ed ora faccio partire il timer dell'allarme
    Timer_alarm.Enabled = True 
  End If

End


Public Sub Button_Stop_Click()

  ServerSocket1.Close
  Timer_alarm.Enabled = False
 
  Button_Stop.Enabled = False
  Button_StartSocket.Enabled = True

End

Public Sub Form_Open()

  ServerSocket1.Port = "9000"

End

Public Sub ServerSocket1_Connection(RemoteHostIP As String)

  Debug "connected to " & RemoteHostIP
 
  'e resetto il timer perche' ho ricevuto qualcosa
  Timer_alarm.Restart

End

Public Sub ServerSocket1_Error()

  Debug ServerSocket1.Error

End

Public Sub Timer_alarm_Timer()

  Debug "allarme"

End

il dubbio e' se una volta "ascoltati" dalla mia applicazione, gli stessi dati siano acnora disponibili al programma GIUSTO (ovvero il multiplexer che dovrebbe accorparli) ....


PS: Per la cronaca .... mi da allarme se non lancio l'encoder, mi dice "connesso" se lancio l'encoder ... ma ora COME LEGGO I DATI in ingresso che lui "ascolta"?
« Ultima modifica: 07 Dicembre 2017, 18:49:10 da allegfede »
se corri, morirai stanco (motto degli sniper)