最近写一些在网络上捕获数据包的程序,用到了Rawsocket,其中要用到SetsocketOption()原型为:SetsocketOption(socketOptionLevel.IP,socketOptionName.HeaderIncluded, 1);第三个参数为什么要是 1 呢?原因是默认的值是 0 ,1表示打开这个选项。那么还有多少这样的选项呢?答案是:很多,有200项左右。于是有了下面的代码,它可以看一看你使用socket时每个option的默认值。知道了这些,你就可以有的放矢的SetsocketOption()了。
Code:
---------------------------------------------------------------------------
namespace SKY.socketOptions{ using System; using System.Net.sockets; public class socketOptions { public static void Main(string[] args) { int count = 0; //使用那种构造函数并不重要,何值也不重要,无非是CLR分配一些相关的结构 //结构是重要的 socket socket = new socket(AddressFamily.InterNetwork, socketType.Raw, ProtocolType.IP); Type sol = typeof(socketOptionLevel); Type son = typeof(socketOptionName); Console.WriteLine(" num Level Name DefaultOption"); Console.WriteLine("----------------------------------------------------------------"); foreach(string s1 in Enum.GetNames(sol)) { foreach( string s2 in Enum.GetNames(son)) { count++; try { socketOptionLevel o1 = (socketOptionLevel)Enum.Parse(sol,s1); socketOptionName o2 = (socketOptionName)Enum.Parse(son,s2); Console.Write(" {0} {1:-10} {2:-30}",count,s1,s2); //Get Values Console.Write(" {0}",socket.GetsocketOption(o1,o2)); } catch(ArgumentNullException) { Console.Write(" NULL"); } catch(ArgumentException) { Console.Write(" NULL"); } catch(socketException) { Console.Write(" NULL"); } }
} Console.WriteLine("----------------------------------------------------------------"); /* Console.WriteLine("-------------socketOptionLevel---------------------------"); foreach ( string s1 in Enum.GetNames(sol)) { Console.WriteLine( "{0}",s1); } Console.WriteLine("-------------socketOptionName----------------------------"); foreach( string s2 in Enum.GetNames(son)) { Console.WriteLine( "|{0}",s2); } Console.WriteLine("------------------END------------------------------------"); */ Console.ReadLine(); } }}
---------------------------------------------------下面是屏幕截图:
<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>