这哪是1句2句说的清的。你是要扫描别人的机器还是要防止别人扫描自己的?数据包头有几个标志位,其中有个就是SYN。发送一个只有SYN标志位的包,然后判断返回的包里的其他位。去看TCP/IP协议或者去网上搜搜或者去CSDN网络论坛去问,这不是编程语言的问题,先去搞清原理。

解决方案 »

  1.   

    现在用c#搞低层的人不多,大部分在搞网络。估计过一段时间。。hoho
      

  2.   

    是扫描别人的
    http://www.ccw.com.cn/htm/app/aprog/01_8_1_2.asp,这个是ping的代码,发送icmp包的
    Socket ClientSocket = new Socket(AddressFamily.InterNetwork, 
    SocketType.Raw, ProtocolType.Tcp);我改成这样,然后按照tcp包头格式构造了一个包,可是好像发送不成功,望高手指点
      

  3.   

    //原理我很清楚
    真清楚吗?AddressFamily.InterNetwork, 
    SocketType.Raw, 
    ProtocolType.Tcp   //原文: ProtocolType.Icmp这三个参数不是孤立的,是有一定关系的,互相牵制的,改动其中一个就很可能必须要改其他2个。
    简单点说:
    某种AddressFamily对应某(几)种SocketType,某种SocketType又对应某(几)种ProtocolType如果你要改成ProtocolType.Tcp,那么SocketType估计就不能用RAW了,用Stream试试
    而且你引用的那个例子的很多代码都要改了。