Fedora下libpcap使用
Fedora一般都自带libpcap了,但是缺少pcap.h,所以要安装一下
yum install libpcap*
完成之后locate一下看看是不是在/usr/lib下
网上找的小程序:
//test.c
#include
#include
int main(int argc, char *argv[])
{
char *dev, errbuf[PCAP_ERRBUF_SIZE];
dev = pcap_lookupdev(errbuf);
if (dev ==NULL)
{
fprintf(stderr, "can't find default device: %s\n", errbuf);
return 2;
}
printf("device: %s\n", dev);
return 0;
}
编译:gcc test.c -lpcap
没报错,不过运行就出事了:
./a.out: error while loading shared libraries: libpcap.so.1: cannot open shared object file: No such file or directory
ldconfig一下,ldconfig: /usr/lib/libnet.so.1 is not a symbolic link
我猜是libpcap和libnet版本不对??不知道……我最恨软链接这种事……之前编伪造包程序的时候,libnet库这个链接那个链接的就搞死我了……
瞧瞧。。。
[root@localhost ~]# locate libnet.so.1
/root/libnet-1.1.4/src/.libs/libnet.so.1
/root/libnet-1.1.4/src/.libs/libnet.so.1.5.0
/usr/lib/libnet.so.1
/usr/lib/libnet.so.1.5.0
/usr/local/include/libnet.so.1.5.0
/usr/local/lib/libnet.so.1
/usr/local/lib/libnet.so.1.5.0
到/usr/local/lib下查看一下是怎么链接的:
[root@localhost lib]# ll |grep libnet.so
lrwxrwxrwx 1 root root 15 2010-09-03 07:36 libnet.so -> libnet.so.1.5.0
lrwxrwxrwx 1 root root 15 2010-09-03 07:36 libnet.so.1 -> libnet.so.1.5.0
-rwxr-xr-x 1 root root 324919 2010-09-03 07:36 libnet.so.1.5.0
好了,到/usr/lib下照着做链接……
[root@localhost lib]# ln -s libnet.so.1.5.0 libnet.so.1
看看对不对哦……
[root@localhost lib]# ll |grep libnet.so
-rwxr-xr-x 1 root root 324919 2010-09-03 07:53 libnet.so
lrwxrwxrwx 1 root root 15 2010-09-12 22:26 libnet.so.1 -> libnet.so.1.5.0
-rwxr-xr-x 1 root root 324919 2010-09-03 07:53 libnet.so.1.5.0
[root@localhost lib]# ldconfig 没错了
返回test.c的目录,祈祷一下,再编译一下
运行:
[root@localhost ~]# ./a.out
device: eth0
内牛满面啊……
安装必须的软件包libpcap0.8-dev,注意是dev包而不是libpcap0.8,因为我们开发需要必须的头文件。
在编译的时候,需要注意一些地方,指定编译链接库。
#gcc get_a_packet_code.c -o get_a_packet_code -lpcap
yum install libpcap*
完成之后locate一下看看是不是在/usr/lib下
网上找的小程序:
//test.c
#include
#include
int main(int argc, char *argv[])
{
char *dev, errbuf[PCAP_ERRBUF_SIZE];
dev = pcap_lookupdev(errbuf);
if (dev ==NULL)
{
fprintf(stderr, "can't find default device: %s\n", errbuf);
return 2;
}
printf("device: %s\n", dev);
return 0;
}
编译:gcc test.c -lpcap
没报错,不过运行就出事了:
./a.out: error while loading shared libraries: libpcap.so.1: cannot open shared object file: No such file or directory
ldconfig一下,ldconfig: /usr/lib/libnet.so.1 is not a symbolic link
我猜是libpcap和libnet版本不对??不知道……我最恨软链接这种事……之前编伪造包程序的时候,libnet库这个链接那个链接的就搞死我了……
瞧瞧。。。
[root@localhost ~]# locate libnet.so.1
/root/libnet-1.1.4/src/.libs/libnet.so.1
/root/libnet-1.1.4/src/.libs/libnet.so.1.5.0
/usr/lib/libnet.so.1
/usr/lib/libnet.so.1.5.0
/usr/local/include/libnet.so.1.5.0
/usr/local/lib/libnet.so.1
/usr/local/lib/libnet.so.1.5.0
到/usr/local/lib下查看一下是怎么链接的:
[root@localhost lib]# ll |grep libnet.so
lrwxrwxrwx 1 root root 15 2010-09-03 07:36 libnet.so -> libnet.so.1.5.0
lrwxrwxrwx 1 root root 15 2010-09-03 07:36 libnet.so.1 -> libnet.so.1.5.0
-rwxr-xr-x 1 root root 324919 2010-09-03 07:36 libnet.so.1.5.0
好了,到/usr/lib下照着做链接……
[root@localhost lib]# ln -s libnet.so.1.5.0 libnet.so.1
看看对不对哦……
[root@localhost lib]# ll |grep libnet.so
-rwxr-xr-x 1 root root 324919 2010-09-03 07:53 libnet.so
lrwxrwxrwx 1 root root 15 2010-09-12 22:26 libnet.so.1 -> libnet.so.1.5.0
-rwxr-xr-x 1 root root 324919 2010-09-03 07:53 libnet.so.1.5.0
[root@localhost lib]# ldconfig 没错了
返回test.c的目录,祈祷一下,再编译一下
运行:
[root@localhost ~]# ./a.out
device: eth0
内牛满面啊……
安装必须的软件包libpcap0.8-dev,注意是dev包而不是libpcap0.8,因为我们开发需要必须的头文件。
在编译的时候,需要注意一些地方,指定编译链接库。
#gcc get_a_packet_code.c -o get_a_packet_code -lpcap