程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <pcap.h>
#include <errno.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(int argc, char **argv) {
char *dev; /* name of the device to use */
char *net; /* dot notation of the network address*/
char *mask; /* dot notation of the network mask*/
int ret;
char errbuf[PCAP_ERRBUF_SIZE];
bpf_u_int32 netp; /* ip */
bpf_u_int32 maskp; /* subnet mask */
struct in_addr addr;
/* ask pcap to find a valid device for use to sniff on */
dev = pcap_lookupdev(errbuf);
/*error checking */
if(dev == NULL) {
printf("%s\n",errbuf);
exit(1);
}
/* print out device name */
printf("DEV: %s\n",dev);
/* ask pcap for the network address and mask of the device */
ret = pcap_lookupnet(dev, &netp, &maskp, errbuf);
if(ret == -1) {
printf("%s\n",errbuf);
exit(1);
}
addr.s_addr = netp;
net = inet_ntoa(addr);
if(net == NULL) {
perror("inet_ntoa");
exit(1);
}
printf("NET: %s\n",net);
addr.s_addr = maskp;
mask = inet_ntoa(addr);
if(mask == NULL) {
perror("inet_ntoa");
exit(1);
}
printf("MASK: %s\n",mask);
return 0;
}
#include <stdlib.h>
#include <pcap.h>
#include <errno.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(int argc, char **argv) {
char *dev; /* name of the device to use */
char *net; /* dot notation of the network address*/
char *mask; /* dot notation of the network mask*/
int ret;
char errbuf[PCAP_ERRBUF_SIZE];
bpf_u_int32 netp; /* ip */
bpf_u_int32 maskp; /* subnet mask */
struct in_addr addr;
/* ask pcap to find a valid device for use to sniff on */
dev = pcap_lookupdev(errbuf);
/*error checking */
if(dev == NULL) {
printf("%s\n",errbuf);
exit(1);
}
/* print out device name */
printf("DEV: %s\n",dev);
/* ask pcap for the network address and mask of the device */
ret = pcap_lookupnet(dev, &netp, &maskp, errbuf);
if(ret == -1) {
printf("%s\n",errbuf);
exit(1);
}
addr.s_addr = netp;
net = inet_ntoa(addr);
if(net == NULL) {
perror("inet_ntoa");
exit(1);
}
printf("NET: %s\n",net);
addr.s_addr = maskp;
mask = inet_ntoa(addr);
if(mask == NULL) {
perror("inet_ntoa");
exit(1);
}
printf("MASK: %s\n",mask);
return 0;
}
编译的时候是
$ gcc -lpcap -o capture capture.c
执行的时候要用root,否则没反应
$ sudo ./capture
注一下in_addr 结构体提醒
#include <netinet/in.h>
struct sockaddr_in {
short sin_family; // e.g. AF_INET
unsigned short sin_port; // e.g. htons(3490)
struct in_addr sin_addr; // see struct in_addr, below
char sin_zero[8]; // zero this if you want to
};
struct in_addr {
unsigned long s_addr; // load with inet_aton()
};
[ 本帖最后由 madfrogme 于 2012-8-9 21:12 编辑 ]