0% ont trouvé ce document utile (0 vote)
8 vues5 pages

Capture de trafic réseau en C#

Ce document décrit comment analyser le trafic réseau à l'aide de la bibliothèque libpcap en C#. Il définit des structures de données et des fonctions pour récupérer la liste des interfaces réseau, capturer les paquets en temps réel et afficher des informations de base sur chaque paquet.

Transféré par

yasmina.belhamri
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats TXT, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
8 vues5 pages

Capture de trafic réseau en C#

Ce document décrit comment analyser le trafic réseau à l'aide de la bibliothèque libpcap en C#. Il définit des structures de données et des fonctions pour récupérer la liste des interfaces réseau, capturer les paquets en temps réel et afficher des informations de base sur chaque paquet.

Transféré par

yasmina.belhamri
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats TXT, PDF, TXT ou lisez en ligne sur Scribd

//------------------- Bibliothèques

-----------------------------------------------------------------------

using System;
using [Link];// ArrayList, etc.
using [Link];// DllImport, StructLayout, etc.
using [Link]; // StringBuilder, etc.
using [Link]; // form, MessageBox, etc.
using [Link]; // Thread

//------------------- Variables Globales


------------------------------------------------------------------

public delegate void Disp(); //déclaration d'un type délégué appelé Disp
Thread ListenThread = null;
IntPtr header = [Link];
IntPtr data = [Link];

ArrayList deviceList = new ArrayList();


string device_name;
IntPtr pcap_t;
Form1 fm1;
int cmpt;
public static RichTextBox TrafficRTBox;

//------------------------ Déclaration des DLLs


-------------------------------------------------------

[DllImport("[Link]", CharSet = [Link])]


private extern static IntPtr pcap_open_live(string dev, int packetLen,
short mode, short timeout, StringBuilder errbuf);

[DllImport("[Link]", CharSet = [Link])]


private extern static int pcap_findalldevs(ref IntPtr alldevs,
StringBuilder errbuf);

[DllImport("[Link]", CharSet = [Link])]


private extern static void pcap_freealldevs(IntPtr alldevs);

[DllImport("[Link]")]
private static extern int pcap_next_ex(IntPtr p, ref IntPtr pkt_header, ref
IntPtr packetdata);

[DllImport("[Link]")]
private static extern void pcap_close(IntPtr p);

[StructLayout([Link])]
public struct pcap_if
{
public IntPtr Next;
public string Name;
public string Description;
public IntPtr Addresses;
public uint Flags;
}

[StructLayout([Link])]
public struct pcap_pkthdr
{
public int tv_sec; // seconds
public int tv_usec; // microseconds
public int caplen; //length of portion present
public int len; //length this packet (off wire)
};

[StructLayout([Link])]
internal struct pcap_pktdata
{
[MarshalAs([Link], SizeConst = 65536)]
public byte[] bytes;
};

//------------------------ Les fonctions


--------------------------------------------------------------

public ArrayList GetDevicesList()


{
[Link]();
IntPtr ptrDevs = [Link], next = [Link];
pcap_if dev;
StringBuilder errbuf = new StringBuilder(256);
string dev_name;

int res = pcap_findalldevs(ref ptrDevs, errbuf);


if (res == -1)
{
string err = "Error in findalldevs(): " + errbuf;
throw new Exception(err);
}
else
{
next = ptrDevs;
while (next != [Link])
{
dev = (pcap_if)[Link](next, typeof(pcap_if));

dev_name = [Link]() + " : " +


[Link]();

[Link](dev_name);
next = [Link];
}
}
pcap_freealldevs(ptrDevs);
return deviceList;
}

public void LiveCapture(string dev_name, Form1 f)


{
fm1 = f;

device_name = dev_name;

[Link](); cmpt = 0;

if (ListenThread != null)
{
[Link]();
}
ListenThread = new Thread(new ThreadStart(Listen));
[Link] = true;
[Link]();
}

public void Listen()


{
StringBuilder errbuf = new StringBuilder();
pcap_t = pcap_open_live(device_name, 1514, 1, 1000, errbuf);

if (pcap_t == null)
{
[Link](" erreur de sniffing");
}
else
{
IntPtr pkthdr = [Link];
IntPtr pktdata = [Link];

while (true)
{
int state = pcap_next_ex(pcap_t, ref pkthdr, ref pktdata);
if (state == 1) /* SUCCESS */
{
header = pkthdr;
data = pktdata;

Disp Analyze = new Disp(Analyzing);


[Link](Analyze);
}
}/* end_while */
}
}

public void Analyzing()


{
pcap_pkthdr h = (pcap_pkthdr)[Link](header,
typeof(pcap_pkthdr));

byte[] packet_header = new byte[16];


[Link](header, packet_header, 0, 16);

byte[] packet_data = new byte[(int)[Link]];


[Link](data, packet_data, 0, (int)[Link]);

//---------------

string src_mac, dest_mac, type_mac;

src_mac = packet_data[6].ToString("x02") + ":" +


packet_data[7].ToString("x02") + ":" + packet_data[8].ToString("x02") + ":" +
packet_data[9].ToString("x02") + ":" + packet_data[10].ToString("x02") + ":" +
packet_data[11].ToString("x02");
dest_mac = packet_data[0].ToString("x02") + ":" +
packet_data[1].ToString("x02") + ":" + packet_data[2].ToString("x02") + ":" +
packet_data[3].ToString("x02") + ":" + packet_data[4].ToString("x02") + ":" +
packet_data[5].ToString("x02");
type_mac = packet_data[12].ToString("x02") + ":" +
packet_data[13].ToString("x02");

[Link]([Link]() + " -> From " + src_mac + "


to " + dest_mac + " Type : " + type_mac + "\n");

cmpt++;

//---------------
}

public void StopListen()


{
if (ListenThread != null)
{
if ([Link])
{
[Link]();
}

if (pcap_t != [Link])
{
pcap_close(pcap_t);
}

ListenThread = null;
}
}

//---------------------------------------------------------------------------------
----------------------------
//---- Gestion des evenements
//---------------------------------------------------------------------------------
----------------------------

//------------------- Variables Globales


--------------------------------------------------------------------

ArrayList devicesList = new ArrayList();


Capture cap = new Capture();
string[] str_tab;
string dev_name;

//------------------- Début de capture


----------------------------------------------------------------------
[Link](dev_name, this);

//------------------- Fin de capture


------------------------------------------------------------------------
[Link]();

//------------------- Chargement des interfaces


-------------------------------------------------------------

[Link]();
devicesList = [Link]();

for (int i = 0; i < [Link]; i++)


{
[Link]((string)devicesList[i]);
}

if ([Link] > 0)
{
[Link] = 0;
str_tab =
((string)devicesList[[Link]]).Split(':');
dev_name = str_tab[0].Trim();
}

[Link] = this.richTextBox1;

//------------------- séléction d'une interface


-------------------------------------------------------------

str_tab = ((string)devicesList[[Link]]).Split(':');
dev_name = str_tab[0].Trim();

Vous aimerez peut-être aussi