我有一本名爲NET網絡編程的書,它有以下代碼示例,用於嗅探網絡堆棧上的IP數據包。我抄代碼示例從書字對字,所以請原諒缺乏文體公約等.NET中的網絡數據包嗅探權限異常
List<string> packets = new List<string>();
public void Run()
{
int len_receive_buf = 4096;
int len_send_buf = 4096;
byte[] receive_buf = new byte[len_receive_buf];
byte[] send_buf = new byte[len_send_buf];
int cout_receive_bytes;
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
socket.Blocking = false;
IPHostEntry IPHost = Dns.GetHostByName(Dns.GetHostName());
socket.Bind(new IPEndPoint(IPAddress.Parse(IPHost.AddressList[0].ToString()), 0));
socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, 1);
byte[] IN = new byte[4] { 1, 0, 0, 0 };
byte[] OUT = new byte[4];
int SIO_RCVALL = unchecked((int)0x98000001);
int ret_code = socket.IOControl(SIO_RCVALL, IN, OUT);
while(true)
{
IAsyncResult ar = socket.BeginReceive(receive_buf, 0, len_receive_buf, SocketFlags.None, null, this);
cout_receive_bytes = socket.EndReceive(ar);
Receive(receive_buf, cout_receive_bytes);
}
}
public void Receive(byte[] buf, int len)
{
if(buf[9] == 6)
{
packets.Add(Encoding.ASCII.GetString(buf).Replace("\0", " "));
}
}
我第一次測試,這是幾年前(甚至之前Vista的存在)和我使用的機器是32位Windows XP Proferssional平臺,其網卡上運行IPv4。
我現在試圖在運行IPv6的網卡上運行的64位Windows 7平臺上進行測試,但無法運行。我認爲這與IPv6有關。任何人都可以建議我如何有效地解決此問題?
編輯:這是個例外,我得到當我嘗試運行...
它不起作用? –
我真的質疑任何代碼的作者身份,其中包括像'IPAddress.Parse(IPHost.AddressList [0] .ToString())' - 嗯,爲什麼不只是'IPHost.AddressList [0]'? –
@Damien_The_Unbeliever我非常同意! – series0ne