1、打开网址:www.tcpdump.org/ 下载 libpcap-1.0.0.tar.gz (512.0KB) 软件包,通过命令 tar zxvf libpcap-1.0.0.tar.gz 解压文件,并将其放入自定义的安装目录。
2、打开网址:flex.sourceforge.net/ 下载 flex-2.5.35.tar.gz (1.40MB) 软件包,通过 tar zxvf flex-2.5.35.tar.gz 解压文件,并将其放入上述自定义的安装目录中。
注:如果没有编译安装此文件,在编译安装libpcap时,就会出现 “configure: error: Your operating system's lex is insufficient to compile libpcap.”的错误提示。
3、打开网址:ftp.gnu.org/gnu/bison/ 下载 bison-2.4.1.tar.gz (1.9MB) 软件包,通过 tar zxvf bison-2.4.1.tar.gz 解压文件,并将其放入上述自定义的安装目录中。
注:如果没有编译安装此文件,在编译安装libpcap时,就会出现 "configure: WARNING: don't have both flex and bison; reverting to lex/yacc checking for capable lex... insufficient" 的错误提示。
4、打开网址:ftp.gnu.org/gnu/m4/ 下载 m4-1.4.13.tar.gz (1.2MB)软件包,通过 tar zxvf m4-1.4.13.tar.gz 解压文件,并将其放入上述自定义的安装目录中。
注:如果没有编译安装此文件,在编译安装bison-2.4.1时,就会出现 “configure: error: GNU M4 1.4 is required”的错误提示。
5、而后依次进入目录m4-1.4.13,bison-2.4.1,flex-2.5.35,libpcap-1.0.0 并执行以下命令:
(sudo) ./configure
(sudo) make
(sudo) make install
二、简单的抓包程序,程序来源于http://recursos.aldabaknocking.com/libpcapHakin9LuisMartinGarcia.pdf,这个pdf讲的是如何使用libpcap来做sniffer。
- #include <string.h>
- #include <stdlib.h>
- #include <pcap.h>
- #define MAXBYTE2CAPTURE 2048
- void processPacket(u_char *arg, const struct pcap_pkthdr *pkthdr, const u_char *packet) {
- int i = 0, *counter = (int *)arg;
- printf("Packet Count: %d\n", ++(*counter));
- printf("Received Packet Size: %d\n", pkthdr->len);
- printf("Payload:\n");
- for (i = 0; i < pkthdr->len; i++) {
- if (isprint(packet[i]))
- printf("%c ", packet[i]);
- else
- printf(". ");
- if ((i % 16 == 0 && i != 0) || i == pkthdr->len-1)
- printf("\n");
- }
- return;
- }
- int main() {
- int i = 0, count = 0;
- pcap_t *descr = NULL;
- char errbuf[PCAP_ERRBUF_SIZE], *device = NULL;
- memset(errbuf, 0, PCAP_ERRBUF_SIZE);
- /* Get the name of the first device suitable for capture */
- device = pcap_lookupdev(errbuf);
- printf("Opening device %s\n", device);
- /* Open device in promiscuous mode */
- descr = pcap_open_live(device, MAXBYTE2CAPTURE, 1, 512, errbuf);
- /* Loop forever & call processPacket() for every received packet */
- pcap_loop(descr, -1, processPacket, (u_char *)&count);
- return 0;
- }