设为主页
收藏本站
当前位置: >
首页
->
Linux技术
->
网络应用
->
截获流经本机网卡的IP数据包
相关分类:
入门与提高
系统管理
网络应用
嵌入式系统
内核研究
服务器相关
发行版专区
Linux程序设计
Linux安全
BSD相关
桌面应用
站内搜索:
智能模糊搜索
仅搜索标题
使用Linux L2TP/IPsec VPN 服务器
(04-22)
让你的Linux用起来跟Windows无异(图
(08-15)
Linux代理服务器和防火墙配置详细解
(05-28)
高手进阶 学会做嵌入式Linux操作系统
(06-03)
如何在Linux下查看已经安装了哪些软
(04-25)
解决Linux系统下管道被接受方关闭的
(04-24)
Linux操作系统下三种配置环境变量的
(04-24)
Ubuntu新版Linux免费下载与Novell竞
(04-24)
Linux操作系统下图形界面模式更改IP
(04-24)
把IE收藏夹导出到Ubuntu系统下的Fire
(04-24)
截获流经本机网卡的IP数据包
作者:
Webmaster
来源:
linuxdby.com
点击:
日期:
2007-04-12 [
收藏
] [
投稿
]
IE是否经常中毒?推荐您
从事
网络
安全的技术人员和相当一部分准黑客(指那些使用现成的黑客软件进行攻击而不是根据需要去自己编写代码的人)都一定不会对
网络
嗅探器(sniffer)感到陌生,
网络
嗅探器无论是在
网络
安全还是在黑客攻击方面均扮演了很重要的角色。通过使用
网络
嗅探器可以把网卡设置于混杂模式,并可实现对
网络
上传输的数据包的捕获与分析。此分析结果可供
网络
安全分析之用,但如为黑客所利用也可以为其发动进一步的攻击提供有价值的信息。可见,嗅探器实际是一把双刃剑。 虽然
网络
嗅探器技术被黑客利用后会对
网络
安全构成一定的威胁,但嗅探器本身的危害并不是很大,主要是用来为其他黑客软件提供
网络
情报,真正的攻击主要是由其他黑软来完成的。而在
网络
安全方面,
网络
嗅探手段可以有效地探测在
网络
上传输的数据包信息,通过对这些信息的分析利用是有助于
网络
安全维护的。权衡利弊,有必要对
网络
嗅探器的实现原理进行介绍。
嗅探器设计原理
嗅探器作为一种
网络
通讯程序,也是通过对网卡的编程来实现
网络
通讯的,对网卡的编程也是使用通常的套接字(socket)方式来进行。但是,通常的套接字程序只能响应与自己硬件地址相匹配的或是以广播形式发出的数据帧,对于其他形式的数据帧比如已到达
网络
接口但却不是发给此地址的数据帧,
网络
接口在验证投递地址并非自身地址之后把不引起响应,也就是说应用程序无法收取到达的数据包。而
网络
嗅探器的目的恰恰在于从网卡接收所有经过它的数据包,这些数据包即可以是发给它的也可以是发往别处的。显然,要达到此目的就不能再让网卡按通常的正常模式工作,而必须把其设置为混杂模式。
具体到编程实现上,这种对网卡混杂模式的设置是通过原始套接字(raw socket)来实现的,这也有别于通常经常使用的数据流套接字和数据报套接字。在创建了原始套接字后,需要通过setsockopt()函数来设置IP头操作选项,然后再通过bind()函数把原始套接字绑定到本地网卡。为了让原始套接字能接受所有的数据,还需要通过ioctlsocket()来进行设置,而且还可以指定是否亲自处理IP头。至此,实际就可以开始对
网络
数据包进行嗅探了,对数据包的获取仍象流式套接字或数据报套接字那样通过recv()函数来完成。但是与其他两种套接字不同的是,原始套接字此时捕获到的数据包并不仅仅是单纯的数据信息,而是包含有 IP头、 TCP头等信息头的最原始的数据信息,这些信息保留了它在
网络
传输时的原貌。通过对这些在低层传输的原始信息的分析可以得到有关
网络
的一些信息。由于这些数据经过了
网络
层和传输层的打包,因此需要根据其附加的帧头对数据包进行分析。下面先给出结构.数据包的总体结构:
数据包
IP头 TCP头(或其他信息头) 数据
数据在从应用层到达传输层时,把添加TCP数据段头,或是UDP数据段头。其中UDP数据段头比较简单,由一个8字节的头和数据部分组成,具体格式如下:
16位 16位
源端口 目的端口
UDP长度 UDP校验和
而TCP数据头则比较复杂,以20个固定字节开始,在固定头后面还可以有一些长度不固定的可选项,下面给出TCP数据段头的格式组成:
16位 16位
源端口 目的端口
顺序号
确认号
TCP头长 (保留)7位 URG ACK PSH RST SYN FIN 窗口大小
校验和 紧急指针
可选项(0或更多的32位字)
数据(可选项)
对于此TCP数据段头的分析在编程实现中可通过数据结构_TCP来定义:
typedef struct _TCP{ WORD SrcPort; // 源端口
WORD DstPort; // 目的端口
DWORD SeqNum; // 顺序号
DWORD AckNum; // 确认号
BYTE DataOff; // TCP头长
BYTE Flags; // 标志(URG、ACK等)
WORD Window; // 窗口大小
WORD Chksum; // 校验和
WORD UrgPtr; // 紧急指针
} TCP;
typedef TCP *LPTCP;
typedef TCP UNALIGNED * ULPTCP;
在
网络
层,还要给TCP数据包添加一个IP数据段头以组成IP数据报。IP数据头以大端点机次序传送,从左到右,版本字段的高位字节先传输(SPARC是大端点机;Pentium是小端点机)。如果是小端点机,就要在发送和接收时先行转换然后才能进行传输。IP数据段头格式如下:
16位 16位
版本 IHL 服务类型 总长
标识 标志 分段偏移
生命期 协议 头校验和
源地址
目的地址
选项(0或更多)
如果您对本文有任何疑问或者建议,请到讨论区发表您的意见:
>> 论坛入口 <<
上一页
1
2
3
下一页
上一篇:
独辟蹊径实现Linux下的 局域网远程接入
下一篇:
Squid实现反向代理并且具备内网代理
【
文章评论
】 【
收藏本文
】 【
推荐好友
】 【
打印本文
】 【
我要投稿
】 【
论坛讨论
】
相关文章:
·
解决Linux系统下管道被接受方关闭的问题
·
Linux操作系统下三种配置环境变量的方法
·
Ubuntu新版Linux免费下载与Novell竞争激
·
Linux操作系统下图形界面模式更改IP地址
·
把IE收藏夹导出到Ubuntu系统下的Firefox
·
Ubuntu Linux系统使用Vim进行Rails编码
·
在Linux Debian操作系统下成功安装E17桌
·
第二届年度红帽创新奖颁予创新科技成就
·
分析称Linux可在2013年占有20%移动市场
·
KDE和GNOME两大阵营将携手共创Linux桌面
文章评论:
(1条)
请留名:
匿名评论
点击查看所有评论
论坛讨论
声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。