Salutări, dragi experți!
Este necesar să scrieți o aparență a unui sniffer, programul trebuie să asculte în mod pasiv un anumit port (este cunoscut în prealabil, nu este necesar să se monitorizeze unde este conectat progul), să fie cât mai simplu posibil și să nu se închidă. Nu trebuie să țină nimic. Cu ajutorul sniffer-ului, s-a primit informația că programul monitorizat comunică cu serverul folosind HTTP și UDP, este necesar să se captureze atât acest lucru cât și faptul că acesta.
Cum este mai ușor să implementăm acest lucru în Delphi?
Vă mulțumim pentru ajutor.
Che pentru sistemul moronului? A trebuit să creez un ac pentru a răspunde propriei mele întrebări.
Tipul este de așteptat ca, dacă o persoană a pus o întrebare, el însuși nu găsește soluția însuși.
Ei bine, ești amuzant.
- utilizări
- .
- const
- sHEADER = '[TIME] [Prot Plen] [Sursa IP: Port] [Destinație IP: Port] [Service] [Dlen] [Pachet] [Date]';
- sPl = "% -12s% -4s% 4d% -20s>% -20s% -12s% 4d% s ';
- tip
- TForm1 = clasa (TForm)
- RichEdit1: TRichEdit;
- Memo1: TMemo;
- Etichetă1: Tabel;
- procedura FormCreate (expeditor: TObject);
- procedura FormDestroy (expeditor: TObject);
- privat
- _monRawSocket: TMonitorSocket;
- procedura Initialize ();
- procedura GetPacket (Expeditor: TObject; PacketInfo: TPacketInfo);
- public
- se încheie;
- var
- Form1: TForm1;
- punerea în aplicare
- procedura TForm1.FormCreate (expeditor: TObject);
- începe
- Inițializați ();
- Memo1.Lines.Clear;
- Memo1.Lines.Add (LocalIpList [0]);
- se încheie;
- procedura TForm1.FormDestroy (expeditor: TObject);
- începe
- _monRawSocket.Free;
- se încheie;
- procedura TForm1.Initialize;
- începe
- _monRawSocket: = TMonitorSocket.Create (auto);
- _monRawSocket.OnPacketEvent: = GetPacket;
- _monRawSocket.StartMonitor;
- RichEdit1.Lines.Clear;
- RichEdit1.SelAttributes.Color: = ClMaroon;
- RichEdit1.Lines.Add (sHEADER);
- se încheie;
- procedura TForm1.GetPacket (Expeditor: TObject; PacketInfo: TPacketInfo);
- var
- _srcIP, _distIP. string;
- _a, _b: șir;
- începe
- SetLength (PacketInfo.DataBuf, 96);
- _b: = PacketInfo.DataBuf;
- StringRemCntls (_b);
- dacă PacketInfo.EtherProto = PROTO_IP atunci
- începe
- _srcIp: = IPToStr (PacketInfo.AddrSrc) + ':' + IntToStr (PacketInfo.PortSrc);
- _distip: = IPToStr (PacketInfo.AddrDest) + ':' + IntToStr (PacketInfo.PortDest);
- dacă PacketInfo.ProtoType = IPPROTO_ICMP atunci
- _a: = Format (sPL,
- [TimeToZStr (PacketInfo.PacketDT),
- GetIPProtoName (PacketInfo.ProtoType),
- Spl,
- _srcIp,
- _distIp,
- cu litere mici (GetICMPType (PacketInfo.IcmpType)),
- PacketInfo.DataLen, _b])
- altfel
- începe
- dacă (PacketInfo.DataLen = 0) atunci
- _b: = GetFlags (PacketInfo.TcpFlags);
- _a: = Format (sPL,
- [TimeToZStr (PacketInfo.PacketDT),
- GetIPProtoName (PacketInfo.ProtoType),
- PacketInfo.PacketLen,
- _srcIp,
- _distIp,
- Minuscule (GetServiceNameEx (PacketInfo.PortSrc, PacketInfo.PortDest)),
- PacketInfo.DataLen, _b]);
- se încheie;
- capăt
- altfel
- începe
- _a: = Format (sPL,
- [TimeToZStr (PacketInfo.PacketDT),
- GetEtherProtoName (PacketInfo.EtherProto),
- PacketInfo.PacketLen,
- MacToStr (PacketInfo.EtherSrc),
- MacToStr (PacketInfo.EtherDest),
- „“
- PacketInfo.DataLen,
- _B]);
- se încheie;
- RichEdit1.Lines.Add (_a);
- se încheie;
Forum cu mini-întrebări
Răspunde cineva.
Cereți-i lui InDy să folosească, WinPCap ca ceva de fixat sau alte variante?
CREDINȚELE ÎN CIVILIZAȚIA EXTERNĂ NU SUNT SĂ FIE SĂ CREDEȚI ÎN INORTERANI.
indy nu ajută. (cu excepția cazului în care vă scrieți propriul proxy).
Dacă trebuie doar să monitorizați traficul - este mai bine să descărcați Wireshark pentru dvs. - va dezmembra totul și îl va pune pe rafturi.
Bifarea "dovada citirii" este un rău universal.
Nu, exact asta am nevoie în programul meu, Wireshark am.
De asemenea, există VoicedSniffer, care se face pe Delphi și nu aș spune că acesta se blochează. Driverul WinPCap nu este instalat, dar funcționează așa.
CREDINȚELE ÎN CIVILIZAȚIA EXTERNĂ NU SUNT SĂ FIE SĂ CREDEȚI ÎN INORTERANI.
Dar india este așa cum este. Pune ieri pe formularul tuturor componentelor care au de-a face cu UDP, HTTP, TCP, nici unul, nici bitul nu a acceptat. Se pare că trebuie să te misti cu vinpikapom.
CREDINȚELE ÎN CIVILIZAȚIA EXTERNĂ NU SUNT SĂ FIE SĂ CREDEȚI ÎN INORTERANI.
După ce am stat pe Internet câteva zile, am decis că fără vinpicapa mă voi ocupa. Eliberați codul, deodată vine la îndemână pentru cineva. Dacă aveți multe adaptoare în sistem, sortați-le singuri. Sniffer simplu ca trei copeici, excepții nu am procesat. Dacă aveți nevoie să răspundeți (programat natural) evenimentelor din aplicația server client, pur și simplu adăugați o limită IP pentru a primi date numai de la serverul dorit.
CREDINȚELE ÎN CIVILIZAȚIA EXTERNĂ NU SUNT SĂ FIE SĂ CREDEȚI ÎN INORTERANI.
Da, apropo, aproape că am uitat să explic la începutul X-menilor că, pentru ca codul să funcționeze, trebuie să adăugați următoarele în secțiunea Utilize:
Monsock, WSocket, Packet32, Winsock, Magsubs1, Packhdrs
De fapt, fișierele pe care le căutați pe internet aruncă în dosarul cu proiectul, vom arunca sub forma unei note și richedit, și transmite un viitor luminos
CREDINȚELE ÎN CIVILIZAȚIA EXTERNĂ NU SUNT SĂ FIE SĂ CREDEȚI ÎN INORTERANI.
Și totuși, a ieșit simplu și nu înghețase.
CREDINȚELE ÎN CIVILIZAȚIA EXTERNĂ NU SUNT SĂ FIE SĂ CREDEȚI ÎN INORTERANI.
se încheie;
Ei bine, acum întreaga bază de date este acolo, atunci ne gândim la noi înșine.
CREDINȚELE ÎN CIVILIZAȚIA EXTERNĂ NU SUNT SĂ FIE SĂ CREDEȚI ÎN INORTERANI.