📄 main.cpp
字号:
#include "pcap.h"
#pragma comment(lib,"packet.lib")
#pragma comment(lib,"wpcap.lib")
// //获得网卡 的列表
//main()
//{
// //pcap_if_t *alldevs;
// //pcap_if_t *d;
// //int i=0;
// //char errbuf[PCAP_ERRBUF_SIZE];
//
// ///* 这个API用来获得网卡 的列表 */
// //if (pcap_findalldevs(&alldevs, errbuf) == -1)
// //{
// // fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);
// // exit(1);
// //}
//
// ///* 显示列表的响应字段的内容 */
// //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;
// //}
//
// ///* We don‘t need any more the device list. Free it */
// //pcap_freealldevs(alldevs);
// //获得网卡 的列表
//}
//
////网络驱动器的高级信息
//#include "pcap.h"
//#ifndef WIN32
//#include <sys/socket.h>
//#include <netinet/in.h>
//#else
//#include <winsock.h>
//#endif
//void ifprint(pcap_if_t *d);
//char *iptos(u_long in);
//int main()
//{
// pcap_if_t *alldevs;
// pcap_if_t *d;
// char errbuf[PCAP_ERRBUF_SIZE+1];
// /* 获得网卡的列表 */
// if (pcap_findalldevs(&alldevs, errbuf) == -1)
// {
// fprintf(stderr,"Error in pcap_findalldevs: %s\n",errbuf);
// exit(1);
// }
// /* 循环调用ifprint() 来显示pcap_if结构的信息*/
// for(d=alldevs;d;d=d->next)
// {
// ifprint(d);
// }
// return 1;
//}
///* Print all the available information on the given interface */
//void ifprint(pcap_if_t *d)
//{
// pcap_addr_t *a;
// /* Name */
// printf("%s\n",d->name);
// /* Description */
// if (d->description)
// printf("\tDescription: %s\n",d->description);
// /* Loopback Address*/
// printf("\tLoopback: %s\n",(d->flags & PCAP_IF_LOOPBACK)?"yes":"no");
// /* IP addresses */
// for(a=d->addresses;a;a=a->next) {
// printf("\tAddress Family: #%d\n",a->addr->sa_family);
// /*关于 sockaddr_in 结构请参考其他的网络编程书*/
// switch(a->addr->sa_family)
// {
// case AF_INET:
// printf("\tAddress Family Name: AF_INET\n");//打印网络地址类型
// if (a->addr)//打印IP地址
// printf("\tAddress: %s\n",iptos(((struct sockaddr_in *)a->addr)->sin_addr.s_addr));
// if (a->netmask)//打印掩码
// printf("\tNetmask: %s\n",iptos(((struct sockaddr_in *)a->netmask)->sin_addr.s_addr));
// if (a->broadaddr)//打印广播地址
// printf("\tBroadcast Address: %s\n",iptos(((struct sockaddr_in *)a->broadaddr)->sin_addr.s_addr));
// if (a->dstaddr)//目的地址
// printf("\tDestination Address: %s\n",iptos(((struct sockaddr_in *)a->dstaddr)->sin_addr.s_addr));
// break;
// default:
// printf("\tAddress Family Name: Unknown\n");
// break;
// }
// }
// printf("\n");
//}
///* 将一个unsigned long 型的IP转换为字符串类型的IP */
//#define IPTOSBUFFERS 12
//char *iptos(u_long in)
//{
// static char output[IPTOSBUFFERS][3*4+3+1];
// static short which;
// u_char *p;
// p = (u_char *)∈
// which = (which + 1 == IPTOSBUFFERS ? 0 : which + 1);
// sprintf(output[which], "%d.%d.%d.%d", p[0], p[1], p[2], p[3]);
// return output[which];
//}
/* 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];
/* 获得网卡的列表 */
if (pcap_findalldevs(&alldevs, errbuf) == -1)
{
fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);
exit(1);
}
/* 打印网卡信息 */
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); //输入要选择打开的网卡号
if(inum < 1 || inum > i) //判断号的合法性
{
printf("\nInterface number out of range.\n");
/* Free the device list */
pcap_freealldevs(alldevs);
return -1;
}
/* 找到要选择的网卡结构 */
for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++);
/* 打开选择的网卡 */
if ( (adhandle= pcap_open_live(d->name, // 设备名称
65536, // portion of the packet to capture.
// 65536 grants that the whole packet will be captured on all the MACs.
1, // 混杂模式
1000, // 读超时为1秒
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;
}
printf("\nlistening on %s...\n", d->description);
/* At this point, we don‘t need any more the device list. Free it */
pcap_freealldevs(alldevs);
/* 开始捕获包 */
pcap_loop(adhandle, -1, packet_handler, NULL);
return 0;
}
/* 对每一个到来的数据包调用该函数 */
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)
{
struct tm *ltime;
char timestr[16];
/* 将时间戳转变为易读的标准格式*/
ltime=localtime(&header->ts.tv_sec);
strftime( timestr, sizeof timestr, "%H:%M:%S", ltime);
printf("%s,%.6d len:%d\n", timestr, header->ts.tv_usec, header->len);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -