本篇文字旨在编写一个具备基本功能的网络嗅觉器,英文中有对应的词是sniffer,并且已经有一款商业软件名字就是sniffer,当然是收费的。
关于以第三方库来写网络嗅觉器,我会在后续的文章中提到。第三方库主要指的是pcap(linux版本)/WinPcap(windows版本)。
关于网络嗅觉器功能:
- 抓取进站包
- 抓取出战包
- 分析包中的内容
我们以linux为开发环境,使用socket。
通常大家在开发网络应用程序的所创建的socket的类型为
SOCK_STREAM
SOCK_DGRAM
也就是流式套接字和数据包套接字。所对应的协议分别是TCP和UDP。例如:
s = socket(AF_INET , SOCK_STREAM, IPPROTO_TCP);
但是这样,我们只能抓到某一端口的tcp的包(因为这种方式,后面一定要使用bind函数跟某个端口绑定),因此我们采用
SOCK_RAW
这种套接字
s = socket(AF_INET , SOCK_RAW , IPPROTO_TCP);
使用这个套接字就可以抓取所有进站数据包:
s = socket(AF_INET , SOCK_RAW , IPPROTO_TCP);
while( true )
{
recvfrom( s , buffer , buflen, 0 , &saddr , &nsaddr);
}
其全部代码:
参考:
http://www.binarytides.com/packet-sniffer-code-c-linux/
http://www.binarytides.com/packet-sniffer-code-in-c-using-linux-sockets-bsd-part-2/
版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.