当前位置: 技术问答>linux和unix
Linux下抓包问题 请做过的指点指点 谢谢
来源: 互联网 发布时间:2016-11-15
本文导语: 毕设要做一个在linux下抓包加协议分析的工具。希望做过的前辈们能指点指点,谢谢。 问题: 1 图形化界面用什么,qt吗?linux下我只编过命令行的程序,要是用qt的话都需要安装什么,配置什么?对linux版本有...
毕设要做一个在linux下抓包加协议分析的工具。希望做过的前辈们能指点指点,谢谢。
问题:
1 图形化界面用什么,qt吗?linux下我只编过命令行的程序,要是用qt的话都需要安装什么,配置什么?对linux版本有要求吗?会不会发生我在这个linux系统开发完换个别的linux系统就运行不了了的问题呀?
2 抓包用什么方法? 我知道的有socket和libpcap,我想问socket是只能捕获到ip层以上的数据包吗?我想要捕获所有的tcp/ip协议族的数据包应该用什么方法?
3 大家给推荐几本这方面的书,例如socket和libpcap编程的,和图形化界面开发的。
重点是第二个问题,最好能具体说说数据包如何从网卡到你自己定义的缓冲区,程序员在这个过程都需要做什么,而操作系统又做了什么。
问题:
1 图形化界面用什么,qt吗?linux下我只编过命令行的程序,要是用qt的话都需要安装什么,配置什么?对linux版本有要求吗?会不会发生我在这个linux系统开发完换个别的linux系统就运行不了了的问题呀?
2 抓包用什么方法? 我知道的有socket和libpcap,我想问socket是只能捕获到ip层以上的数据包吗?我想要捕获所有的tcp/ip协议族的数据包应该用什么方法?
3 大家给推荐几本这方面的书,例如socket和libpcap编程的,和图形化界面开发的。
重点是第二个问题,最好能具体说说数据包如何从网卡到你自己定义的缓冲区,程序员在这个过程都需要做什么,而操作系统又做了什么。
|
1 图形化界面用什么,qt吗?linux下我只编过命令行的程序,要是用qt的话都需要安装什么,配置什么?对linux版本有要求吗?会不会发生我在这个linux系统开发完换个别的linux系统就运行不了了的问题呀?
第一个问题qt可以和c结合,c的语言你可以用extern "c"这种来修饰,编译;
2 抓包用什么方法? 我知道的有socket和libpcap,我想问socket是只能捕获到ip层以上的数据包吗?我想要捕获所有的tcp/ip协议族的数据包应该用什么方法?
linux的内核里面是支持抓取数据包的.你捕获了数据包后要自己解析,把socket设置成混杂模式就可以了.如果感觉实现比较复杂就可以用winpcap工具来实现,具体要查winpcap的使用手册
给你点抓取ip数据包的代码
3 大家给推荐几本这方面的书,例如socket和libpcap编程的,和图形化界面开发的。
http://topic.csdn.net/t/20061218/17/5239135.html
这个链接也写了相关的代码,你可以试试看.
第一个问题qt可以和c结合,c的语言你可以用extern "c"这种来修饰,编译;
2 抓包用什么方法? 我知道的有socket和libpcap,我想问socket是只能捕获到ip层以上的数据包吗?我想要捕获所有的tcp/ip协议族的数据包应该用什么方法?
linux的内核里面是支持抓取数据包的.你捕获了数据包后要自己解析,把socket设置成混杂模式就可以了.如果感觉实现比较复杂就可以用winpcap工具来实现,具体要查winpcap的使用手册
给你点抓取ip数据包的代码
int main(void)
{
int sockfd;
struct ip *ip;
char buf[100], sip[INET_ADDRSTRLEN], dip[INET_ADDRSTRLEN];
ssize_t n;
/* capture ip datagram without ethernet header */
if ((sockfd = socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_IP))) == -1)
err_sys("socket");
while (1) {
if ((n = read(sockfd, buf, sizeof(buf))) == -1)
err_sys("read");
ip = (struct ip *)buf;
if (inet_ntop(AF_INET, &ip->ip_src, sip, sizeof(sip)) == NULL)
err_sys("inet_ntop");
if (inet_ntop(AF_INET, &ip->ip_dst, dip, sizeof(dip)) == NULL)
err_sys("inet_ntop");
printf("sip: %s dip: %srn", sip, dip);
}
exit(0);
}
void err_sys(const char *errmsg)
{
perror(errmsg);
exit(1);
}
3 大家给推荐几本这方面的书,例如socket和libpcap编程的,和图形化界面开发的。
http://topic.csdn.net/t/20061218/17/5239135.html
这个链接也写了相关的代码,你可以试试看.
|
1.一般是使用QT或GTK2。,前者使用起来比较方便,Nokia的文档写的也很好。配置什么的你上网一搜就行了。不建议用RedHat,QT4支持不好,用Ubuntu或Federa都行。
2.我只用过wireshark,还有命令行的工具tcpdump,据说也不错。
3.抓包的话看你的效率要求了,一般libpcap足够,否则要用涉及底层的东西,也有,忘记叫什么了。
2.我只用过wireshark,还有命令行的工具tcpdump,据说也不错。
3.抓包的话看你的效率要求了,一般libpcap足够,否则要用涉及底层的东西,也有,忘记叫什么了。
|
1:Qt是可以的。
2:libpcap应该可以,linux上的wireshark就是基于libpcap的,windows上的是基于winpcap的。http://www.tcpdump.org/ 上Documentation上有例子,很简单就可以实现抓到包。
3:http://www.tcpdump.org/ 看看这个地址上的Documentation,有教libpcap怎么用的。
2:libpcap应该可以,linux上的wireshark就是基于libpcap的,windows上的是基于winpcap的。http://www.tcpdump.org/ 上Documentation上有例子,很简单就可以实现抓到包。
3:http://www.tcpdump.org/ 看看这个地址上的Documentation,有教libpcap怎么用的。
|
图形界面
C++ 用Qt
C 用GTK+
配置自己慢慢整,不会就google
C++ 用Qt
C 用GTK+
配置自己慢慢整,不会就google
|
qt是可以的,请先确定课题是否一定要界面,参考http://qt.nokia.com/title-cn
Sniffer和wireshark都是常见的抓包工具,可以参考它们的源码
Sniffer和wireshark都是常见的抓包工具,可以参考它们的源码