Întrebarea este # 5 376 ... stale! Este necesar să se scrie o aparență a unui sniffer, programul trebuie să fie pasiv ... (lucrați cu

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.

  1. utilizări
  2. .
  3. const
  4. sHEADER = '[TIME] [Prot Plen] [Sursa IP: Port] [Destinație IP: Port] [Service] [Dlen] [Pachet] [Date]';
  5. sPl = "% -12s% -4s% 4d% -20s>% -20s% -12s% 4d% s ';
  6. tip
  7. TForm1 = clasa (TForm)
  8. RichEdit1: TRichEdit;
  9. Memo1: TMemo;
  10. Etichetă1: Tabel;
  11. procedura FormCreate (expeditor: TObject);
  12. procedura FormDestroy (expeditor: TObject);
  13. privat
  14. _monRawSocket: TMonitorSocket;
  15. procedura Initialize ();
  16. procedura GetPacket (Expeditor: TObject; PacketInfo: TPacketInfo);
  17. public
  18. se încheie;
  19. var
  20. Form1: TForm1;
  21. punerea în aplicare
  22. procedura TForm1.FormCreate (expeditor: TObject);
  23. începe
  24. Inițializați ();
  25. Memo1.Lines.Clear;
  26. Memo1.Lines.Add (LocalIpList [0]);
  27. se încheie;
  28. procedura TForm1.FormDestroy (expeditor: TObject);
  29. începe
  30. _monRawSocket.Free;
  31. se încheie;
  32. procedura TForm1.Initialize;
  33. începe
  34. _monRawSocket: = TMonitorSocket.Create (auto);
  35. _monRawSocket.OnPacketEvent: = GetPacket;
  36. _monRawSocket.StartMonitor;
  37. RichEdit1.Lines.Clear;
  38. RichEdit1.SelAttributes.Color: = ClMaroon;
  39. RichEdit1.Lines.Add (sHEADER);
  40. se încheie;
  41. procedura TForm1.GetPacket (Expeditor: TObject; PacketInfo: TPacketInfo);
  42. var
  43. _srcIP, _distIP. string;
  44. _a, _b: șir;
  45. începe
  46. SetLength (PacketInfo.DataBuf, 96);
  47. _b: = PacketInfo.DataBuf;
  48. StringRemCntls (_b);
  49. dacă PacketInfo.EtherProto = PROTO_IP atunci
  50. începe
  51. _srcIp: = IPToStr (PacketInfo.AddrSrc) + ':' + IntToStr (PacketInfo.PortSrc);
  52. _distip: = IPToStr (PacketInfo.AddrDest) + ':' + IntToStr (PacketInfo.PortDest);
  53. dacă PacketInfo.ProtoType = IPPROTO_ICMP atunci
  54. _a: = Format (sPL,
  55. [TimeToZStr (PacketInfo.PacketDT),
  56. GetIPProtoName (PacketInfo.ProtoType),
  57. Spl,
  58. _srcIp,
  59. _distIp,
  60. cu litere mici (GetICMPType (PacketInfo.IcmpType)),
  61. PacketInfo.DataLen, _b])
  62. altfel
  63. începe
  64. dacă (PacketInfo.DataLen = 0) atunci
  65. _b: = GetFlags (PacketInfo.TcpFlags);
  66. _a: = Format (sPL,
  67. [TimeToZStr (PacketInfo.PacketDT),
  68. GetIPProtoName (PacketInfo.ProtoType),
  69. PacketInfo.PacketLen,
  70. _srcIp,
  71. _distIp,
  72. Minuscule (GetServiceNameEx (PacketInfo.PortSrc, PacketInfo.PortDest)),
  73. PacketInfo.DataLen, _b]);
  74. se încheie;
  75. capăt
  76. altfel
  77. începe
  78. _a: = Format (sPL,
  79. [TimeToZStr (PacketInfo.PacketDT),
  80. GetEtherProtoName (PacketInfo.EtherProto),
  81. PacketInfo.PacketLen,
  82. MacToStr (PacketInfo.EtherSrc),
  83. MacToStr (PacketInfo.EtherDest),
  84. „“
  85. PacketInfo.DataLen,
  86. _B]);
  87. se încheie;
  88. RichEdit1.Lines.Add (_a);
  89. 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.