包过滤技术的防火墙设计与实现

wddp17 2008-01-08 11:30:27
各位大虾 小弟最近一问题 着急回复 等待各位大虾的支持 谁能帮我解决下这个问题 用语言实现了 不胜感激
实验内容:
共享式局域网采用的是广播信道,也就是说每台主机所发出的帧都会被整个网络内的所有主机接收到。接收主机对帧的处理根据网卡的工作模式来实现。一般网卡具有一下4种工作模式:广播模式,多播模式,直播模式和混杂模式。网卡缺省工作模式是工作在广播和直播模式下的,即只能接收发送给自己和广播的帧。正常情况下接收主机的网卡根据帧中所包含的目标MAC地址或是广播MAC地址进行判断,若等于自己的MAC地址或是广播MAC地址,则提交给上层处理程序,否则丢弃此数据包。当网卡处于混杂模式的时候,它不作任何判断直接把接收到的所有帧交给上层处理程序。网络监听技术就是基于这个原理,来捕获网络中所有的数据包,实现网络监测和流量分析的。
交换式以太网是基于数据链路层的点到点的信道,所以简单采用应用于共享式以太网的监听技术是完全失效的。本文主要讨论共享式以太网的情况,最后给出交换式以太网监听难题的解决方案。
监听技术相关的实现方法,原始套接字编程模式:
Raw Socket: 原始套接字
可以用它来发送和接收 IP 层以上的原始数据包, 如 ICMP, TCP, UDP...
1.创建了一个 Raw Socket
int sockRaw=socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
2. 把网卡置于混杂模式
用 Raw Socket 实现代码如下:
setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeof(flag));
设置 IP 头操作选项。flag 标志是用来设置 IP 头操作的, bool flag = ture 也就是说要亲自处理 IP 头。
bind(sockRaw,(PSOCKADDR)&addrLocal,sizeof(addrLocal);
把 sockRaw 绑定到本地网卡上,addrLocal 为本地地址: SOCKADDR_IN addrLocal。
ioctlsocket(sockRaw, SIO_RCVALL, &dwValue);
让 sockRaw 接受所有的数据。dwValue 为输入输出参数, 为 1 时执行, 0 时取消: DWORD dwValue = 1;
3.捕获数据包
recv(sockRaw, RecvBuf, BUFFER_SIZE, 0);//接受任意数据包
原始套接字编程模式:
优点: 实现简单, 不需要做驱动程序就可实现抓包.
缺点: 数据包头不含帧信息,不能接收到与 IP 同层的其它数据包,如ARP,RARP,IPX…

4.Winpcap编程模式
Winpcap(windows packet capture)是windows平台下一个免费,公共的网络访问系统。开发Winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。它提供了以下的各项功能:
l 获原始数据报,包括在共享式网络上各主机发送/接收的以及相互之间交换的数据报;
l 在数据报发往应用程序之前,按照自定义的规则将某些特殊的数据报过滤掉;
l 在网络上发送原始的数据报;
l 收集网络通信过程中的统计信息。
5.实验完成功能:
l 捕获功能
根据过滤器的设置,捕获ip,arp,ipx,tcp,udp,ospf,icmp,spx,ipx-rip等数据包,并把数据包保存在应用程序的缓冲区内。
l 过滤功能
用户自己定义过滤信息(特定协议进行捕获),也就说用户可能只需要了解网络中某种类型的数据包的信息,而不需要捕获太多无用的数据,一方面系统负担比较大,另一方面干扰信息过多不利于用户发现网络中存在的问题。
l 保存功能
在捕获的过程中,每十秒钟,把统计信息写入文件中,等待图表显示功能模块提取信息。保存功能还根据管理功能的需要,保存数据。如果管理功能被启动,系统将满足管理要求的主机IP地址,记录在IP数据集合中。等待管理子系统从中提取IP地址,实现管理功能。
...全文
639 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ztj111 2008-01-08
  • 打赏
  • 举报
回复
这个好像有一本书实现了吧,《linux网络入侵检测系统》
awpatp 2008-01-08
  • 打赏
  • 举报
回复
沙发!
totoorange 2008-01-08
  • 打赏
  • 举报
回复
和我当年毕业设计一样的,只不过我用的是WINPCAP实现的,之前也直接用套接字写的 VC6写的 网上有很多代码可以参考,比如sniffer这样的一些软件
去看看几本书:

《Windows防火墙与网络封包截获技术》
《Visual C++工程应用与项目实践》

如果用WINPCAP或者在linux下的LIPCAP编程再看看

《网络安全开发包详解》

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧