导航:首页 > 网络安全 > 网络安全开发包详解

网络安全开发包详解

发布时间:2022-07-09 07:20:03

网络安全什么

什么是网络安全?

vpn

虚拟专用网(VPN): VPN是另一种网络安全类型,能够加密从端点到网络(主要是通过Internet)的连接。远程访问VPN通常使用IPsec或安全套接字层来认证网络和设备之间的通信。

无线安全性:随着无线网络和接入点的发展,移动办公运动正在迅速发展。但是,无线网络不如有线网络安全,这为黑客进入提供了空间。因此,确保无线安全性至关重要。应该注意的是,如果没有严格的安全措施,安装无线局域网可能就像在各处放置以太网端口一样。必须使用专门设计用于保护无线网络的产品,以防止发生利用漏洞。

端点安全性: 端点安全性(也称为网络保护或网络安全性)是一种通过远程设备(例如便携式计算机或其他一些无线设备和移动设备)进行访问时用于保护公司网络的方法。例如,Comodo Advanced Endpoint Protection软件提供了七层防御,包括病毒处理、文件信誉、自动沙盒、主机入侵防护、Web URL过滤、防火墙和防病毒软件。所有这些都在一个产品中提供,以保护它们免受未知和已知威胁的侵害。

网络访问控制(NAC):此网络安全过程可帮助您控制哪些人可以访问您的网络。必须识别每个设备和用户,以阻止潜在的攻击者。这确实可以帮助您实施安全策略。不合规的端点设备只能被授予有限的访问权限,也可以被阻止。

技术网络保护:技术网络保护用于保护网络中的数据。技术网络保护可以保护恶意软件和未经授权的人员存储和传输中的数据。

物理网络保护:物理网络保护或物理网络安全性是一种网络安全措施,旨在防止未经授权的人员物理干扰网络组件。门锁和ID通行证是物理网络保护的重要组成部分。

管理网络保护:管理网络保护是一种控制用户网络行为和访问的安全方法。它还在执行IT基础结构变更时为IT人员提供了标准的操作程序。

② 等待好心人:libdnet

兰州牛肉拉面

③ 网络安全包括哪些方面

网络安全应包括:企业安全制度、数据安全、传输安全、服务器安全、防火墙安全(硬件或软件实现、背靠背、DMZ等)、防病毒安全。

如何网络抓包

很明白你想干什么
不过不是三言两语可以做到的
首先,你想抓包,需要依赖一个库(windows下叫winpcap, linux下叫libpcap)
这个包提供了很多接口,运行后你可以进行抓包
然后介绍你一本书:《网络安全开发包详解》,当年做网络安全的入门级书啊
这本书目前市面上已经绝版了(只有印刷版和二手的能买,如果你经常需要用,建议买一本,比电子书方便),不过你可以下载到电子版的,如果需要我也能传给你一份
然后你想实现的例子,只需要把书看前几章就可以了,看到介绍winpcap/libpcap怎么用就可以了。

⑤ 网络安全包括几方面的内容

网络安全是一个关系国家安全和主权、社会的稳定、民族文化的继承和发扬的重要问题。其重要性,正随着全球信息化步伐的加快而变到越来越重要。“家门就是国门”,安全问题刻不容缓。

网络安全是一门涉及计算机科学、网络技术、通信技术、密码技术、信息安全技术、应用数学、数论、信息论等多种学科的综合性学科。

网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不受偶然的或者恶意的原因而遭到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断。

网络安全从其本质上来讲就是网络上的信息安全。从广义来说,凡是涉及到网络上信息的保密性、完整性、可用性、真实性和可控性的相关技术和理论都是网络安全的研究领域。

网络安全的具体含义会随着“角度”的变化而变化。比如:从用户(个人、企业等)的角度来说,他们希望涉及个人隐私或商业利益的信息在网络上传输时受到机密性、完整性和真实性的保护,避免其他人或对手利用窃听、冒充、篡改、抵赖等手段侵犯用户的利益和隐,? 问和破坏。

从网络运行和管理者角度说,他们希望对本地网络信息的访问、读写等操作受到保护和控制,避免出现“陷门”、病毒、非法存取、拒绝服务和网络资源非法占用和非法控制等威胁,制止和防御网络黑客的攻击。

对安全保密部门来说,他们希望对非法的、有害的或涉及国家机密的信息进行过滤和防堵,避免机要信息泄露,避免对社会产生危害,对国家造成巨大损失。

从社会教育和意识形态角度来讲,网络上不健康的内容,会对社会的稳定和人类的发展造成阻碍,必须对其进行控制。

2、增强网络安全意识刻不容缓

随着计算机技术的飞速发展,信息网络已经成为社会发展的重要保证。信息网络涉及到国家的政府、军事、文教等诸多领域。其中存贮、传输和处理的信息有许多是重要的政府宏观调控决策、商业经济信息、银行资金转帐、股票证券、能源资源数据、科研数据等重要信息。有很多是敏感信息,甚至是国家机密。所以难免会吸引来自世界各地的各种人为攻击(例如信息泄漏、信息窃取、数据篡改、数据删添、计算机病毒等)。同时,网络实体还要经受诸如水灾、火灾、地震、电磁辐射等方面的考验。

近年来,计算机犯罪案件也急剧上升,计算机犯罪已经成为普遍的国际性问题。据美国联邦调查局的报告,计算机犯罪是商业犯罪中最大的犯罪类型之一,每笔犯罪的平均金额为45000美元,每年计算机犯罪造成的经济损失高达50亿美元。

计算机犯罪大都具有瞬时性、广域性、专业性、时空分离性等特点。通常计算机罪犯很难留下犯罪证据,这大大刺激了计算机高技术犯罪案件的发生。

计算机犯罪案率的迅速增加,使各国的计算机系统特别是网络系统面临着很大的威胁,并成为严重的社会问题之一。

3、网络安全案例

96年初,据美国旧金山的计算机安全协会与联邦调查局的一次联合调查统计,有53%的企业受到过计算机病毒的侵害,42%的企业的计算机系统在过去的12个月被非法使用过。而五角大楼的一个研究小组称美国一年中遭受的攻击就达25万次之多。

94年末,俄罗斯黑客弗拉基米尔?利文与其伙伴从圣彼得堡的一家小软件公司的联网计算机上,向美国CITYBANK银行发动了一连串攻击,通过电子转帐方式,从CITYBANK银行在纽约的计算机主机里窃取1100万美元。

96年8月17日,美国司法部的网络服务器遭到黑客入侵,并将“ 美国司法部” 的主页改为“ 美国不公正部” ,将司法部部长的照片换成了阿道夫?希特勒,将司法部徽章换成了纳粹党徽,并加上一幅色情女郎的图片作为所谓司法部部长的助手。此外还留下了很多攻击美国司法政策的文字。

96年9月18日,黑客又光顾美国中央情报局的网络服务器,将其主页由“中央情报局” 改为“ 中央愚蠢局” 。

96年12月29日,黑客侵入美国空军的全球网网址并将其主页肆意改动,其中有关空军介绍、新闻发布等内容被替换成一段简短的黄色录象,且声称美国政府所说的一切都是谎言。迫使美国国防部一度关闭了其他80多个军方网址。

4、我国计算机互连网出现的安全问题案例

96年2月,刚开通不久的Chinanet受到攻击,且攻击得逞。

97年初,北京某ISP被黑客成功侵入,并在清华大学“ 水木清华” BBS站的“ 黑客与解密” 讨论区张贴有关如何免费通过该ISP进入Internet的文章。

97年4月23日,美国德克萨斯州内乍得逊地区西南贝尔互联网络公司的某个PPP用户侵入中国互联网络信息中心的服务器,破译该系统的shutdown帐户,把中国互联网信息中心的主页换成了一个笑嘻嘻的骷髅头。

96年初CHINANET受到某高校的一个研究生的攻击;96年秋,北京某ISP和它的用户发生了一些矛盾,此用户便攻击该ISP的服务器,致使服务中断了数小时。

5、不同环境和应用中的网络安全

运行系统安全,即保证信息处理和传输系统的安全。它侧重于保证系统正常运行,避免因为系统的崩溃和损坏而对系统存贮、处理和传输的信息造成破坏和损失,避免由于电磁泄漏,产生信息泄露,干扰他人,受他人干扰。

网络上系统信息的安全。包括用户口令鉴别,用户存取权限控制,数据存取权限、方式控制,安全审计,安全问题跟踪,计算机病毒防治,数据加密。

网络上信息传播安全,即信息传播后果的安全。包括信息过滤等。它侧重于防止和控制非法、有害的信息进行传播后的后果。避免公用网络上大量自由传输的信息失控。

网络上信息内容的安全。它侧重于保护信息的保密性、真实性和完整性。避免攻击者利用系统的安全漏洞进行窃听、冒充、诈骗等有损于合法用户的行为。本质上是保护用户的利益和隐私。

⑥ 网络安全包括哪些内容

⑦ 有socket编程经验或懂得网卡硬件的朋友请进!!!

Winsock没用过,不太清楚。
winpcap(libpcap的Windows版)可以处理二层及以上。

关于缓冲区的问题,你看看是不是这个Nagle算法?

【TCP传输小数据包效率问题(译自MSDN)】
水平有限,错误难免——builder++

摘要:当使用TCP传输小型数据包时,程序的设计是相当重要的。如果在设计方案中不对TCP数据包的延迟应答,Nagle算法,Winsock缓冲作用引起重视,将会严重影响程序的性能。这篇文章讨论了这些问题,列举了两个案例,给出了一些传输小数据包的优化设计方案。

背景:当Microsoft TCP栈接收到一个数据包时,会启动一个200毫秒的计时器。当ACK确认数据包发出之后,计时器会复位,接收到下一个数据包时,会再次启动200毫秒的计时器。为了提升应用程序在内部网和Internet上的传输性能,Microsoft TCP栈使用了下面的策略来决定在接收到数据包后什么时候发送ACK确认数据包:
1、如果在200毫秒的计时器超时之前,接收到下一个数据包,则立即发送ACK确认数据包。
2、如果当前恰好有数据包需要发给ACK确认信息的接收端,则把ACK确认信息附带在数据包上立即发送。
3、当计时器超时,ACK确认信息立即发送。
为了避免小数据包拥塞网络,Microsoft TCP栈默认启用了Nagle算法,这个算法能够将应用程序多次调用Send发送的数据拼接起来,当收到前一个数据包的ACK确认信息时,一起发送出去。下面是Nagle算法的例外情况:
1、如果Microsoft TCP栈拼接起来的数据包超过了MTU值,这个数据会立即发送,而不等待前一个数据
包的ACK确认信息。在以太网中,TCP的MTU(Maximum Transmission Unit)值是1460字节。
2、如果设置了TCP_NODELAY选项,就会禁用Nagle算法,应用程序调用Send发送的数据包会立即被投递到网络,而没有延迟。
为了在应用层优化性能,Winsock把应用程序调用Send发送的数据从应用程序的缓冲区复制到Winsock内核缓冲区。Microsoft TCP栈利用类似Nagle算法的方法,决定什么时候才实际地把数据投递到网络。
内核缓冲区的默认大小是8K,使用SO_SNDBUF选项,可以改变Winsock内核缓冲区的大小。如果有必要的话,Winsock能缓冲大于SO_SNDBUF缓冲区大小的数据。在绝大多数情况下,应用程序完成Send调用仅仅表明数据被复制到了Winsock内核缓冲区,并不能说明数据就实际地被投递到了网络上。唯一一种例外的情况是:
通过设置SO_SNDBUT为0禁用了Winsock内核缓冲区。

Winsock使用下面的规则来向应用程序表明一个Send调用的完成:
1、如果socket仍然在SO_SNDBUF限额内,Winsock复制应用程序要发送的数据到内核缓冲区,完成Send调用。
2、如果Socket超过了SO_SNDBUF限额并且先前只有一个被缓冲的发送数据在内核缓冲区,Winsock复制要发送的数据到内核缓冲区,完成Send调用。
3、如果Socket超过了SO_SNDBUF限额并且内核缓冲区有不只一个被缓冲的发送数据,Winsock复制要发送的数据到内核缓冲区,然后投递数据到网络,直到Socket降到SO_SNDBUF限额内或者只剩余一个要发送的数据,才完成Send调用。

案例1
一个Winsock TCP客户端需要发送10000个记录到Winsock TCP服务端,保存到数据库。记录大小从20字节到100字节不等。对于简单的应用程序逻辑,可能的设计方案如下:
1、客户端以阻塞方式发送,服务端以阻塞方式接收。
2、客户端设置SO_SNDBUF为0,禁用Nagle算法,让每个数据包单独的发送。
3、服务端在一个循环中调用Recv接收数据包。给Recv传递200字节的缓冲区以便让每个记录在一次Recv调用中被获取到。

性能:
在测试中发现,客户端每秒只能发送5条数据到服务段,总共10000条记录,976K字节左右,用了半个多小时才全部传到服务器。

分析:
因为客户端没有设置TCP_NODELAY选项,Nagle算法强制TCP栈在发送数据包之前等待前一个数据包的ACK确认信息。然而,客户端设置SO_SNDBUF为0,禁用了内核缓冲区。因此,10000个Send调用只能一个数据包一个数据包的发送和确认,由于下列原因,每个ACK确认信息被延迟200毫秒:
1、当服务器获取到一个数据包,启动一个200毫秒的计时器。
2、服务端不需要向客户端发送任何数据,所以,ACK确认信息不能被发回的数据包顺路携带。
3、客户端在没有收到前一个数据包的确认信息前,不能发送数据包。
4、服务端的计时器超时后,ACK确认信息被发送到客户端。

如何提高性能:
在这个设计中存在两个问题。
第一,存在延时问题。客户端需要能够在200毫秒内发送两个数据包到服务端。因为客户端默认情况下使用Nagle算法,应该使用默认的内核缓冲区,不应该设置SO_SNDBUF为0。一旦TCP栈拼接起来的数据包超过MTU值,这个数据包会立即被发送,不用等待前一个ACK确认信息。
第二,这个设计方案对每一个如此小的的数据包都调用一次Send。发送这么小的数据包是不很有效率的。在这种情况下,应该把每个记录补充到100字节并且每次调用Send发送80个记录。为了让服务端知道一次总共发送了多少个记录,客户端可以在记录前面带一个头信息。

案例二:
一个Winsock TCP客户端程序打开两个连接和一个提供股票报价服务的Winsock TCP服务端通信。第一个连接作为命令通道用来传输股票编号到服务端。第二个连接作为数据通道用来接收股票报价。两个连接被建立后,客户端通过命令通道发送股票编号到服务端,然后在数据通道上等待返回的股票报价信息。客户端在接收到第一个股票报价信息后发送下一个股票编号请求到服务端。客户端和服务端都没有设置SO_SNDBUF和TCP_NODELAY选项。

性能:
测试中发现,客户端每秒只能获取到5条报价信息。

分析:

这个设计方案一次只允许获取一条股票信息。第一个股票编号信息通过命令通道发送到服务端,立即接收到服务端通过数据通道返回的股票报价信息。然后,客户端立即发送第二条请求信息,send调用立即返回,发送的数据被复制到内核缓冲区。然而,TCP栈不能立即投递这个数据包到网络,因为没有收到前一个数据包的ACK确认信息。200毫秒后,服务端的计时器超时,第一个请求数据包的ACK确认信息被发送回客户端,客户端的第二个请求包才被投递到网络。第二个请求的报价信息立即从数据通道返回到客户端,因为此时,客户端的计时器已经超时,第一个报价信息的ACK确认信息已经被发送到服务端。这个过程循环发生。

如何提高性能:
在这里,两个连接的设计是没有必要的。如果使用一个连接来请求和接收报价信息,股票请求的ACK确认信息会被返回的报价信息立即顺路携带回来。要进一步的提高性能,客户端应该一次调用Send发送多个股票请求,服务端一次返回多个报价信息。如果由于某些特殊原因必须要使用两个单向的连接,客户端和服务端都应该设置TCP_NODELAY选项,让小数据包立即发送而不用等待前一个数据包的ACK确认信息。

提高性能的建议:
上面两个案例说明了一些最坏的情况。当设计一个方案解决大量的小数据包发送和接收时,应该遵循以下的建议:
1、如果数据片段不需要紧急传输的话,应用程序应该将他们拼接成更大的数据块,再调用Send。因为发送缓冲区很可能被复制到内核缓冲区,所以缓冲区不应该太大,通常比8K小一点点是很有效率的。只要Winsock内核缓冲区得到一个大于MTU值的数据块,就会发送若干个数据包,剩下最后一个数据包。发送方除了最后一个数据包,都不会被200毫秒的计时器触发。
2、如果可能的话,避免单向的Socket数据流接连。
3、不要设置SO_SNDBUF为0,除非想确保数据包在调用Send完成之后立即被投递到网络。事实上,8K的缓冲区适合大多数情况,不需要重新改变,除非新设置的缓冲区经过测试的确比默认大小更高效。
4、如果数据传输不用保证可靠性,使用UDP。

⑧ pcap.h是什么头文件

pcap是一个网络开发包(常用于网络安全)
能够构造任意(包括非法的)网络数据包并发送,还能够截获IP数据
比如,可以构造一个数据包,里面的源MAC和IP都是你造假的,然后发到你定义的目的MAC和IP机器上去。

⑨ 怎样用C语言实现网络抓包

  1. 第一法则:站在巨人肩膀上 && 不要重复造轮子。

    对于这种复杂的过程,第一选择是使用现成的,节约时间,提升效率。

    Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。
    网络封包分析软件的功能可想象成 "电工技师使用电表来量测电流、电压、电阻" 的工作 - 只是将场景移植到网络上,并将电线替换成网络线。在过去,网络封包分析软件是非常昂贵,或是专门属于营利用的软件。Ethereal的出现改变了这一切。在GNUGPL通用许可证的保障范围底下,使用者可以以免费的代价取得软件与其源代码,并拥有针对其源代码修改及客制化的权利。Ethereal是目前全世界最广泛的网络封包分析软件之一。

  2. 第二法则:学习 && 提升。

    如果是单纯的学习知识,可以直接尝试写一些具有部分功能的程序,过程会有点艰难,但非常有意义。学习网络编程,需要了解 开放系统互连参考模型的的七层每一层的意义以及现实当中实现的四层的网络协议。然后就可以知道抓包的包位于模型当中的传输层协议,包括UDP和TCP的协议。进一步要学习每种协议的格式,表头,数据包等等。一句话,冰冻三尺非一日之寒。

  3. Windows下的抓包及简单的编程。

    Windows2000在TCP/IP协议组件上做了很多改进,功能也有增强。比如在协议栈上的调整,增大了默认窗口大小,以及高延迟链接新算法。同时在安全性上,可应用IPSec加强安全性,比NT下有不少的改进。
    Microsoft TCP/IP 组件包含“核心协议”、“服务”及两者之间的“接口”。传输驱动程序接口 (TDI) 与网络设备接口规范 (NDIS) 是公用的。 此外,还有许多用户模型应用程序的更高级接口。最常用的接口是 Windows Sockets、远程过程调用 (RPC) 和 NetBIOS。
    Windows Sockets 是一个编程接口,它是在加州大学伯克利分校开发的套接字接口的基础上定义的。它包括了一组扩展件,以充分利用 Microsoft Windows 消息驱动的特点。规范的 1.1 版是在 1993 年 1 月发行的,2.2.0 版在 1996 年 5 月发行。Windows 2000 支持 Winsock 2.2 版。在Winsock2中,支持多个传输协议的原始套接字,重叠I/O模型、服务质量控制等。
    这里介绍Windows Sockets的一些关于原始套接字(Raw Socket)的编程。同Winsock1相比,最明显的就是支持了Raw Socket套接字类型,通过原始套接字,我们可以更加自如地控制Windows下的多种协议,而且能够对网络底层的传输机制进行控制。
    1、创建一个原始套接字,并设置IP头选项。

    SOCKET sock;
    sock = socket(AF_INET,SOCK_RAW,IPPROTO_IP);
    或者:
    s = WSASoccket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED);
    这里,我们设置了SOCK_RAW标志,表示我们声明的是一个原始套接字类型。创建原始套接字后,IP头就会包含在接收的数据中,如果我们设定 IP_HDRINCL 选项,那么,就需要自己来构造IP头。注意,如果设置IP_HDRINCL 选项,那么必须具有 administrator权限,要不就必须修改注册表:
    HKEY_LOCAL_
    修改键:DisableRawSecurity(类型为DWORD),把值修改为 1。如果没有,就添加。
    BOOL blnFlag=TRUE;
    setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char *)&blnFlag, sizeof(blnFlag);
    对于原始套接字在接收数据报的时候,要注意这么几点:
    a、如果接收的数据报中协议类型和定义的原始套接字匹配,那么,接收的所有数据就拷贝到套接字中。
    b、如果绑定了本地地址,那么只有接收数据IP头中对应的远端地址匹配,接收的数据就拷贝到套接字中。
    c、如果定义的是外部地址,比如使用connect(),那么,只有接收数据IP头中对应的源地址匹配,接收的数据就拷贝到套接字中。


    2、构造IP头和TCP头
    这里,提供IP头和TCP头的结构:
    // Standard TCP flags
    #define URG 0x20
    #define ACK 0x10
    #define PSH 0x08
    #define RST 0x04
    #define SYN 0x02
    #define FIN 0x01
    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;

    TCP伪首部并不是真正存在的,只是用于计算检验和。校验和函数:

    USHORT checksum(USHORT *buffer, int size)
    {
    unsigned long cksum=0;
    while (size > 1)
    {
    cksum += *buffer++;
    size -= sizeof(USHORT);
    }
    if (size)
    {
    cksum += *(UCHAR*)buffer;
    }
    cksum = (cksum >> 16) + (cksum & 0xffff);
    cksum += (cksum >>16);
    return (USHORT)(~cksum);
    }

    当需要自己填充IP头部和TCP头部的时候,就同时需要自己计算他们的检验和。

    3、发送原始套接字数据报

    填充这些头部稍微麻烦点,发送就相对简单多了。只需要使用sendto()就OK。

    sendto(sock, (char*)&tcpHeader, sizeof(tcpHeader), 0, (sockaddr*)&addr_in,sizeof(addr_in));

    下面是一个示例程序,可以作为SYN扫描的一部分。

    #include <stdio.h>
    #include <winsock2.h>
    #include <ws2tcpip.h>

    #define SOURCE_PORT 7234
    #define MAX_RECEIVEBYTE 255

    typedef struct ip_hdr //定义IP首部
    {
    unsigned char h_verlen; //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地址
    }IPHEADER;

    typedef struct tsd_hdr //定义TCP伪首部
    {
    unsigned long saddr; //源地址
    unsigned long daddr; //目的地址
    char mbz;
    char ptcl; //协议类型
    unsigned short tcpl; //TCP长度
    }PSDHEADER;

    typedef struct tcp_hdr //定义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位紧急数据偏移量
    }TCPHEADER;

    //CheckSum:计算校验和的子函数
    USHORT checksum(USHORT *buffer, int size)
    {
    unsigned long cksum=0;
    while(size >1)
    {
    cksum+=*buffer++;
    size -=sizeof(USHORT);
    }
    if(size )
    {
    cksum += *(UCHAR*)buffer;
    }

    cksum = (cksum >> 16) + (cksum & 0xffff);
    cksum += (cksum >>16);
    return (USHORT)(~cksum);
    }

    void useage()
    {
    printf("****************************************** ");
    printf("TCPPing ");
    printf(" Written by Refdom ");
    printf(" Email: [email protected] ");
    printf("Useage: TCPPing.exe Target_ip Target_port ");
    printf("******************************************* ");
    }

    int main(int argc, char* argv[])
    {
    WSADATA WSAData;
    SOCKET sock;
    SOCKADDR_IN addr_in;
    IPHEADER ipHeader;
    TCPHEADER tcpHeader;
    PSDHEADER psdHeader;

    char szSendBuf[60]={0};
    BOOL flag;
    int rect,nTimeOver;

    useage();

    if (argc!= 3)
    { return false; }

    if (WSAStartup(MAKEWORD(2,2), &WSAData)!=0)
    {
    printf("WSAStartup Error! ");
    return false;
    }

    if ((sock=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,NULL,0,WSA_FLAG_OVERLAPPED))==INVALID_SOCKET)
    {
    printf("Socket Setup Error! ");
    return false;
    }
    flag=true;
    if (setsockopt(sock,IPPROTO_IP, IP_HDRINCL,(char *)&flag,sizeof(flag))==SOCKET_ERROR)
    {
    printf("setsockopt IP_HDRINCL error! ");
    return false;
    }

    nTimeOver=1000;
    if (setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char*)&nTimeOver, sizeof(nTimeOver))==SOCKET_ERROR)
    {
    printf("setsockopt SO_SNDTIMEO error! ");
    return false;
    }
    addr_in.sin_family=AF_INET;
    addr_in.sin_port=htons(atoi(argv[2]));
    addr_in.sin_addr.S_un.S_addr=inet_addr(argv[1]);

    //
    //
    //填充IP首部
    ipHeader.h_verlen=(4<<4 | sizeof(ipHeader)/sizeof(unsigned long));
    // ipHeader.tos=0;
    ipHeader.total_len=htons(sizeof(ipHeader)+sizeof(tcpHeader));
    ipHeader.ident=1;
    ipHeader.frag_and_flags=0;
    ipHeader.ttl=128;
    ipHeader.proto=IPPROTO_TCP;
    ipHeader.checksum=0;
    ipHeader.sourceIP=inet_addr("本地地址");
    ipHeader.destIP=inet_addr(argv[1]);

    //填充TCP首部
    tcpHeader.th_dport=htons(atoi(argv[2]));
    tcpHeader.th_sport=htons(SOURCE_PORT); //源端口号
    tcpHeader.th_seq=htonl(0x12345678);
    tcpHeader.th_ack=0;
    tcpHeader.th_lenres=(sizeof(tcpHeader)/4<<4|0);
    tcpHeader.th_flag=2; //修改这里来实现不同的标志位探测,2是SYN,1是FIN,16是ACK探测 等等
    tcpHeader.th_win=htons(512);
    tcpHeader.th_urp=0;
    tcpHeader.th_sum=0;

    psdHeader.saddr=ipHeader.sourceIP;
    psdHeader.daddr=ipHeader.destIP;
    psdHeader.mbz=0;
    psdHeader.ptcl=IPPROTO_TCP;
    psdHeader.tcpl=htons(sizeof(tcpHeader));

    //计算校验和
    memcpy(szSendBuf, &psdHeader, sizeof(psdHeader));
    memcpy(szSendBuf+sizeof(psdHeader), &tcpHeader, sizeof(tcpHeader));
    tcpHeader.th_sum=checksum((USHORT *)szSendBuf,sizeof(psdHeader)+sizeof(tcpHeader));

    memcpy(szSendBuf, &ipHeader, sizeof(ipHeader));
    memcpy(szSendBuf+sizeof(ipHeader), &tcpHeader, sizeof(tcpHeader));
    memset(szSendBuf+sizeof(ipHeader)+sizeof(tcpHeader), 0, 4);
    ipHeader.checksum=checksum((USHORT *)szSendBuf, sizeof(ipHeader)+sizeof(tcpHeader));

    memcpy(szSendBuf, &ipHeader, sizeof(ipHeader));

    rect=sendto(sock, szSendBuf, sizeof(ipHeader)+sizeof(tcpHeader),
    0, (struct sockaddr*)&addr_in, sizeof(addr_in));
    if (rect==SOCKET_ERROR)
    {
    printf("send error!:%d ",WSAGetLastError());
    return false;
    }
    else
    printf("send ok! ");

    closesocket(sock);
    WSACleanup();

    return 0;
    }

    4、接收数据
    和发送原始套接字数据相比,接收就比较麻烦了。因为在WIN我们不能用recv()来接收raw socket上的数据,这是因为,所有的IP包都是先递交给系统核心,然后再传输到用户程序,当发送一个raws socket包的时候(比如syn),核心并不知道,也没有这个数据被发送或者连接建立的记录,因此,当远端主机回应的时候,系统核心就把这些包都全部丢掉,从而到不了应用程序上。所以,就不能简单地使用接收函数来接收这些数据报。

    要达到接收数据的目的,就必须采用嗅探,接收所有通过的数据包,然后进行筛选,留下符合我们需要的。可以再定义一个原始套接字,用来完成接收数据的任务,需要设置SIO_RCVALL,表示接收所有的数据。

    SOCKET sniffersock;
    sniffsock = WSASocket(AF_INET, SOCK_RAW, IPPROTO_IP, NULL, 0, WSA_FLAG_OVERLAPPED);

    DWORD lpvBuffer = 1;
    DWORD lpcbBytesReturned = 0 ;
    WSAIoctl(sniffersock, SIO_RCVALL, &lpvBuffer, sizeof(lpvBuffer), NULL, 0, & lpcbBytesReturned, NULL, NULL);

    创建一个用于接收数据的原始套接字,我们可以用接收函数来接收数据包了。然后在使用一个过滤函数达到筛选的目的,接收我们需要的数据包。

    如果在XP以上的操作系统,微软封杀了Raw Soccket,只能用wincpap之类的开发包了。

⑩ Sniffer是什么怎么用

Sniffer,中文可以翻译为嗅探器,是一种基于被动侦听原理的网络分析方式。使用这种技术方式,可以监视网络的状态、数据流动情况以及网络上传输的信息。当信息以明文的形式在网络上传输时,便可以使用网络监听的方式来进行攻击。将网络接口设置在监听模式,便可以将网上传输的源源不断的信息截获。Sniffer技术常常被黑客们用来截获用户的口令,据说某个骨干网络的路由器网段曾经被黑客攻入,并嗅探到大量的用户口令。但实际上Sniffer技术被广泛地应用于网络故障诊断、协议分析、应用性能分析和网络安全保障等各个领域。
本文将详细介绍Sniffer的原理和应用。
一、Sniffer 原理
1.网络技术与设备简介
在讲述Sniffer的概念之前,首先需要讲述局域网设备的一些基本概念。
数据在网络上是以很小的称为帧(Frame)的单位传输的,帧由几部分组成,不同的部分执行不同的功能。帧通过特定的称为网络驱动程序的软件进行成型,然后通过网卡发送到网线上,通过网线到达它们的目的机器,在目的机器的一端执行相反的过程。接收端机器的以太网卡捕获到这些帧,并告诉操作系统帧已到达,然后对其进行存储。就是在这个传输和接收的过程中,嗅探器会带来安全方面的问题。
每一个在局域网(LAN)上的工作站都有其硬件地址,这些地址惟一地表示了网络上的机器(这一点与Internet地址系统比较相似)。当用户发送一个数据包时,这些数据包就会发送到LAN上所有可用的机器。
如果使用Hub/即基于共享网络的情况下,网络上所有的机器都可以“听”到通过的流量,但对不属于自己的数据包则不予响应(换句话说,工作站A不会捕获属于工作站B的数据,而是简单地忽略这些数据)。如果某个工作站的网络接口处于混杂模式(关于混杂模式的概念会在后面解释),那么它就可以捕获网络上所有的数据包和帧。
但是现代网络常常采用交换机作为网络连接设备枢纽,在通常情况下,交换机不会让网络中每一台主机侦听到其他主机的通讯,因此Sniffer技术在这时必须结合网络端口镜像技术进行配合。而衍生的安全技术则通过ARP欺骗来变相达到交换网络中的侦听。
2.网络监听原理
Sniffer程序是一种利用以太网的特性把网络适配卡(NIC,一般为以太网卡)置为杂乱(promiscuous)模式状态的工具,一旦网卡设置为这种模式,它就能接收传输在网络上的每一个信息包。
普通的情况下,网卡只接收和自己的地址有关的信息包,即传输到本地主机的信息包。要使Sniffer能接收并处理这种方式的信息,系统需要支持BPF,Linux下需要支持SOCKET一PACKET。但一般情况下,网络硬件和TCP/IP堆栈不支持接收或者发送与本地计算机无关的数据包,所以,为了绕过标准的TCP/IP堆栈,网卡就必须设置为我们刚开始讲的混杂模式。一般情况下,要激活这种方式,内核必须支持这种伪设备Bpfilter,而且需要root权限来运行这种程序,所以sniffer需要root身份安装,如果只是以本地用户的身份进入了系统,那么不可能唤探到root的密码,因为不能运行Sniffer。
也有基于无线网络、广域网络(DDN, FR)甚至光网络(POS、Fiber Channel)的监听技术,这时候略微不同于以太网络上的捕获概念,其中通常会引入TAP (测试介入点)这类的硬件设备来进行数据采集。
3. Sniffer的分类
Sniffer分为软件和硬件两种,软件的Sniffer有 Sniffer Pro、Network Monitor、PacketBone等,其优点是易于安装部署,易于学习使用,同时也易于交流;缺点是无法抓取网络上所有的传输,某些情况下也就无法真正了解网络的故障和运行情况。硬件的Sniffer通常称为协议分析仪,一般都是商业性的,价格也比较昂贵,但会具备支持各类扩展的链路捕获能力以及高性能的数据实时捕获分析的功能。
基于以太网络嗅探的Sniffer只能抓取一个物理网段内的包,就是说,你和监听的目标中间不能有路由或其他屏蔽广播包的设备,这一点很重要。所以,对一般拨号上网的用户来说,是不可能利用Sniffer来窃听到其他人的通信内容的。
4.网络监听的目的
当一个黑客成功地攻陷了一台主机,并拿到了root权限,而且还想利用这台主机去攻击同一(物理)网段上的其他主机时,他就会在这台主机上安装Sniffer软件,对以太网设备上传送的数据包进行侦听,从而发现感兴趣的包。如果发现符合条件的包,就把它存到一个LOg文件中去。通常设置的这些条件是包含字“username”或“password”的包,这样的包里面通常有黑客感兴趣的密码之类的东西。一旦黑客截获得了某台主机的密码,他就会立刻进入这台主机。
如果Sniffer运行在路由器上或有路由功能的主机上,就能对大量的数据进行监控,因为所有进出网络的数据包都要经过路由器。
Sniffer属于第M层次的攻击。就是说,只有在攻击者已经进入了目标系统的情况下,才能使用Sniffer这种攻击手段,以便得到更多的信息。
Sniffer除了能得到口令或用户名外,还能得到更多的其他信息,比如一个重要的信息、在网上传送的金融信息等等。Sniffer几乎能得到任何在以太网上传送的数据包。
二、Sniffer产品介绍
网络的安全性和高可用性是建立在有效的网络管理基础之上的,网络管理包括配置管理、故障管理、性能管理、安全管理和计费管理五大部分。对于企业计算机网络来说,网络故障管理主要侧重于实时的监控,而网络性能管理更看中历史分析。
Sniffer网络分析仪是一个网络故障、性能和安全管理的有力工具,它能够自动地帮助网络专业人员维护网络,查找故障,极大地简化了发现和解决网络问题的过程,广泛适用于Ethernet、Fast Ethernet、Token Ring、Switched LANs、FDDI、X.25、DDN、Frame Relay、ISDN、ATM和Gigabits等网络。
1.1 Sniffer产品的基本功能包括:
• 网络安全的保障与维护
1. 对异常的网络攻击的实时发现与告警;
2. 对高速网络的捕获与侦听;
3. 全面分析与解码网络传输的内容;
• 面向网络链路运行情况的监测
1. 各种网络链路的运行情况;
2. 各种网络链路的流量及阻塞情况;
3. 网上各种协议的使用情况;
4. 网络协议自动发现;
5. 网络故障监测;
• 面向网络上应用情况的监测
1. 任意网段应用流量、流向;
2. 任意服务器应用流量、流向;
3. 任意工作站应用流量、流向;
4. 典型应用程序响应时间;
5. 不同网络协议所占带宽比例;
6. 不同应用流量、流向的分布情况及拓扑结构;
• 强大的协议解码能力,用于对网络流量的深入解析
1. 对各种现有网络协议进行解码;
2. 对各种应用层协议进行解码;
3. Sniffer协议开发包(PDK)可以让用户简单方便地增加用户自定义的协议;
• 网络管理、故障报警及恢复
运用强大的专家分析系统帮助维护人员在最短时间内排除网络故障;
1.2 实时监控统计和告警功能
根据用户习惯,Sniffer可提供实时数据或图表方式显示统计结果,统计内容包括:
 网络统计:如当前和平均网络利用率、总的和当前的帧数及字节数、总站数和激活的站数、协议类型、当前和总的平均帧长等。
 协议统计:如协议的网络利用率、协议的数、协议的字节数以及每种协议中各种不同类型的帧的统计等。
 差错统计:如错误的CRC校验数、发生的碰撞数、错误帧数等。
 站统计:如接收和发送的帧数、开始时间、停止时间、消耗时间、站状态等。最多可统计1024个站。
 帧长统计:如某一帧长的帧所占百分比,某一帧长的帧数等。
当某些指标超过规定的阈值时,Sniffer可以自动显示或采用有声形式的告警。
Sniffer可根据网络管理者的要求,自动将统计结果生成多种统计报告格式,并可存盘或打印输出。
1.3 Sniffer实时专家分析系统
高度复杂的网络协议分析工具能够监视并捕获所有网络上的信息数据包,并同时建立一个特有网络环境下的目标知识库。智能的专家技术扫描这些信息以检测网络异常现象,并自动对每种异常现象进行归类。所有异常现象被归为两类:一类是symptom(故障征兆提示,非关键事件例如单一文件的再传送),另一类是diagnosis(已发现故障的诊断,重复出现的事件或要求立刻采取行动的致命错误)。经过问题分离、分析且归类后,Sniffer将实时地,自动发出一份警告、对问题进行解释并提出相应的建议解决方案。
Sniffer与其他网络协议分析仪最大的差别在于它的人工智能专家系统(Expert System)。简单地说,Sniffer能自动实时监视网络,捕捉数据,识别网络配置,自动发现网络故障并进行告警,它能指出:
 网络故障发生的位置,以及出现在OSI第几层。
 网络故障的性质,产生故障的可能的原因以及为解决故障建议采取的行动。
 Sniffer 还提供了专家配制功能,用户可以自已设定专家系统判断故障发生的触发条件。
 有了专家系统,您无需知道那些数据包构成网络问题,也不必熟悉网络协议,更不用去了解这些数据包的内容,便能轻松解决问题。
1.4 OSI全协议七层解码
Sniffer的软件非常丰富,可以对在各种网络上运行的400多种协议进行解码,如TCP/IP、Novell Netware、DECnet、SunNFS、X-Windows、HTTP、TNS SLQ*Net v2(Oracle)、Banyan v5.0和v6.0、TDS/SQL(Sybase)、X.25、Frame Realy、PPP、Rip/Rip v2、EIGRP、APPN、SMTP等。还广泛支持专用的网络互联桥/路由器的帧格式。
Sniffer可以在全部七层OSI协议上进行解码,目前没有任何一个系统可以做到对协议有如此透彻的分析;它采用分层方式,从最低层开始,一直到第七层,甚至对ORACAL数据库、SYBASE数据库都可以进行协议分析;每一层用不同的颜色加以区别。
Sniffer对每一层都提供了Summary(解码主要规程要素)、Detail(解码全部规程要素)、Hex(十六进制码)等几种解码窗口。在同一时间,最多可以打开六个观察窗口。
Sniffer还可以进行强制解码功能(Protocl Forcing),如果网络上运行的是非标准协议,可以使用一个现有标准协议样板去尝试解释捕获的数据。
Sniffer提供了在线实时解码分析和在线捕捉,将捕捉的数据存盘后进行解码分析二种功能。
二、Sniffer的商业应用
Sniffer被 Network General公司注册为商标,这家公司以出品Sniffer Pro系列产品而知名。目前最新版本为Sniffer Portable 4.9,这类产品通过网络嗅探这一技术方式,对数据协议进行捕获和解析,能够大大帮助故障诊断和网络应用性能的分析鉴别。
Network General 已经被NetScout公司收购。
三、Sniffer的扩展应用
1、专用领域的Sniffer
Sniffer被广泛应用到各种专业领域,例如FIX (金融信息交换协议)、MultiCast(组播协议)、3G (第三代移动通讯技术)的分析系统。其可以解析这些专用协议数据,获得完整的解码分析。
2、长期存储的Sniffer应用
由于现代网络数据量惊人,带宽越来越大。采用传统方式的Sniffer产品很难适应这类环境,因此诞生了伴随有大量硬盘存储空间的长期记录设备。例如nGenius Infinistream等。
3、易于使用的Sniffer辅助系统
由于协议解码这类的应用曲高和寡,很少有人能够很好的理解各类协议。但捕获下来的数据却非常有价值。因此在现代意义上非常流行如何把协议数据采用最好的方式进行展示,包括产生了可以把Sniffer数据转换成Excel的BoneLight类型的应用和把Sniffer分析数据进行图形化的开源系统PacketMap等。这类应用使用户能够更简明地理解Sniffer数据。
4、无线网络的Sniffer
传统Sniffer是针对有线网络中的局域网而言,所有的捕获原理也是基于CSMA/CD的技术实现。随着WLAN的广泛使用,Sniffer进一步扩展到802.11A/B/G/N的无线网络分析能力。无线网络相比传统网络无论从捕获的原理和接入的方式都发生了较大改变。这也是Sniffer技术发展趋势中非常重要的部分.

阅读全文

与网络安全开发包详解相关的资料

热点内容
网络限速150k是多少 浏览:372
打开联通网络移动无信号 浏览:285
vivo设置app关闭移动网络 浏览:481
为啥么wifi显示无网络 浏览:421
5g网络修改密码 浏览:287
西瓜开会员网络异常 浏览:219
网络空间连通性异常网络延迟异常 浏览:214
鸿蒙系统怎样开启移动网络共享 浏览:377
信息技术与网络安全有什么区别 浏览:474
机体电脑如何安装网络 浏览:346
双卡手机二卡没有网络 浏览:752
电脑怎么分享网络给iPhone 浏览:365
飞利浦蓝牙音响怎么连接网络 浏览:654
穿越火线一开游戏就提示网络连接错误 浏览:292
小企业如何组建网络实例 浏览:996
电视高清hdmi连接网络 浏览:167
需要付钱的wifi网络怎么连 浏览:788
天易成网络管理如何使用 浏览:805
医院网络信号很好 浏览:205
两个路由器进行网络中继稳定吗 浏览:411

友情链接