Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Uso .dll di WinPcap
Forum - C# / VB.NET - Uso .dll di WinPcap

Avatar
sem&cery (Normal User)
Newbie


Messaggi: 2
Iscritto: 10/04/2008

Segnala al moderatore
Postato alle 15:45
Giovedė, 10/04/2008
Ciao,
abbiamo un problema!!! :d:d:d:d
vorremmo realizzare uno sniffer utilizzando WinPcap. Sappiamo che la libreria č scritta in C. Come potremmo fare per utilizzarla in C#??????
grazie in anticipo!!!!

PM Quote
Avatar
Dax89 (Member)
Expert


Messaggi: 283
Iscritto: 07/04/2007

Segnala al moderatore
Postato alle 17:18
Giovedė, 10/04/2008
Per usare delle funzioni scritte in C, in .NET esiste il 'Platform Invoke, che permette di utilizzare le funzioni esportate da una DLL.
Questo esempio permette di utilizzare l'API MessageBox che sta nella DLL 'user32.dll'

Codice sorgente - presumibilmente C#

  1. using System;
  2. using System.Runtime.InteropServices;
  3.  
  4. namespace PInvoke
  5. {
  6.    class MainClass
  7.    {
  8.      [DllImport("user32.dll", EntryPoint = "MessageBoxA")]
  9.      public static extern int MessageBox(IntPtr hWnd, string text, string caption, int style);
  10.  
  11.       public static void Main()
  12.       {
  13.          MessageBox(0, "Testo", "Titolo", 0);  
  14.       }
  15.    }
  16. }




Ultima modifica effettuata da Dax89 il 10/04/2008 alle 17:22
PM Quote
Avatar
Dark_Limit (Ex-Member)
Expert


Messaggi: 220
Iscritto: 15/01/2008

Segnala al moderatore
Postato alle 20:14
Giovedė, 10/04/2008
Ciao..potresti alternativamente aggiungere un riferimento al progetto..

PM Quote
Avatar
sem&cery (Normal User)
Newbie


Messaggi: 2
Iscritto: 10/04/2008

Segnala al moderatore
Postato alle 18:23
Venerdė, 11/04/2008
Grazie a chi mi ha risposto...
Ma io continuo a non riuscire a usare WinPCap...
ho scritto questo (provato un metodo a caso)
Codice sorgente - presumibilmente C++

  1. class MainClass
  2.     {
  3.        [DllImport("Wpcap.dll")]
  4.        public static extern pcap_t*  pcap_open();
  5.  
  6.         public MainClass()
  7.             {
  8.             pcap_t* prova;
  9.             }
  10.         public int speriamo()
  11.         {
  12.             prova = pcap_open();
  13.             return 1;
  14.         }
  15.     }


So che quel metodo vuole dei parametri ma l'errore me lo da su pcap_t*.
Sto impazzendo!

PM Quote
Avatar
Dax89 (Member)
Expert


Messaggi: 283
Iscritto: 07/04/2007

Segnala al moderatore
Postato alle 19:15
Venerdė, 11/04/2008
Da errore perchč 'pcap_t' non esiste. in C#, Se č una struttura  la devi riscrivere esattamente a come la trovi nel file *.h C++ in cui č presente, ad esempio:

La struttura Point, in C++ č definita cosė:

Codice sorgente - presumibilmente C# / VB.NET

  1. struct Point
  2. {
  3.   DWORD x;
  4.   DWORD y;
  5. };



Ora, supponendo che nel .NET Framework questa struttura non esista, la dovremmo scrivere noi per poterla usare e facciamo:

Codice sorgente - presumibilmente C++

  1. public struct Point
  2. {
  3.   int x;
  4.   int y;
  5. }



Permettendoci cosė di usarla.
La stessa cosa va fatta con la struttura che vuoi usare.
Se invece non č una struttura, dovresti darmi pių informazioni a riguardo. ^^
Un altra cosa:
Siccome la funzione restituisce un puntatore, al posto del puntatore si mette IntPtr, che rappresenta un indirizzo.

Ultima modifica effettuata da Dax89 il 11/04/2008 alle 19:21
PM Quote