winpcap 发送数据包

第一:打开VS2010,创建一个新的项目,再对VS做一些设置。如下:

项目-->**属性(alt+F7)
配置属性-->清单工具-->输入和输出-->嵌入清单-->否

项目-->**属性(alt+F7)
配置属性-->C/C++-->常规-->附加包含目录-->

项目-->**属性(alt+F7)
配置属性-->链接器-->常规-->附加库目录-->

项目-->**属性(alt+F7)
配置属性-->链接器-->输入-->附加依赖项-->补充“;Packet.lib;wpcap.lib;Ws2_32.lib;”

项目-->**属性(alt+F7)
配置属性-->C/C++-->预处理器-->预处理器定义-->补充“;HAVE_REMOTE”

-----------------------------------------------------------------------------------------------------------
------------------LINK:fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏---------------------------

第一步:将 项目——项目属性——配置属性——连接器——清单文件——嵌入清单 “是”改为“否”。若还不能解决问题进入第二步。
第二步:查看计算机是否为64bit操作系统,如是,继续如下操作。
查找是否有两个cvtres.exe。
C:\Program Files(x86)\Microsoft Visual Studio 10.0\vc\bin\cvtres.exe
C:\Windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe
右键属性—详细信息, 查看两者版本号,删除/重命名较旧的版本,或者重新设置Path变量。
 
治本的办法是第二步,删除旧版本的cvtres.exe后,就不需要每次都设置配置了。

例如:   del  C:\"Program Files (x86)"\"Microsoft Visual Studio 10.0"\VC\bin\cvtres.exe

--------------------------------------------------------------------------------------------------------

第二步:把WinPcap 中分析数据包的代码复制到VS中,再把WinPcap中数据分析中的一些关于网卡打印的代码复制到VS中。

// mist12306.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <pcap.h>
void main(int argc, char **argv)
{
pcap_t *fp;
char errbuf[PCAP_ERRBUF_SIZE];
u_char packet[100];
int i;
pcap_if_t *alldevs;
pcap_if_t *d;
int inum;
int j=0;
pcap_t *adhandle;

/* 获得设备列表 */
    if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1)
    {
        fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);
        exit(1);
    }
    
    /* 打印列表 */
    for(d=alldevs; d; d=d->next)
    {
        printf("%d. %s", ++j, d->name);
        if (d->description)
            printf(" (%s)\n", d->description);
        else
            printf(" (No description available)\n");
    }

if(j==0)
    {
        printf("\nNo interfaces found! Make sure WinPcap is installed.\n");
        return ;
    }
    
    printf("Enter the interface number (1-%d):",j);
    scanf("%d", &inum);
    
    if(inum < 1 || inum > j)
    {
        printf("\nInterface number out of range.\n");
        /* 释放设备列表 */
        pcap_freealldevs(alldevs);
        return ;
    }

/* 跳转到已选设备 */
    for(d=alldevs,j=0; j< inum-1 ;d=d->next, j++);

/* 打开输出设备 */
    if ( (fp= pcap_open(d->name,            // 设备名
                        100,                // 要捕获的部分 (只捕获前100个字节)
                        PCAP_OPENFLAG_PROMISCUOUS,  // 混杂模式
                        1000,               // 读超时时间\
                        NULL,               // 远程机器验证
                        errbuf              // 错误缓冲
                        ) ) == NULL)
    {
        fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n",d->name);
        return;
    }

/* 假设在以太网上,设置MAC的目的地址为 1:1:1:1:1:1 */
    packet[0]=255;
    packet[1]=255;
    packet[2]=255;
    packet[3]=255;
    packet[4]=255;
    packet[5]=255;
    
    /* 设置MAC源地址为 2:2:2:2:2:2 */
    packet[6]=91;
    packet[7]=91;
    packet[8]=91;
    packet[9]=91;
    packet[10]=91;
    packet[11]=91;
     packet[12]=96;
    packet[13]=00;
    
    /* 填充剩下的内容 */
    for(i=14;i<100;i++)
    {
        packet[i]=i%256;
    }

/* 发送数据包 */
    if (pcap_sendpacket(fp, packet, 100 /* size */) != 0)
    {
        fprintf(stderr,"\nError sending the packet: \n", pcap_geterr(fp));
        return;
    }

return;
}

第三步:运行后选择第二块网卡,再打开wireshark普货数据包。

总结:对代码不理解 ,感觉难难难!

时间: 2024-10-10 01:16:15

winpcap 发送数据包的相关文章

发送数据包

#include "stdafx.h" #include <stdlib.h>#include <stdio.h> #include <pcap.h> void main(int argc, char **argv){pcap_t *fp;char errbuf[PCAP_ERRBUF_SIZE];u_char packet[100];int i;pcap_if_t *alldevs;pcap_if_t *d;int inum;int j=0; /*

Linux网络之设备接口层:发送数据包流程dev_queue_xmit

转自:http://blog.csdn.net/wdscq1234/article/details/51926808 写在前面 本文主要是分析kernel-3.8的源代码,主要集中在Network的netdevice层面,来贯穿interface传输数据包的流程,kernel 博大精深,这也仅仅是一点个人愚见,作为一个笔记形式的文章,如有错误或者表述不当之处,还请大家留言批评指正,非常感谢! 主要涉及的file:kernel-3.18/net/core/dev.c kernel-3.18/net

VC模拟发送数据包-百度关键词查找

VC模拟发送数据包-百度关键词查找 逗比汪星人2009-09-06上传 VC模拟发送数据包-百度关键词abcdef查找 详情 http://blog.csdn.net/wangningyu http://download.csdn.net/detail/wangningyu/1637723

TCP和UDP发送数据包的大小问题

用UDP协议发送时,用sendto函数最大能发送数据的长度为:65535-20-8=65507字节,其中20字节为IP包头长度,8字节为UDP包头长度.用sendto函数发送数据时,如果指的的数据长度大于该值,则函数会返回错误. 用TCP协议发送时,由于TCP是数据流协议,因此不存在包大小的限制(暂不考虑缓冲区的大小),这是指在 用send函数时,数据长度参数不受限制.而实际上,所指定的这段数据并不一定会一次性发送出去,如果这段数据比较长,可能会被分段发送,如果比较短,可能会等待和下一次数据一起

raw socket 发送数据包

TRawSocket = class(TObject) private buf: array[0..BUFLEN - 1] of char; FdwNotifyWnd: Cardinal; hsocket: Cardinal; str: string; public constructor Create; destructor Destroy; override; function createSocket: Integer; procedure destroySocket; function

Linux命令(35):ping命令-向网络主机发送数据包

ping命令 功能说明 ping是最常用的网络连接命令,ping会向指定的网络主机发送特殊网络数据包IMCP ECHO_REQUEST.多数网络设备收到该数据包会做出回应,通过此方法即可难网络连接是否正常,用法如下: ping [参数] [主机名或IP] 常用参数 选项 说明 -c 发送指定数据包后停止 -s 指定发送的数据字节数,预设值是56 -t 设置存活数值TTL的大小 -i 设置秒数,每隔几秒发送一次数据包,默认是1秒 示例                     测试连接性 [[ema

udp-&gt;ip &amp; tcp-&gt;ip 发送数据包的目的地址的源地址是什么时候确定的?

udp->ip & tcp->ip udp到ip层是:ip_send_skb tcp到ip层是: ip_queue_xmit 拿tcp为例,在使用[ip_queue_xmit, ip_local_out]在这个函数区间之内,数据包的IP数据包就已经确定下了: ip_queue_xmit From Skb: S 61.0.0.0   D: 8.1.103.0ip_local_out From Skb: S 192.168.1.1   D: 192.168.1.110ip_queue_xm

浅析利用Hessian跨Web网站发送数据包

笔者,不玩游戏已经有一个月的时间了.昨天偶然发现大家都在玩吃鸡,于是好奇心作祟,昨个不知不觉就到了5点多.笔者现在的电脑配置是10年前的,现在最大的期待是能够有一台配置高.外观漂亮的电脑.好了,每天闲扯一下其实很开心,也主要是现在的游戏大都是3D体验感的,笔者晕3D渲染(配置低的电脑更明显),没办法啊.好了废话不多说了,现在我们实现一种跨Web网站的数据推送技术:从当前的Web网站生成一个数据文件包,然后将该数据文件包推送到另一个Web网站中,实现网站展现效果的实时推送.对此,笔者尝试使用Hes

Windows下底层数据包发送实战

1.简介 所谓“底层数据包”指的是在“运行”于数据链路层的数据包,简单的说就是“以太网帧”,而我们常用的Socket只能发送“运行”在传输层的TCP.UDP等包,这些传输层数据包已经能满足绝大部分需求,但是有些时候还是需要发送底层数据包的(例如SYN扫描),那么如何发送呢? 本文记录了我试图实现的过程中遇到的一些问题以及解决办法,需要注明:①本文只考虑Windows上的实现  ②本文主要目的是实现发送部分  ③本文假定读者理解网络分层结构和一些基本的网络编程方法  ④本文只是在讨论常规技术,切勿