Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5760448
  • 博文数量: 675
  • 博客积分: 20301
  • 博客等级: 上将
  • 技术积分: 7671
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-31 16:15
文章分类

全部博文(675)

文章存档

2012年(1)

2011年(20)

2010年(14)

2009年(63)

2008年(118)

2007年(141)

2006年(318)

分类: C/C++

2006-10-25 14:44:41

Winpcap的发包功能

 

Winpcap也有一定的发包功能,只是比较弱而已,而且没有平台的兼容性,只是为Win32设计的,Unix下面使用Libnet来发包,Windows下可以使用LibnetNT来实现发包的功能。

 

#include

#include

/*

#ifndef HAVE_REMOTE

    #define HAVE_REMOTE

#endif

*/

#include

 

void main()

{

    pcap_if_t *alldevs,*d;

pcap_t *fp;

char errbuf[PCAP_ERRBUF_SIZE];

u_char packet[100];

int inum,i=0;

 

 

 /* Retrieve the device list on the local machine */

    if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1)

    {

        fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);

        exit(1);

    }

 

    /* Print the list */

    for(d=alldevs; d; d=d->next)

    {

        printf("%d. %s", ++i, d->name);

        if (d->description)

            printf(" (%s)\n", d->description);

        else

            printf(" (No description available)\n");

    }

 

    if(i==0)

    {

        printf("\nNo interfaces found! Make sure WinPcap is installed.\n");

        return ;

    }

 

    printf("Enter the interface number (1-%d):",i);

    scanf("%d", &inum);

 

    if(inum < 1 || inum > i)

    {

        printf("\nInterface number out of range.\n");

        /* Free the device list */

        pcap_freealldevs(alldevs);

        return ;

    }

 

    /* Jump to the selected adapter */

    for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++);

 

 

    /* Open the output device */

    if ( (fp= pcap_open(d->name,            // name of the device

                        100,                // portion of the packet to capture (only the first 100 bytes)

                        PCAP_OPENFLAG_PROMISCUOUS,  // promiscuous mode

                        1000,               // read timeout

                        NULL,               // authentication on the remote machine

                        errbuf              // error buffer

                        ) ) == NULL)

    {

        fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name);

        return;

    }

 

    /* Supposing to be on ethernet, set mac destination to 1:1:1:1:1:1 */

    packet[0]=1;

    packet[1]=1;

    packet[2]=1;

    packet[3]=1;

    packet[4]=1;

    packet[5]=1;

 

    /* set mac source to 2:2:2:2:2:2 */

    packet[6]=2;

    packet[7]=2;

    packet[8]=2;

    packet[9]=2;

    packet[10]=2;

    packet[11]=2;

 

    /* Fill the rest of the packet */

    for(i=12;i<100;i++)

    {

        packet[i]=i%256;

    }

 

    /* Send down the packet */

    if (pcap_sendpacket(fp, packet, 100 /* size */) != 0)

    {

        fprintf(stderr,"\nError sending the packet: \n", pcap_geterr(fp));

        return;

    }

 

    return;

}

 

使用Ethereal捕包查看:

 

阅读(5699) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~