Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Сниффер на C#. Исходящие пакеты

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Сниффер на C#. Исходящие пакеты
Имя
Сообщение << Старые топики   Новые топики >>
Сниффер на C#. Исходящие пакеты - 2008-11-27 18:12:09.626666   
DdvDemon

Сообщений: 31
Оценки: 0
Присоединился: 2007-01-30 19:36:32.186666
Разбираюсь с исходниками сниффера MJSniffer на C#. Вот только ловит он лишь входящие пакеты, а исходящие нет. Что нужно добавить в код, чтобы ловились и исходящие? И можно ли ловить пакеты только от определенных программ, например Opera или клиенты онлайн-игр?
public partial class Form1 : Form { private Socket mainSocket; //The socket which captures all incoming packets private byte[] byteData = new byte[4096]; private byte[] byteData2 = new byte[4096]; private bool bContinueCapturing = false; //A flag to check if packets are to be captured or not private delegate void AddTreeNode(TreeNode node); public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { string strIP = null; IPHostEntry HosyEntry = Dns.GetHostEntry((Dns.GetHostName())); if (HosyEntry.AddressList.Length &gt; 0) { foreach (IPAddress ip in HosyEntry.AddressList) { strIP = ip.ToString(); cmbInterfaces.Items.Add(strIP); } } } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (bContinueCapturing) { mainSocket.Close(); } } private void btnStart_Click(object sender, EventArgs e) { if (cmbInterfaces.Text == "") { MessageBox.Show("Select an Interface to capture the packets.", "MJsniffer", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } try { if (!bContinueCapturing) { //Start capturing the packets... btnStart.Text = "&Stop"; bContinueCapturing = true; //For sniffing the socket to capture the packets has to be a raw socket, with the //address family being of type internetwork, and protocol being IP mainSocket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP); //Bind the socket to the selected IP address mainSocket.Bind(new IPEndPoint(IPAddress.Parse(cmbInterfaces.Text), 0)); //Set the socket options mainSocket.SetSocketOption(SocketOptionLevel.IP, //Applies only to IP packets SocketOptionName.HeaderIncluded, //Set the include the header true); //option to true byte[] byTrue = new byte[4] { 1, 0, 0, 0 }; byte[] byOut = new byte[4] { 1, 0, 0, 0 }; //Capture outgoing packets //Socket.IOControl is analogous to the WSAIoctl method of Winsock 2 mainSocket.IOControl(IOControlCode.ReceiveAll, //Equivalent to SIO_RCVALL constant //of Winsock 2 byTrue, byOut); //Start receiving the packets asynchronously mainSocket.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None, new AsyncCallback(OnReceive), null); } else { btnStart.Text = "&Start"; bContinueCapturing = false; //To stop capturing the packets close the socket mainSocket.Close(); } } catch (Exception ex) { MessageBox.Show(ex.Message, "MJsniffer", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void OnReceive(IAsyncResult ar) { try { int nReceived = mainSocket.EndReceive(ar); //Analyze the bytes received... ParseData(byteData, nReceived); if (bContinueCapturing) { byteData = new byte[4096]; //Another call to BeginReceive so that we continue to receive the incoming //packets mainSocket.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None, new AsyncCallback(OnReceive), null); } } catch (ObjectDisposedException) { } catch (Exception ex) { MessageBox.Show(ex.Message, "MJsniffer", MessageBoxButtons.OK, MessageBoxIcon.Error); } } .............. } Исходник взят с http://www.codeproject.com/KB/IP/CSNetworkSniffer.aspx
Post #: 1
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Сниффер на C#. Исходящие пакеты







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.