Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   C# снифер < Error (https://forum.antichat.xyz/showthread.php?t=57645)

Jes 07.01.2008 00:56

C# снифер < Error
 
вот такой класс потока ловит Exception "Specified argument was out of range of valid values. Parametr name: newAdress" , голова вообще(!) не варит в день воскресный , поделитесь МосКом?
(или рабочим исходником сниффера на C#)

Код:

namespace Leon.RawThread
{
 using System;
 using System.Threading;
 using Leo.LeonForm;
 using System.Windows.Forms;
 using System.Diagnostics;
 using System.Net.Sockets;
 using System.Net;
 using System.Text;
 using Leo.RawSockets;
 using System.Runtime.InteropServices;
 public class RawSocket : BaseSocket
 {
  public RawSocket():base(){}
  ListBox list = null;
  public ListBox Out
  {
      get
      {
      return list;
      }
      set
      {
      list = value;
      }
  }
  unsafe public override void Receive(byte []buf, int len)
  {
      long ip_srcaddr = 10, ip_destaddr = 10, header_len = 0;   
      string out_string = "";
      int protocol;
      short src_port = 0, dst_port = 0;
          IPAddress tmp_ip;
      string from_ip, to_ip;
      fixed(byte *fixed_buf = buf)
      {     
          IpHeader * header = (IpHeader *)fixed_buf;
      header_len = (header->ip_verlen & 0x0F) << 2;
      protocol = header->ip_protocol;
      ip_srcaddr = header->ip_srcaddr;
      ip_destaddr = header->ip_destaddr;
          tmp_ip = new IPAddress(ip_srcaddr);
          from_ip = tmp_ip.ToString();
          tmp_ip = new IPAddress(ip_destaddr);
      to_ip = tmp_ip.ToString();
      tmp_ip = null;
          switch(protocol)
      {
        case 1: out_string = "ICMP:";break;
        case 2: out_string = "IGMP:";break;
        case 6:
                out_string = "TCP:";
                src_port = *(short *)&fixed_buf[header_len];
                                dst_port = *(short *)&fixed_buf[header_len +2];
                from_ip += ":" + IPAddress.NetworkToHostOrder(src_port).ToString();
                                to_ip += ":" + IPAddress.NetworkToHostOrder(dst_port).ToString();
                                break;
        case 17: out_string = "UDP:";
                src_port = *(short *)&fixed_buf[header_len];
                                dst_port = *(short *)&fixed_buf[header_len +2];
                from_ip += ":" + IPAddress.NetworkToHostOrder(src_port).ToString();
                                  to_ip += ":" + IPAddress.NetworkToHostOrder(dst_port).ToString();
                break;
        default: out_string = "UNKNOWN";break;
      }
      }
     
      out_string += from_ip + "--->" + to_ip.ToString();
          list.Items.Add(out_string);
     
          out_string = "total length: " + len.ToString() + " bytes";
      list.Items.Add(out_string);
     
          out_string = "data length: " + (len - header_len).ToString() + " bytes";
      list.Items.Add(out_string);

  }
 
  public void Run()
  {
    int cout_receive_bytes;
    while(true)
    { 
    IAsyncResult ar = socket.BeginReceive(receive_buf, 0, len_receive_buf, SocketFlags.None, new AsyncCallback(CallReceive), this);
    cout_receive_bytes = socket.EndReceive(ar);
    Receive(receive_buf, cout_receive_bytes);
    }

  }
 


  virtual public void CallReceive(IAsyncResult ar)
  {
  }

 }


 internal class RawWorker
 {
  private MainForm form = null;
  public RawSocket ReceiveAll = new RawSocket();
  public MainForm RawForm
  {
      set
      {
      form = value;
      }
  }
  private string ip = null;
  public string SelectedIP
  {
      set
      {
      ip = string.Copy(value);
      }
  }
  public void Run()
  {
  try
  {
      ReceiveAll.CreateAndBindSocket(ip);
      if(ReceiveAll.SetSockoption() != true)
      {
        MessageBox.Show("Invalid call SetSocketOption");
        return;
      }
      ReceiveAll.Run();
  }
  catch(ThreadAbortException)
  {
    ReceiveAll.Shutdown();
  }
  catch(Exception e)
  {
      MessageBox.Show(e.Message);
  }
  }
 }
}


Jes 10.03.2008 02:37

кстати , проблема то решена , там была неправильная структура хидера ...
если интересно : рабочий класс описан сдесь : https://forum.antichat.ru/thread60462.html

[closed]


Время: 09:18