Libpcap是Packet Capture Libray的英文缩写,即数据包捕获开源的C函数库,用于捕获网卡数据或分析pcap格式的抓包报文。Tcpdump和wireshark均是以此为基础的。
主要功能有:网络报文抓取;网络报文的构建;抓包文件的分析;自定义BFP过滤。
网络报文是按照协议层次逐层构建的,简单按照四层协议来理解就是在应用层数据和协议的基础上构建传输层报文,在传输层协议的基础上构建网络层报文,在网络层报文的基础上构建数据链路/物理层报文。
展示如下图:
libcap主要用于网络嗅探,如下图:
基于libcap的应用一般处理过程:
1、打开网络接口
2、打开离线的pcap文件
3、抓包函数
4、过滤函数编译
5、设置过滤函数
6、释放网络接口
7、打开网络包保存文件
8、将网络包写入文件
9、网络包文件关闭
数据结构说明:
报文号是网络交换传输的数据编号,wireshark中可以直接获取报文号并分析报文内容。
Wireshark(前称Ethereal)是一个免费的网络报文分析软件。网络报文分析软件的功能是抓取网络报文,并逐层显示报文中各字段取值。
网络报文分析软件有个形象的名字“嗅探工具”,像一只猎狗,忠实地守候在接口旁,抓获进出该进口的报文,分析其中携带的信息,判断是否有异常,是网络故障原因分析的一个有力工具。
网络报文分析软件曾经非常昂贵,Ethereal/wireshark 开源软件的出现改变了这种情况。
在GNUGPL通用许可证的保障范围底下,使用者可以以免费的代价取得软件与其源代码,并拥有针对其源代码修改及客制化的权利。Ethereal/wireshark 是目前世界使用最广泛的网络报文分析软件之一。
报文(message)是网络中交换与传输的数据单元,即站点一次性要发送的数据块。报文包含了将要发送的完整的数据信息,其长短很不一致,长度不限且可变。
报文就是在各个系统之间进行请求和响应时用来交换信息的,还需要遵守规定好的格式。
另外,应用报文多是多个系统之间需要通信的时候,比如银行的ESB系统到网关系统再到银联系统。在这中间报文就承担了装载数据,运输数据的功能,可能在这三个系统中报文的格式互不相同,但是承载的数据都是一样的。
报文的认证方式有传统加密方式的认证、使用密钥的报文认证码方式、使用单向散列函数的认证和数字签名认证方式。
虽然黑客攻击的手法多种多样,但就目前来说,绝大多数中初级黑客们所采用的手法和工具仍具有许多共性。从大的方面来划分的话,归纳起来一般不外乎以下几种:1、网络报文嗅探网络嗅探其实最开始是应用于网络管理的,就像远程控制软件一样,但随着黑客们的发现,这些强大的功能就开始被客们利用。最普遍的安全威胁来自内部,同时这些威胁通常都是致命的,其破坏性也远大于外部威胁。其中网络嗅探对于安全防护一般的网络来说,使用这种方法 *** 作简单,而且同时威胁巨大。很多黑客也使用嗅探器进行网络入侵的渗透。网络嗅探器对信息安全的威胁来自其被动性和非干扰性,使得网络嗅探具有很强的隐蔽性,往往让网络信息泄密变得不容易被发现。
嗅探器是利用计算机的网络接口,截获目的计算机数据报文的一种技术。不同传输介质的网络的可监听性是不同的。一般来说,以太网被监听的可能性比较高,因为以太网是一个广播型的网络;FDDI Token被监听的可能性也比较高,尽管它不是一个广播型网络,但带有令牌的那些数据包在传输过程中,平均要经过网络上一半的计算机;微波和无线网被监听的可能性同样比较高,因为无线电本身是一个广播型的传输媒介,弥散在空中的无线电信号可以被很轻易的截获。
嗅探器工作在网络的底层,把受影视的计算机的网络传输全部数据记录下来。虽然嗅探器经常初网管员用来进行网络管理,可以帮助网络管理员查找网络漏洞和检测网络性能、分析网络的流量,以便找出所关心的网络中潜在的问题。但目前却在黑客中的应用似乎更加广泛,使人们开始对这类工具敬而远之。2、地址欺骗IP地址欺骗攻击是黑客们假冒受信主机(要么是通过使用你网络IP地址范围内的IP,要么是通过使用你信任,并可提供特殊资源位置访问的外部IP地址)对目标进行攻击。在这种攻击中,受信主机指的是你拥有管理控制权的主机或你可明确做出“信任”决定允许其访问你网络的主机。通常,这种IP地址欺骗攻击局限于把数据或命令注入到客户/服务应用之间,或对等网络连接传送中已存在的数据流。为了达到双向通讯,攻击者必须改变指向被欺骗IP地址的所有路由表。 IP地址攻击可以欺骗防火墙,实现远程攻击。以上介绍的报文嗅探,IP欺骗的攻击者不限于外部网络,在内部网络中同样可能发生,所以在企业网络内部同样要做好相关防御措施。 3、密码攻击 密码攻击通过多种不同方法实现,包括蛮力攻击(brute force attack),特洛伊木马程序,IP欺骗和报文嗅探。尽管报文嗅探和IP欺骗可以捕获用户账号和密码,但密码攻击通常指的反复的试探、验证用户账号或密码。这种反复试探称之为蛮力攻击。通常蛮力攻击使用运行于网络上的程序来执行,并企图注册到共享资源中,例如服务器。当攻击者成功的获得了资源的访问权,他就拥有了和那些账户被危及以获得其资源访问权的用户有相同的权利。如果这些账户有足够夺得特权,攻击者可以为将来的访问创建一个后门,这样就不用担心被危及用户账号的任何身份和密码的改变。 4、拒绝服务攻击 拒绝服务(Denial of Service,DoS)攻击是目前最常见的一种攻击类型。从网络攻击的各种方法和所产生的破坏情况来看,DoS算是一种很简单,但又很有效的进攻方式。它的目的就是拒绝你的服务访问,破坏组织的正常运行,最终使你的网络连接堵塞,或者服务器因疲于处理攻击者发送的数据包而使服务器系统的相关服务崩溃、系统资源耗尽。
DoS的攻击方式有很多种,最基本的DoS攻击就是利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务。DoS攻击的基本过程:首先攻击者向服务器发送众多的带有虚假地址的请求,服务器发送回复信息后等待回传信息。由于地址是伪造的,所以服务器一直等不到回传的消息,然而服务器中分配给这次请求的资源就始终没有被释放。当服务器等待一定的时间后,连接会因超时而被切断,攻击者会再度传送新的一批请求,在这种反复发送伪地址请求的情况下,服务器资源最终会被耗尽。
这类攻击和其他大部分攻击不同的是,因为他们不是以获得网络或网络上信息的访问权为目的,而是要使受攻击方耗尽网络、 *** 作系统或应用程序有限的资源而崩溃,不能为其他正常其他用户提供服务为目标。这就是这类攻击被称之为“拒绝服务攻击”的真正原因。
当涉及到特殊的网络服务应用,象HTTP或FTP服务,攻击者能够获得并保持所有服务器支持的有用连接,有效地把服务器或服务的真正使用者拒绝在外面。大部分拒绝服务攻击是使用被攻击系统整体结构上的弱点,而不是使用软件的小缺陷或安全漏洞。然而,有些攻击通过采用不希望的、无用的网络报文掀起网络风暴和提供错误的网络资源状态信息危及网络的性能。
DDoS(Distributed Denial of Service,分布式拒绝服务)是一种基于DoS的特殊形式的分布、协作式的大规模拒绝服务攻击。也就是说不再是单一的服务攻击,而是同时实施几个,甚至十几个不同服务的拒绝攻击。由此可见,它的攻击力度更大,危害性当然也更大了。它主要瞄准比较大的网站,象商业公司,搜索引擎和政府部门的Web站点。
要避免系统遭受DoS攻击,从前两点来看,网络管理员要积极谨慎地维护整个系统,确保无安全隐患和漏洞;而针对第三点的恶意攻击方式则需要安装防火墙等安全设备过滤DoS攻击,同时强烈建议网络管理员定期查看安全设备的日志,及时发现对系统存在安全威胁的行为。 5、应用层攻击 应用层攻击能够使用多种不同的方法来实现,最平常的方法是使用服务器上通常可找到的应用软件(如SQL Server、Sendmail、PostScript和FTP)缺陷。通过使用这些缺陷,攻击者能够获得计算机的访问权,以及该计算机上运行相应应用程序所需账户的许可权。
应用层攻击的一种最新形式是使用许多公开化的新技术,如HTML规范、Web浏览器的 *** 作性和HTTP协议等。这些攻击通过网络传送有害的程序,包括JAVA applet和Active X控件等,并通过用户的浏览器调用它们,很容易达到入侵、攻击的目的。虽然微软公司前段时间提供的代码验证技术可以使用户的Active X控件因安全检查错误而暂停这类攻击,但攻击者已经发现怎样利用适当标记和有大量漏洞的Active X控件使之作为特洛伊木马实施新的攻击方式。这一技术可使用VBScript脚本程序直接控制执行隐蔽任务,如覆盖文件,执行其他文件等,预防、查杀的难度更大。
在应用层攻击中,容易遭受攻击的目标包括路由器、数据库、Web和FTP服务器和与协议相关的服务,如DNS、WINS和SMB。
答案:报文传输方面面临的安全威胁:窃听、插人、假冒、劫持等;
(1)窃听指的是在报文传输过程中窃听信息,获取报文信息。
(2)插入威胁指的是攻击者主动在连接中插入信息,混淆信息,让接收信息者收到虚假信息。
(3)假冒指的是可以伪造分组中的源地址(或者分组的任意其他字段)。
(4)劫持指的是通过移除取代发送方或者接收方“接管”连接。
网络数据报文的拦截有很多层面的拦截,不知道你想讨论的是什么层面的拦截\x0d\\x0d\1)网卡层面的截获(截获和自己同网段的计算机发送的信息,包括送往自己的数据包)\x0d\这个拦截过程得从网络数据包发送和接受原理说起\x0d\一个网络数据报文的发送过程是这样的:\x0d\a)发送方的应用层将要发送的数据报文,通过Socket调用提交TCP/IP层\x0d\b)TCP/IP层经过层层封装,将这些数据报文封装成IP数据报文,送往数据链路层,一般以太网用的是802X的桢结构,封装成数据祯。\x0d\c)以太网数据链路层是使用一个叫做MAC地址的东西来标识网口的,每一网口的MAC地址都是世界唯一的。\x0d\d)数据链路层将目的方的MAC地址和自己的MAC地址分别填入目标MAC和源MAC的字段中,发送到物理层(也就是网线上)\x0d\网络数据报文的接受过程是这样的:\x0d\每个网卡在收到物理链路上发送来的数据桢之后,都会自动检测收到的这个MAC地址是否和自己的网卡MAC地址相同,如果相同,则接受,否则就丢弃。\x0d\这样就可以实现对于数据包的过滤过程。\x0d\\x0d\而很多网络拦截工具,例如Sniffer或者Ethereal,都将网卡的这个功能给打破了。\x0d\他们定义了一个网卡所谓的混杂模式,在这里,网卡不管收到的这个数据包是否是给自己的(目的MAC和自己网卡的MAC是否相同),都往上层送,都能对数据流进行分析。\x0d\这个是网络层面拦截的基本原理。\x0d\\x0d\2)应用层和Socket层面的拦截\x0d\这个方法主要是通过系统Hook的方式来实现,例如一台计算机打算往网络发送东西,一般情况下应用程序都不会自己开发网络协议层,都会 \x0d\\x0d\其实我的 原理就是 百度无所不能。
字节流是由字节组成的,
字节流是最基本的,所有的InputStrem和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的
字符流和字节流都是什么
流就是stream 一个连续的字节队列。
流是程序输入或输出的一个连续的字节序列,设备(例如鼠标,键盘,磁盘,屏幕和打印机)的输入和输出都是用流来处理的。在C语言中,所有的流均以文件的形式出现---不一定是物理磁盘文件,还可以是对应与某个输入/输出源的逻辑文件
流(streams)在I/O系统中是一种I/O机制和功能,或者称为streams子系统。它本身并不是一个物理设备的概念。
引入流的目的:
传统的字符设备驱动程序框架有许多缺点,这表现在:
。内核与字符设备驱动程序间接口的抽象层次太高
。内核没有为字符设备提供可靠的缓冲区分配和管理功能
。许多系统对字符设备的界面是把数据看成是FIFO(先进先出)的字节流,因此没有识别消息边界,区分普通设备和控制信息,以及判定不同消息优先级的能力,也没有字节流流量控制
。在网络数据传输设备中这些问题更突出。网络中数据传输是基于消息或数据分组的。
流的概念:
用通讯中的术语来说,流是全双工的处理过程,它是内核中驱动程序和用户进程之间的数据传输通道。
从流的构造上来说,它由一个流头,一个流驱动程序尾,以及其间的零个或若干个可选模块构成 。流头是一个用户级接口,它允许用户应用程序通过系统调用接口来访问流。驱动程序尾与底层设备通信。在流的中间的模块是处理数据的。
字节流与字符流主要的区别是他们的的处理对象
字节流是由字节组成的,字符流是由字符组成的 Java里字符由两个字节组成
字节流是最基本的,所有的InputStrem和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的
但实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟机的encode来处理,也就是要进行字符集的转化。在从字节流转化为字符流时,实际上就是byte[]转化为String时,
public String(byte bytes[], String charsetName)
有一个关键的参数字符集编码,通常我们都省略了,那系统就用 *** 作系统默认的lang
流式传输主要指将整个音频和视频及三维媒体等多媒体文件经过特定的压缩方式解析成一个个压缩包,由视频服务器向用户计算机顺序或实时传送。在采用流式传输方式的系统中,用户不必像采用下载方式那样等到整个文件全部下载完毕,而是只需经过几秒或几十秒的启动延时即可在用户的计算机上利用解压设备对压缩的A/V、3D等多媒体文件解压后进行播放和观看。此时多媒体文件的剩余部分将在后台的服务器内继续下载。
报文是网络中交换与传输的数据单元。报文包含了将要发送的完整的数据信息,其长短很不一致。(可分为自由报文和数字报文)
报文也是网络传输的单位,传输过程中会不断的封装成分组、包、帧来传输,封装的方式就是添加一些信息段,那些就是报文头
以一定格式组织起来的数据
比如里面有报文类型, 报文版本, 报文长度, 报文实体等等信息
完全与系统定义, 或自定义的数据结构同义
来几个 TCP/IP 头结构感受一下:
typedef struct _iphdr //定义IP首部
{
unsigned char h_lenver; //4位首部长度+4位IP版本号
unsigned char tos; //8位服务类型TOS
unsigned short total_len; //16位总长度(字节)
unsigned short ident; //16位标识
unsigned short frag_and_flags; //3位标志位
unsigned char ttl; //8位生存时间 TTL
unsigned char proto; //8位协议 (TCP, UDP 或其他)
unsigned short checksum; //16位IP首部校验和
unsigned int sourceIP; //32位源IP地址
unsigned int destIP; //32位目的IP地址
}IP_HEADER;
typedef struct psd_hdr //定义TCP伪首部
{
unsigned long saddr; //源地址
unsigned long daddr; //目的地址
char mbz;
char ptcl; //协议类型
unsigned short tcpl; //TCP长度
}PSD_HEADER;
typedef struct _tcphdr //定义TCP首部
{
USHORT th_sport; //16位源端口
USHORT th_dport; //16位目的端口
unsigned int th_seq; //32位序列号
unsigned int th_ack; //32位确认号
unsigned char th_lenres; //4位首部长度/6位保留字
unsigned char th_flag; //6位标志位
USHORT th_win; //16位窗口大小
USHORT th_sum; //16位校验和
USHORT th_urp; //16位紧急数据偏移量
}TCP_HEADER;
// 这里只是数据头, 但头最能让你看清报文是啥东东
// IP_HEADER::total_len 指明了实体数据(也就是真正的消息内容)长度
// 其他以此类推
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)