一般来说:“自定义IP头是通过使用socket的库函数setsockopt()的选项IP_HDRINCL来实现的”,但是由于Winsock1.1和Winsock2.0函数库里setsockopt()不支持IP_HDRINCL选项,而windows xp sp2以后又检查了源地址源端口等信息,使得这种方法十分不好用,问一下大家,有什么好办法使得各种windows版本下都能够实现发包没有?请大家指教(隐约感觉驱动应该可以,但是没有做过,怎么入手,请指教)

解决方案 »

  1.   

    用raw socket. 网上有个TCPLib的包,raw socket的话,用它会感觉省事不少。
      

  2.   

    不需要驱动~
    使用raw socket,lz google一下吧
      

  3.   

    楼上几位,raw socket好像是不行的哦
    根据这个网页提到的:http://www.xfocus.net/articles/200202/343.html“
    SOCKET sock; 
    sock = socket(AF_INET,SOCK_RAW,IPPROTO_IP); 
    或者: 
    s = WSASoccket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED);   这里,我们设置了SOCK_RAW标志,表示我们声明的是一个原始套接字类型。创建原始套接字后,IP头就会包含在接收的数据中,如果我们设定 IP_HDRINCL 选项,那么,就需要自己来构造IP头。”我们要改变IP头,必须要设置IP_HDRINCL 选项,而IP_HDRINCL 选项便是我在原贴中提到的情况,请问,还有别的解决办法没有?另外:请jiangsheng(蒋晟.Net[MVP])能不能说得清楚点,谢谢
      

  4.   

    winsock 2.2(win2000 及以后)就支持这个选项了
      

  5.   

    http://dev.csdn.net/article/1/1784.shtm
      

  6.   

    微软的DDK里面有一个叫做 NDISPORT的示例
    可以满足你的要求 
    下面是官方介绍 
    NDIS connection-less protocol driver sample
    SUMMARYThis sample demonstrates a connection-less NDIS 5.0/5.1 protocol driver. The driver supports sending and receiving raw Ethernet frames using ReadFile/WriteFile calls from user-mode. As an NDIS protocol, it illustrates how to establish and tear down bindings to Ethernet adapters, i.e. those that export medium type NdisMedium802_3. It shows how to set a packet filter, send and receive data, and handle plug-and-play events. It also shows use of the following NDIS 5.1 features/APIs:1.      Canceling sends2.      NdisQueryPendingIOCount()The sample works on Windows 2000, Windows XP, and Windows Server 2003 32-bit and 64-bit platforms.这个驱动你完全可以直接用
    不必作任何改动,自己把 Ring 3 部分改改就行了
    很简单 
    呵呵
      

  7.   

    VirtualDesktop(^_^ Blog 又更新了):我就是想写一个与平台无关的发包程序,9X和2000以后下都能跑得,谢谢。
    df8327(DF) :我看一下,如果行就给你分
      

  8.   

    在XP sp2上用raw socket 发自定义数据包已经不能再用了
      

  9.   

    肯定没问题的
    winpcap就是基于这个东西
    你仔细看看吧