使用libnet开发包,但是却没有将数据发出(通过Ethereal抓包或观察hub的灯可以肯定没数发出),好奇怪!请高人帮我看看,谢谢xp+sp2 系统,WinPcap3.1源代码如下,编译通过了。#include <win32/libnet.h>void main()
{
    int packet_size;
    /* 构造的数据包大小 */
    libnet_t *l;
    /* libnet句柄 */
    char *device = NULL;
    /* 设备变量 */
    char *destination_ip_str = "192.168.0.2";
    /* 目的IP地址字符串变量,可以指定任意一个合法的IP地址 */
    char *source_ip_str = "192.168.0.1";
    /* 源IP地址字符串变量,可以指定任意一个合法的IP地址 */
    u_char hardware_source[6] =
    {
        0x00, 0x40, 0xca, 0xb9, 0x5c, 0x4e
    };
    /* 源硬件地址,可以指定任意的MAC地址 */
    u_char hardware_destination[6] =
    {
        0x00, 0x05, 0x5d, 0xf5, 0x6a, 0x9e
    };
    /* 目的硬件地址,可以指定任意的MAC地址 */
    u_long destination_ip;
    /* 目的IP地址 */
    u_long source_ip;
    /* 源IP地址 */
    char error_buffer[LIBNET_ERRBUF_SIZE];
    /* 存放错误信息 */
    libnet_ptag_t ip_protocol_tag = 0;
    /* IP协议块的协议标记 */
    libnet_ptag_t ethernet_protocol_tag = 0;
    /* 以太网协议块的协议标记 */
    u_short protocol = IPPROTO_UDP;
    /* 表示IP上一层的协议类型,在这里是UDP协议 */
    u_char payload[255] = "";
    /* 负载的内容,初始值为空 */
    u_long payload_size = 0;
    /*
     * 负载的长度,初始值为0 ;
     * 对libnet进行初始化操作
     */
    l = libnet_init(LIBNET_LINK,  /* libnet类型 */device,  /* 网络设备 */error_buffer);
    /* 错误信息 */
    destination_ip = libnet_name2addr4(l, destination_ip_str, LIBNET_RESOLVE);
    /* 把目的IP地址字符串类型转换为网络顺序的数值 */
    source_ip = libnet_name2addr4(l, source_ip_str, LIBNET_RESOLVE);
    /* 把源IP地址字符串类型转换为网络顺序的数值 */
    strncpy(payload, "test", sizeof(payload) - 1);
    /* 构造负载的内容,此时的内容为"test",只是测试 */
    payload_size = strlen(payload);
    /* 计算负载内容的长度 */
    ip_protocol_tag = libnet_build_ipv4(
    /* 构造IP协议块 */
    LIBNET_IPV4_H + payload_size,
    /* IP协议块的整个长度,在这里是IP协议头加上负载的长度 */
    0,
    /* 服务质量,在这里为0 */
    242,
    /* IP标记 */
    0,
    /* IP紧急指针 */
    64,
    /* 生存时间 */
    protocol,
    /* 上层协议类型 */
    0,
    /* 校验和,此时为0,表示由libnet自动计算 */
    source_ip,
    /* 源IP地址 */
    destination_ip,
    /* 目的IP地址 */
    payload,
    /* 负载内容 */
    payload_size,  /* 负载内容的大小 */l,
    /* libnet句柄,由libnet_init()函数生成的 */
    ip_protocol_tag /* IP协议块标记,此时为0,表示构造新的IP协议块 */
    );
    ethernet_protocol_tag = libnet_build_ethernet(
    /* 构造一个以太网协议块 */
    hardware_destination,
    /* 以太网目的地址 */
    hardware_source,
    /* 以太网源地址 */
    ETHERTYPE_IP,
    /* 上层协议类型,在这里必须是IP协议 */
    NULL,
    /* 负载,这里为空 */
    0,
    /* 负载大小 */
    l,
    /* libnet句柄 */
    ethernet_protocol_tag /* 以太网协议块标记,此时为0,表示构造新的以太网协议块
     * */
    );
    packet_size = libnet_write(l);
    /* 发送数据包 */
    printf("发送一个%d字节的IP数据包\n", packet_size);
    libnet_destroy(l);
    /* 销毁libnet */
}