//------------------- 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();