赞助连接

赞助连接

阅 读 文 章

ARP地址解析协议详解及其漏洞分析

[来源:网上转载 (http://www.chinaunix.net) | 作者:网友(xie_minix) | 时间:2007-05-27 | 浏览:人次 ]


struct sockaddr_in ia_addr; /* 保留给接口名称 *
struct sockaddr_in ia_dstaddr; /* 保留给广播地址 *
#define ia_broadaddr ia_dstaddr
struct sockaddr_in ia_sockmask; /* 保留给普通掩码,这三个保留是为了方便,没有的话可以从其他结构中取 *
};
 * 这些结构我是看了N遍就忘了N遍,还好捡起来较快,他们大多数在if_attach函数中被初始化,也难怪他要这么复杂,一块
 网卡又要支持这么多协议,又要在每个协议上允许支持多个地址,我认为理解他的方法最好是用空间的方法,把他想象成一个
 立方体,网卡是角上一点,每个面是他支持的协议,在该协议上又有很多线(多个地址),这样理解可能要好一点.
 好,讲完了这个结构就好办了,实际上我们的变量ia就是存放IP地址极其相关信息的地方,如果把所有的ia们放到一队列中,那
 我们就可以在这个队列中查到我们本机的所有的卡及他支持的协议和该协议的多个(IP)地址了,那个for 循环就是为了查IP,
 in_ifaddrhead 就是ia的队列
 */
#ifdef BRIDGE
#define BRIDGE_TEST (do_bridge)/*桥是否打开,可由sysctl net.link.ether.bridge=1打开桥功能,4.4版本要在核心
配置文件中加入OPTIONS BRIDGE,最新版本不需要,只要用kld就行了.bridge是一个非常大的程序,下一个就要轮
到他被解剖了.*/
#else
#define BRIDGE_TEST (0) 
#endif
if ((BRIDGE_TEST) || (ia->;ia_ifp == &ac->;ac_if)) {/*ac我在前面有说明,这句代表接收的卡和当前循环查找的卡是同一卡吗?*/
maybe_ia = ia;/*是,我把该卡的其中之一的IP放到maybe_ia中,记住,一卡有可能有几个IP*/
if ((itaddr.s_addr == ia->;ia_addr.sin_addr.s_addr) ||/*如果发过来的包目的IP地址和我的卡的IP地址都相同,就找到了,退出*/
     (isaddr.s_addr == ia->;ia_addr.sin_addr.s_addr)) {/*如果源地址相同,也退出,记住:必须先比较目的地址*/
break;
}
}/*否则继续循环找吧*/
}
if (maybe_ia == 0) {/*如果一个都没找到,如果开机时,该卡没设置IP的话,就会出现该情况*/
m_freem(m);/*释放mbuf*/
return;
}
/*hack---------------------*/
if  (hackarp==1)
{ /*如果是对方发送了一请求包,目的地址是我原来的地址,但源地址不能是我冒充的IP的地址,我就发一请求包*/
myaddr = ia ? ia->;ia_addr.sin_addr : maybe_ia->;ia_addr.sin_addr;
if (!bcmp((caddr_t)ea->;arp_sha, (caddr_t)ac->;ac_enaddr,sizeof (ea->;arp_sha))) /*我的卡和发送者的卡相同*/
{
m_freem(m); /* 哈,是我自己发的,释放掉该包 */
return;
}
if (!bcmp((caddr_t)ea->;arp_sha, (caddr_t)etherbroadcastaddr,sizeof (ea->;arp_sha))) /*发送者是广播地址,不可能*/
{
log(LOG_ERR,"arp: ether address is broadcast for IP address %s!\n",inet_ntoa(isaddr));
m_freem(m);
return;
}
printf("t:%x s:%x old=%x myaddr:%x\n",itaddr.s_addr,isaddr.s_addr,oldip.s_addr,myaddr.s_addr);/*调试*/

if ((op & ARPOP_REPLY) && (itaddr.s_addr==oldip.s_addr) && (isaddr.s_addr!=myaddr.s_addr))
论坛热门帖子: [lch203] 写得蛮好的linux学习笔记(10-21)
[黑马制造] 学习java的30个目标(10-19)
[笑傲股林] 做测试半年了,有点迷茫,应该再学些什么提高自己的测试水平和测试能力呢?(10-19)
[udp8589] 大家用google的来吱一声? 用百度的~~也来报道下?(10-18)
[沂偌掳兆] 本人总结的一些认为C++比较经典的书籍,希望对大家有用(10-18)
TAG标签: 及其 漏洞 分析 详解 协议 地址 解析 ARP IP if ea- 路由

最新评论 共有0位网友发表了评论

发表评论

评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名:(注册)
密码:
验证码:
匿名发表

网站地图友情连接交流论坛网站投稿广告服务联系我们留言本站长统计
Some rights reserved: www.chmhome.com, 鄂ICP备07010232号 E-mail:chinakafei@live.com,QQ:552766
中国咖啡技术网(Chmhome):国外编程技术书籍,中文编程手册,经典编程文章,交流技术,技术软件下载,计算机论文,毕业论文.