最近写一些在网络上捕获数据包的程序,用到了RawSocket,其中要用到SetSocketOption()
原型为:
     SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, 1);
第三个参数为什么要是 1 呢?原因是默认的值是 0 ,1表示打开这个选项。
那么还有多少这样的选项呢?答案是:很多,有200项左右。
于是有了下面的代码,它可以看一看你使用socket时每个option的默认值。知道了这些,你就
可以有的放矢的SetSocketOption()了。
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(
"\t\t num \tLevel Name\t DefaultOption");
            Console.WriteLine(
"----------------------------------------------------------------");
            
            
foreach(string s1 in Enum.GetNames(sol))
            
{
                
foreachstring s2 in Enum.GetNames(son))
                
{
                    count
++;
                
try
                
{
                    SocketOptionLevel o1 
= (SocketOptionLevel)Enum.Parse(sol,s1);
                    SocketOptionName o2 
= (SocketOptionName)Enum.Parse(son,s2);
                    Console.Write(
" \t{0}\t {1:-10}\t {2:-30}",count,s1,s2);
                    
//Get Values
                    Console.Write(" \t\t{0}\n ",socket.GetSocketOption(o1,o2));
                }

                
catch(ArgumentNullException)
                
{
                    Console.Write(
"\t NULL\t ");
                }

                
catch(ArgumentException)
                
{
                    Console.Write(
"\t NULL\t ");
                }

                
catch(SocketException)
                
{
                    Console.Write(
" \tNULL \t");
                }

            }


            }

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

    }

}

下面是屏幕截图

posted on 2004-07-10 14:42  xpoint  阅读(1121)  评论(0编辑  收藏  举报