Puncte:1

Extragerea datelor aplicației TCP din fișierul pcap

drapel us

Având în vedere a .pcap (sau similar), aș dori să selectez o conexiune TCP și să arunc ambele fluxuri de date ale aplicației (cel din celălalt egal și celălalt Două celălalt peer) în două fișiere separate de pe disc.

Să presupunem că am un .pcap fișier care, printre altele, știu că conține un flux TCP complet (de la SYN la final FIN+ACK/RST) al unei conexiuni HTTP/1.1 text simplu. Aș dori să am două fișiere rezultate cu conținut. ie. un fișier are

GET / HTTP/1.1\r\n
gazdă: foobar.com\r\n
\r\n

iar celălalt dosar are

HTTP/1.1 200 ok\r\n
lungimea conținutului: ...\r\n
... \r\n
\r\n
<html>...</html>

Și vreau ca acesta să fie exact traficul de date aplicației care ar fi fost văzut/trimis în spațiul utilizatorului (de la citit/scrie/trimite/recv`/...). Ceea ce vreau să fac cu asta este să arunc ceva trafic și să-l folosesc pentru a-mi testa analizatorii pentru un anumit protocol de rețea. Analizatorul ar trebui să fie capabil să citească unul dintre acele fișiere și să încerce să analizeze fluxul de date.


Cum ar putea arăta un astfel de instrument de linie de comandă? Nu sunt sigur dacă acest lucru este foarte util, dar m-am gândit că ar putea clarifica ceea ce caut dacă aș da și un exemplu de utilizare a unui instrument imaginar care poate face acest lucru. Să numim instrumentul imaginar (acesta este ceea ce caut) tcp-stream-extract. Aș vrea să-l numesc cu ceva de genul

### exemplu de utilizare imaginară a instrumentului pe care aș dori să-l găsesc :)

# dump de la 12345 la 23456
tcp-stream-extract \
    -i my-captured-packets.pcap
    -s 127.0.0.1:12345 \ # adresa sursă 127.0.0.1:12345
    -d 127.0.0.1:23456 \ # adresa de destinație 127.0.0.1:23456
    -t '2021-01-28 09:12:00Z' \ # conexiunea TCP era în viață la acel moment
    -w de la-port-12345-la-port-23456

# dump de la 23456 la 12345
tcp-stream-extract \
    -i my-captured-packets.pcap
    -s 127.0.0.1:23456 \ # adresa sursă 127.0.0.1:12345
    -d 127.0.0.1:12345 \ # adresa de destinație 127.0.0.1:23456
    -t '2021-01-28 09:12:00Z' \ # conexiunea TCP era la acel moment
    -w de la-port-23456-la-port-12345
drapel jp
Vrei `tcpflow`
Puncte:1
drapel ru

Dacă trebuie să faceți acest lucru manual, trebuie să eliminați anteturile protocoalelor de încapsulare. Cu toate acestea, există câteva subtilități la ele și poate să nu fie trivial:

  • Ethernet (L2): Antetul Ethernet (14 octeți) poate include sau nu o etichetă 802.1q (în fața Ethertype, adăugând 4 octeți; 0x0800=IPv4, 0x86dd=IPv6, 0x8100=802.1q) și sarcina utilă Ethernet poate fi urmărită sau nu de FCS (4 octeți).
  • IP (L3): un antet IPv4 de bază are 20 de octeți, IPv6 utilizează 40 de octeți. Fiecare are opțiuni sau extensii - verificați DIH câmp pentru IPv4 (5 = fără opțiuni) sau Următorul antet câmp pentru IPv6 (6 indică TCP, fără extensie). Orice pachet poate fi fragmentat în mai multe cadre L2 (IPv4: MF este setat sau Fragment Offset>0; IPv6 folosește antetul extensiei 44). Fiecare prim fragment include anteturi L4, fragmentele ulterioare nu.
  • TCP (L4): antetul segmentului TCP de bază are 20 de octeți, dar poate include și opțiuni (Compensarea datelor>5). TCP recurge la segmente livrate necomandate (de Număr de secvență), așa că ar putea fi necesar să stocați o parte considerabilă a datelor. Segmentele pot ajunge și în dublu exemplar.

Recomand să folosiți un instrument adecvat, cum ar fi tcpflow, așa cum a sugerat @AlexD.

drapel us
Mulțumesc, `tcpflow` este exact ceea ce căutam! Da, declanșarea antetelor diferitelor protocoale este un lucru, cea mai descurajantă sarcină ar fi fost gestionarea livrării în afara comenzii și re-livrarea pachetelor.
Zac67 avatar
drapel ru
@JohannesWeiss Oh, da, am uitat de asta!

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.