/*
* Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy)
* Copyright (c) 2005 - 2006 CACE Technologies, Davis (California)
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the Politecnico di Torino, CACE Technologies
* nor the names of its contributors may be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
#include "pcap.h"
/* 4 bytes IP address */
typedef struct ip_address
{
u_char byte1;
u_char byte2;
u_char byte3;
u_char byte4;
}ip_address;
/* IPv4 header */
typedef struct ip_header
{
u_char ver_ihl; // Version (4 bits) + Internet header length (4 bits)
u_char tos; // Type of service
u_short tlen; // Total length
u_short identification; // Identification
u_short flags_fo; // Flags (3 bits) + Fragment offset (13 bits)
u_char ttl; // Time to live
u_char proto; // Protocol
u_short crc; // Header checksum
ip_address saddr; // Source address
ip_address daddr; // Destination address
u_int op_pad; // Option + Padding
}ip_header;
/* UDP header*/
typedef struct udp_header
{
u_short sport; // Source port
u_short dport; // Destination port
u_short len; // Datagram length
u_short crc; // Checksum
}udp_header;
/* prototype of the packet handler */
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);
main()
{
pcap_if_t *alldevs;
pcap_if_t *d;
int inum;
int i=0;
pcap_t *adhandle;
char errbuf[PCAP_ERRBUF_SIZE];
u_int netmask;
char packet_filter[] = "ip and udp";
struct bpf_program fcode;
/* Retrieve the device list */
if(pcap_findalldevs(&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 -1;
}
printf("Enter the interface number (1-%d):",i);
scanf("%d", &inum);
/* Check if the user specified a valid adapter */
if(inum < 1 || inum > i)
{
printf("\nAdapter number out of range.\n");
/* Free the device list */
pcap_freealldevs(alldevs);
return -1;
}
/* Jump to the selected adapter */
for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++);
/* Open the adapter */
if ((adhandle= pcap_open_live(d->name, // name of the device
65536, // portion of the packet to capture.
// 65536 grants that the whole packet will be captured on all the MACs.
1, // promiscuous mode (nonzero means promiscuous)
1000, // read timeout
errbuf // error buffer
)) == NULL)
{
fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n");
/* Free the device list */
pcap_freealldevs(alldevs);
return -1;
}
/* Check the link layer. We support only Ethernet for simplicity. */
if(pcap_datalink(adhandle) != DLT_EN10MB)
{
fprintf(stderr,"\nThis program works only on Ethernet networks.\n");
/* Free the device list */
pcap_freealldevs(alldevs);
return -1;
}
if(d->addresses != NULL)
/* Retrieve the mask of the first address of the interface */
netmask=((struct sockaddr_in *)(d->addresses->netmask))->sin_addr.S_un.S_addr;
else
/* If the interface is without addresses we suppose to be in a C class network */
netmask=0xffffff;
//compile the filter
if (pcap_compile(adhandle, &fcode, packet_filter, 1, netmask) <0 )
{
fprintf(stderr,"\nUnable to compile the packet filter. Check the syntax.\n");
/* Free the device list */
pcap_freealldevs(alldevs);
return -1;
}
//set the filter
if (pcap_setfilter(adhandle, &fcode)<0)
{
fprintf(stderr,"\nError setting the filter.\n");
/* Free the device list */
pcap_freealldevs(alldevs);
return -1;
}
printf("\nlistening on %s...\n", d->description);
/* At this point, we don't need any more the device list. Free it */
pcap_freealldevs(alldevs);
/* start the capture */
pcap_loop(adhandle, 0, packet_handler, NULL);
return 0;
}
/* Callback function invoked by libpcap for every incoming packet */
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)
{
struct tm *ltime;
char timestr[16];
ip_header *ih;
udp_header *uh;
u_int ip_len;
u_short sport,dport;
/* convert the timestamp to readable format */
ltime=localtime(&header->ts.tv_sec);
strftime( timestr, sizeof timestr, "%H:%M:%S", ltime);
/* print timestamp and length of the packet */
printf("%s.%.6d len:%d ", timestr, header->ts.tv_usec, header->len);
/* retireve the position of the ip header */
ih = (ip_header *) (pkt_data +
14); //length of ethernet header
/* retireve the position of the udp header */
ip_len = (ih->ver_ihl & 0xf) * 4;
uh = (udp_header *) ((u_char*)ih + ip_len);
/* convert from network byte order to host byte order */
sport = ntohs( uh->sport );
dport = ntohs( uh->dport );
/* print ip addresses and udp ports */
printf("%d.%d.%d.%d.%d -> %d.%d.%d.%d.%d\n",
ih->saddr.byte1,
ih->saddr.byte2,
ih->saddr.byte3,
ih->saddr.byte4,
sport,
ih->daddr.byte1,
ih->daddr.byte2,
ih->daddr.byte3,
ih->daddr.byte4,
dport);
}
没有合适的资源?快使用搜索试试~ 我知道了~
Examples-pcap.rar_pcap_winpcap arp
共155个文件
obj:23个
pch:20个
idb:20个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 108 浏览量
2022-07-15
17:17:09
上传
评论
收藏 16.48MB RAR 举报
温馨提示
利用c++编写程序调用winpcap捉取arp包
资源推荐
资源详情
资源评论
收起资源包目录
Examples-pcap.rar_pcap_winpcap arp (155个子文件)
udpdump.c 7KB
pktdump_ex.c 5KB
iflist.c 5KB
pcap_filter.c 4KB
savedump.c 3KB
basic_dump_ex.c 2KB
basic_dump.c 2KB
sendpack.c 1KB
readfile.c 1KB
readfile_ex.c 1KB
UDPdump.dsp 5KB
basic_dump.dsp 5KB
basic_dump_ex.dsp 4KB
readfile_ex.dsp 4KB
savedump.dsp 4KB
readfile.dsp 4KB
sendpack.dsp 4KB
pktdump_ex.dsp 4KB
pcap_filter.dsp 4KB
iflist.dsp 4KB
MakeaAll.dsw 2KB
basic_dump_ex.dsw 549B
pcap_filter.dsw 545B
readfile_ex.dsw 545B
pktdump_ex.dsw 543B
basic_dump.dsw 543B
readfile.dsw 539B
savedump.dsw 539B
sendpack.dsw 539B
UDPdump.dsw 537B
iflist.dsw 535B
basic_dump_ex.exe 200KB
savedump.exe 180KB
readfile_ex.exe 168KB
readfile.exe 168KB
sendpack.exe 168KB
pf.exe 168KB
basic_dump.exe 52KB
basic_dump_ex.exe 52KB
savedump.exe 44KB
pktdump_ex.exe 44KB
readfile.exe 40KB
pf.exe 40KB
sendpack.exe 40KB
readfile_ex.exe 40KB
GNUmakefile 346B
GNUmakefile 340B
GNUmakefile 337B
GNUmakefile 331B
GNUmakefile 331B
GNUmakefile 331B
GNUmakefile 325B
GNUmakefile 325B
GNUmakefile 322B
GNUmakefile 322B
GNUmakefile 273B
vc60.idb 49KB
vc60.idb 41KB
vc60.idb 41KB
vc60.idb 41KB
vc60.idb 41KB
vc60.idb 41KB
vc60.idb 41KB
vc60.idb 41KB
vc60.idb 41KB
vc60.idb 41KB
vc60.idb 41KB
vc60.idb 41KB
vc60.idb 41KB
vc60.idb 41KB
vc60.idb 41KB
vc60.idb 41KB
vc60.idb 41KB
vc60.idb 41KB
vc60.idb 33KB
vc60.idb 33KB
basic_dump_ex.ilk 214KB
savedump.ilk 189KB
pf.ilk 179KB
readfile_ex.ilk 174KB
sendpack.ilk 174KB
readfile.ilk 173KB
IPHlpApi.lib 35KB
udpdump.obj 17KB
pktdump_ex.obj 15KB
savedump.obj 15KB
basic_dump.obj 15KB
basic_dump.obj 14KB
basic_dump_ex.obj 14KB
pcap_filter.obj 14KB
readfile.obj 12KB
readfile_ex.obj 12KB
sendpack.obj 12KB
sendpack.obj 12KB
sendpack.obj 12KB
sendpack.obj 12KB
udpdump.obj 5KB
pktdump_ex.obj 5KB
savedump.obj 4KB
basic_dump_ex.obj 4KB
共 155 条
- 1
- 2
资源评论
林当时
- 粉丝: 98
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功