当前位置:首页 » 文件传输 » ftp发包
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

ftp发包

发布时间: 2022-06-11 11:50:55

⑴ 请问电脑处于sniffer状态是什么意识啊

sniffer是窃听的意思,sniffer状态应该就是窃听状态了

要更详细的看下面,保证看到你头大~哈哈

sniffers(嗅探器)几乎和internet有一样久的历史了.Sniffer是一种常用的收集有用数据方法,这些数据可以是用户的帐号和密码,可以是一些商用机密数据等等。随着Internet及电子商务的日益普及,Internet的安全也越来越受到重视。在Internet安全隐患中扮演重要角色之一的Sniffer以受到越来越大的关注,所以今天我要向大家介绍一下介绍Sniffer以及如何阻止sniffer。
大多数的黑客仅仅为了探测内部网上的主机并取得控制权,只有那些"雄心勃勃"的黑客,为了控制整个网络才会安装特洛伊木马和后门程序,并清除记录。他们经常使用的手法是安装sniffer。
在内部网上,黑客要想迅速获得大量的账号(包括用户名和密码),最为有效的手段是使用 "sniffer" 程序。这种方法要求运行Sniffer 程序的主机和被监听的主机必须在同一个以太网段上,故而在外部主机上运行sniffer是没有效果的。再者,必须以root的身份使用sniffer 程序,才能够监听到以太网段上的数据流。谈到以太网sniffer,就必须谈到以太网sniffing。
那么什么是以太网sniffer呢?
以太网sniffing是指对以太网设备上传送的数据包进行侦听,发现感兴趣的包。如果发现符合条件的包,就把它存到一个log文件中
去。通常设置的这些条件是包含字"username"或"password"的包。它的目的是将网络层放到promiscuous模式,从而能干些事情。
Promiscuous模式是指网络上的所有设备都对总线上传送的数据进行侦听,并不仅仅是它们自己的数据。根据第二章中有关对以太网的工作原理的基本介绍,可以知道:一个设备要向某一目标发送数据时,它是对以太网进行广播的。一个连到以太网总线上的设备在任何时间里都在接受数据。不过只是将属于自己的数据传给该计算机上的应用程序。
利用这一点,可以将一台计算机的网络连接设置为接受所有以太
网总线上的数据,从而实现sniffer。
sniffer通常运行在路由器,或有路由器功能的主机上。这样就能对大量的数据进行监控。sniffer属第二层次的攻击。通常是攻击者已经进入了目标系统,然后使用sniffer这种攻击手段,以便得到更多的信息。
sniffer除了能得到口令或用户名外,还能得到更多的其他信息,比如一个其他重要的信息,在网上传送的金融信息等等。sniffer几乎能得到任何以太网上的传送的数据包。黑客会使用各种方法,获得系统的控制权并留下再次侵入的后门,以保证sniffer能够执行。在Solaris 2.x平台上,sniffer 程序通常被安装在/usr/bin 或/dev目录下。黑客还会巧妙的修改时间,使得sniffer程序看上去是和其它系统程序同时安装的。
大多数以太网sniffer程序在后台运行,将结果输出到某个记录文件中。黑客常常会修改ps程序,使得系统管理员很难发现运行的sniffer程序。
以太网sniffer程序将系统的网络接口设定为混合模式。这样,它就可以监听到所有流经同一以太网网段的数据包,不管它的接受者或发送者是不是运行sniffer的主机。 程序将用户名、密码和其它黑客感兴趣的数据存入log文件。黑客会等待一段时间 ----- 比如一周后,再回到这里下载记录文件。
讲了这么多,那么到底我们可以用什么通俗的话来介绍sniffer呢?
计算机网络与电话电路不同,计算机网络是共享通讯通道的。共享意味着计算机能够接收到发送给其它计算机的信息。捕获在网络中传输的数据信息就称为sniffing(窃听)。
以太网是现在应用最广泛的计算机连网方式。以太网协议是在同一回路向所有主机发送数据包信息。数据包头包含有目标主机的正确地址。一般情况下只有具有该地址的主机会接受这个数据包。如果一台主机能够接收所有数据包,而不理会数据包头内容,这种方式通常称为"混杂" 模式。
由于在一个普通的网络环境中,帐号和口令信息以明文方式在以太网中传输, 一旦入侵者获得其中一台主机的root权限,并将其置于混杂模式以窃听网络数据,从而有可能入侵网络中的所有计算机。
一句话,sniffer就是一个用来窃听的黑客手段和工具。
二、sniffer的工作原理
通常在同一个网段的所有网络接口都有访问在物理媒体上传输的所有数据的能力,而每个网络接口都还应该有一个硬件地址,该硬件地址不同于网络中存在的其他网络接口的硬件地址,同时,每个网络至少还要一个广播地址。(代表所有的接口地址),在正常情况下,一个合法的网络接口应该只响应这样的两种数据帧:
1、帧的目标区域具有和本地网络接口相匹配的硬件地址。
2、帧的目标区域具有"广播地址"。
在接受到上面两种情况的数据包时,nc通过cpu产生一个硬件中断,该中断能引起操作系统注意,然后将帧中所包含的数据传送给系统进一步处理。
而sniffer就是一种能将本地nc状态设成(promiscuous)状态的软件,当nc处于这种"混杂"方式时,该nc具备"广播地址",它对所有遭遇到的每一个帧都产生一个硬件中断以便提醒操作系统处理流经该物理媒体上的每一个报文包。(绝大多数的nc具备置成 promiscuous方式的能力)
可见,sniffer工作在网络环境中的底层,它会拦截所有的正在网络上传送的数据,并且通过相应的软件处理,可以实时分析这些数据的内容,进而分析所处的网络状态和整体布局。值得注意的是:sniffer是极其安静的,它是一种消极的安全攻击。
通常sniffer所要关心的内容可以分成这样几类:
1、口令
我想这是绝大多数非法使用sniffer的理由,sniffer可以记录到明文传送的userid和passwd.就算你在网络传送过程中使用了加密的数据,sniffer记录的数据一样有可能使入侵者在家里边吃肉串边想办法算出你的算法。
2、金融帐号
许多用户很放心在网上使用自己的信用卡或现金帐号,然而sniffer可以很轻松截获在网上传送的用户姓名、口令、信用卡号码、截止日期、帐号和pin.
3、偷窥机密或敏感的信息数据
通过拦截数据包,入侵者可以很方便记录别人之间敏感的信息传送,或者干脆拦截整个的email会话过程。
4、窥探低级的协议信息。
这是很可怕的事,我认为,通过对底层的信息协议记录,比如记录两台主机之间的网络接口地址、远程网络接口ip地址、ip路由信息和tcp连接的字节顺序号码等。这些信息由非法入侵的人掌握后将对网络安全构成极大的危害,通常有人用sniffer收集这些信息只有一个原因:他正在进行一次欺诈,(通常的ip地址欺诈就要求你准确插入tcp连接的字节顺序号,这将在以后整理的文章中指出)如果某人很关心这个问题,那么sniffer对他来说只是前奏,今后的问题要大得多。(对于高级的hacker而言,我想这是使用sniffer的唯一理由吧)
二.sniffer的工作环境
snifffer就是能够捕获网络报文的设备。嗅探器的正当用处在于分析网络的流量,以便找出所关心的网络中潜在的问题。例如,假设网络的某一段运行得不是很好,报文的发送比较慢,而我们又不知道问题出在什么地方,此时就可以用嗅探器来作出精确的问题判断。
嗅探器在功能和设计方面有很多不同。有些只能分析一种协议,而另一些可能能够分析几百种协议。一般情况下,大多数的嗅探器至少能够分析下面的协议:
1.标准以太网
2.TCP/IP
3.IPX
4.DECNet
嗅探器通常是软硬件的结合。专用的嗅探器价格非常昂贵。另一方面,免费的嗅探器虽然不需要花什么钱,但得不到什么支持。
嗅探器与一般的键盘捕获程序不同。键盘捕获程序捕获在终端上输入的键值,而嗅探器则捕获真实的网络报文。嗅探器通过将其置身于网络接口来达到这个目的——例如将以太网卡设置成杂收模式。(为了理解杂收模式是怎么回事,先解释局域网是怎么工作的)。
数据在网络上是以很小的称为帧(Ftame)的单位传输的帧由好几部分组成,不同的部分执行不同的功能。(例如,以太网的前12个字节存放的是源和目的的地址,这些位告诉网络:数据的来源和去处。以太网帧的其他部分存放实际的用户数据、TCP/IP的报文头或IPX报文头等等)。
帧通过特定的称为网络驱动程序的软件进行成型,然后通过网卡发送到网线上。通过网线到达它们的目的机器,在目的机器的一端执行相反的过程。接收端机器的以太网卡捕获到这些帧,并告诉操作系统帧的到达,然后对其进行存储。就是在这个传输和接收的过程中,嗅探器会造成安全方面的问题。
每一个在LAN上的工作站都有其硬件地址。这些地址唯一地表示着网络上的机器(这一点于Internet地址系统比较相似)。当用户发送一个报文时,这些报文就会发送到LAN上所有可用的机器。
在一般情况下,网络上所有的机器都可以“听”到通过的流量,但对不属于自己的报文则不予响应(换句话说,工作站A不会捕获属于工作站B的数据,而是简单的忽略这些数据)。
如果某在工作站的网络接口处于杂收模式,那么它就可以捕获网络上所有的报文和帧,如果一个工作站被配置成这样的方式,它(包括其软件)就是一个嗅探器。
嗅探器可能造成的危害:
1.嗅探器能够捕获口令
2.能够捕获专用的或者机密的信息
3.可以用来危害网络邻居的安全,或者用来获取更高级别的访问权限
事实上,如果你在网络上存在非授权的嗅探器就以为着你的系统已经暴露在别人面前了。(大家可以试试天行2的嗅探功能)
一般我们只嗅探每个报文的前200到300个字节。用户名和口令都包含在这一部分中,这是我们关心的真正部分。工人,也可以嗅探给定接口上的所有报文,如果有足够的空间进行存储,有足够的那里进行处理的话,将会发现另一些非常有趣的东西……
简单的放置一个嗅探器宾将其放到随便什么地方将不会起到什么作用。将嗅探器放置于被攻击机器或网络附近,这样将捕获到很多口令,还有一个比较好的方法就是放在网关上。如果这样的话就能捕获网络和其他网络进行身份鉴别的过程。这样的方式将成倍地增加我们能够攻击的范围。
三.谁会使用sniffers
可能谁都回知道谁会使用sniffer,但是并不是每个使用它的人都是网络高手,因为现在有很多的sniffer都成了傻瓜似的了,前段时间用的最多的不外乎oicq sniffer。我想那些喜欢查好友ip的朋友都应该记得它吧。呵呵,我都使用过它,现在当然不用了啊!
当然系统管理员使用sniffer来分析网络信息交通并且找出网络上何处发生问题。一个安全管理员可以同时用多种sniffer, 将它们放置在网络的各处,形成一个入侵警报系统。对于系统管理员来说sniffer是一个非常好的工具,但是它同样是一个经常被黑客使用的工具.骇客安装sniffer以获得用户名和账号,信用卡号码,个人信息,和其他的信息可以导致对你或是你的公司的极大危害如果向坏的方面发展。当它们得到这些信息后,骇客将使用密码来进攻其他的internet 站点甚至倒卖信用卡号码。
三.sniffer是如何在网络上实施的
谈这个问题之前还应该先说一下Ethernet的通讯。通常在同一个网段的所有网络接口都有访问在媒体上传输的所有数据的能力,而每个网络接口都还应该有一个硬件地址,该硬件地址不同于网络中存在的其它网络接口的硬件地址,同时,每个网络至少还要一个广播地址。在正常情况下,一个合法的网络接口应该只响应这样的两种数据帧:
1�帧的目标区域具有和本地网络接口相匹配的硬件地址。

2�帧的目标区域具有“广播地址”。

在接受到上面两种情况的数据包时,网卡通过cpu产生一个硬件中断。该中断能引起操作系统注意,然后将帧中所包含的数据传送给系统进一步处理。而sniffer就是一种能将本地网卡状态设成杂乱模式(promiscuous Mode)的软件。当网卡处于杂乱模式时,该网卡具备“广播地址”,它对所有遇到的每一个帧都产生一个硬件中断以提醒操作系统处理每一个报文包。(绝大多数的网卡具备设置成杂乱模式的能力。
可见,sniffer工作在网络环境中的底层,它会拦截所有的正在网络上传送的数据。通过相应的软件处理,可以实时分析这些数据的内容,进而分析所处的网络状态和整体布局。值得注意的是:sniffer是极其安静的,它是一种消极的安全攻击。
四.哪里可以得到sniffer
我们讲的sniffer,主要是在unix系统下运用的,至于那些oicq sniffer就不在我们讨论的范围。
Sniffer是黑客们最常用的入侵手段之一。你可以在经过允许的网络中运行sniffer,了解它是如何有效地危及本地机器安全。
Sniffer可以是硬件,也可以是软件。现在品种最多,应用最广的是软件Sniffer,绝大多数黑客们用的也是软件Sniffer。
以下是一些也被广泛用于调试网络故障的sniffer工具:
(一).商用sniffer:
1. Network General.
Network General开发了多种产品。最重要的是Expert Sniffer,它不仅仅可以sniff,还能够通过高性能的专门系统发送/接收数据包,帮助诊断故障。还有一个增强产品"Distrbuted Sniffer System"可以将UNIX工作站作为sniffer控制台,而将sniffer agents(代理)分布到远程主机上。
2. Microsoft's Net Monitor
对于某些商业站点,可能同时需要运行多种协议--NetBEUI、IPX/SPX、TCP/IP、802.3和SNA等。这时很难找到一种sniffer帮助解决网络问题,因为许多sniffer往往将某些正确的协议数据包当成了错误数据包。Microsoft的Net Monitor(以前叫Bloodhound)可以解决这个难题。它能够正确区分诸如Netware控制数据包、NT NetBios名字服务广播等独特的数据包。(etherfind只会将这些数据包标识为类型0000的广播数据包。)这个工具运行在MS Windows 平台上。它甚至能够按MAC地址(或主机名)进行网络统计和会话信息监视。只需简单地单击某个会话即可获得tcpmp标准的输出。过滤器设置也是最为简单的,只要在一个对话框中单击需要监视的主机即可。

(二).免费软件sniffer
1. Sniffit由Lawrence Berkeley 实验室开发,运行于Solaris、SGI和Linux等平台。可以选择源、目标地址或地址集合,还可以选择监听的端口、协议和网络接口等。这个SNIFFER默认状态下只接受最先的400个字节的信息包,这对于一次登陆会话进程刚刚好。
2. SNORT:这个SNIFFER有很多选项供你使用并可移植性强,可以记录一些连接信息,用来跟踪一些网络活动。
3. TCPDUMP:这个SNIFFER很有名,linux,FREEBSD还搭带在系统上,是一个被很多UNIX高手认为是一个专业的网络管理工具,记得以前TsutomuShimomura(应该叫下村侵吧)就是使用他自己修改过的TCPDUMP版本来记录了KEVINMITNICK攻击他系统的记录,后来就配合FBI抓住了KEVINMITNICK,后来他写了一文:使用这些LOG记录描述了那次的攻击,
( http://www.attrition.org/security/newbie/security/sniffer/shimomur.txt )
4. ADMsniff:这是非常有名的ADM黑客集团写的一个SNIFFER程序。
5. linsniffer:这是一个专门设计杂一LINUX平台上的SNIFFER。
6. Esniffer:这个也是一个比较有名的SNIFFER程序。
7. Solsniffer:这是个Solarissniffer,主要是修改了SunSniff专门用来可以方便的在Solair平台上编译。
8. Ethereal是一基于GTK+的一个图形化Sniffer
9. Gobbler(for MS-DOS&Win95)、Netman、NitWit、Ethload...等等。
(三).UNIX下的sniffer
UNIX下的sniffer,我比较倾向于snoop.Snoop是按Solaris的标准制作的,虽然Snoop不像是Sniffer Pro那样好,但是它是一个可定制性非常强的sniffer,在加上它是免费的(和Solaris附一起).谁能打败它的地位?你可以在极短时间内抓获一个信息包或是更加深的分析.如果你想学习如何使用snoop,看下面的url:
http://www.enteract.com/~lspitz/snoop.html
(四).Linux下的sniffer工具
Linux下的sniffer工具,我推荐Tcpmp。
[1].tcpmp的安装
在linux下tcpmp的安装十分简单,一般由两种安装方式。一种是以rpm包的形式来进行安装。另外一种是以源程序的形式安装。
1. rpm包的形式安装
这种形式的安装是最简单的安装方法,rpm包是将软件编译后打包成二进制的格式,通过rpm命令可以直接安装,不需要修改任何东西。以超级用户登录,使用命令如下:
#rpm -ivh tcpmp-3_4a5.rpm
这样tcpmp就顺利地安装到你的linux系统中。怎么样,很简单吧。
2. 源程序的安装
既然rpm包的安装很简单,为什么还要采用比较复杂的源程序安装呢?其实,linux一个最大的诱人之处就是在她上面有很多软件是提供源程序的,人们可以修改源程序来满足自己的特殊的需要。所以我特别建议朋友们都采取这种源程序的安装方法。
· 第一步 取得源程序 在源程序的安装方式中,我们首先要取得tcpmp的源程序分发包,这种分发包有两种 形式,一种是tar压缩包(tcpmp-3_4a5.tar.Z),另一种是rpm的分发包(tcpmp-3_4a5.src.rpm)。这两种 形式的内容都是一样的,不同的仅仅是压缩的方式.tar的压缩包可以使用如下命令解开:
#tar xvfz tcpmp-3_4a5.tar.Z
rpm的包可以使用如下命令安装:
#rpm -ivh tcpmp-3_4a5.src.rpm
这样就把tcpmp的源代码解压到/usr/src/redhat/SOURCES目录下.

· 第二步 做好编译源程序前的准备活动
在编译源程序之前,最好已经确定库文件libpcap已经安装完毕,这个库文件是tcpmp软件所需的库文件。同样,你同时还要有一个标准的c语言编译器。在linux下标准的c 语言编译器一般是gcc。 在tcpmp的源程序目录中。有一个文件是Makefile.in,configure命令就是从Makefile.in文件中自动产生Makefile文件。在Makefile.in文件中,可以根据系统的配置来修改BINDEST 和 MANDEST 这两个宏定义,缺省值是
BINDEST = @sbindir @
MANDEST = @mandir @
第一个宏值表明安装tcpmp的二进制文件的路径名,第二个表明tcpmp的man 帮助页的路径名,你可以修改它们来满足系统的需求。

· 第三步 编译源程序
使用源程序目录中的configure脚本,它从系统中读出各种所需的属性。并且根据Makefile.in文件自动生成Makefile文件,以便编译使用.make 命令则根据Makefile文件中的规则编译tcpmp的源程序。使用make install命令安装编译好的tcpmp的二进制文件。
总结一下就是:
# tar xvfz tcpmp-3_4a5.tar.Z
# vi Makefile.in
# . /configure
# make
# make install

[2].Tcpmp的使用
tcpmp采用命令行方式,它的命令格式为:
tcpmp [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ]
[ -i 网络接口 ] [ -r 文件名] [ -s snaplen ]
[ -T 类型 ] [ -w 文件名 ] [表达式 ]

1. tcpmp的选项介绍
-a 将网络地址和广播地址转变成名字;
-d 将匹配信息包的代码以人们能够理解的汇编格式给出;
-dd 将匹配信息包的代码以c语言程序段的格式给出;
-ddd 将匹配信息包的代码以十进制的形式给出;
-e 在输出行打印出数据链路层的头部信息;
-f 将外部的Internet地址以数字的形式打印出来;
-l 使标准输出变为缓冲行形式;
-n 不把网络地址转换成名字;
-t 在输出的每一行不打印时间戳;
-v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
-vv 输出详细的报文信息;
-c 在收到指定的包的数目后,tcpmp就会停止;
-F 从指定的文件中读取表达式,忽略其它的表达式;
-i 指定监听的网络接口;
-r 从指定的文件中读取包(这些包一般通过-w选项产生);
-w 直接将包写入文件中,并不分析和打印出来;
-T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程 调用)和snmp(简单网络管理协议;)

2. tcpmp的表达式介绍
表达式是一个正则表达式,tcpmp利用它作为过滤报文的条件,如果一个报文满足表达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包将会被截获。
在表达式中一般如下几种类型的关键字,一种是关于类型的关键字,主要包括host,net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明 202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是host.
第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,则缺省是src or dst关键字。
第三种是协议的关键字,主要包括fddi,ip ,arp,rarp,tcp,udp等类型。Fddi指明是在FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是"ether"的别名,fddi和ether具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpmp将会监听所有协议的信息包。
除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,greater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算 是'or' ,'';
这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来说明。
(1)想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包:
#tcpmp host 210.27.48.1
(2) 想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令:(在命令行中适用括号时,一定要
#tcpmp host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)
(3) 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:
#tcpmp ip host 210.27.48.1 and ! 210.27.48.2
(4)如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:
#tcpmp tcp port 23 host 210.27.48.1

3. tcpmp 的输出结果介绍
下面我们介绍几种典型的tcpmp命令的输出信息
(1) 数据链路层头信息
使用命令#tcpmp --e host ice
ice 是一台装有linux的主机,她的MAC地址是0:90:27:58:AF:1A
H219是一台装有SOLARIC的SUN工作站,它的MAC地址是8:0:20:79:5B:46;上一条命令的输出结果如下所示:
21:50:12.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 > ice.telne
t 0:0(0) ack 22535 win 8760 (DF)
分析:21:50:12是显示的时间, 847509是ID号,eth0 <表示从网络接口eth0 接受该数据包,eth0 >表示从网络接口设备发送数据包, 8:0:20:79:5b:46是主机H219的MAC地址,它表明是从源地址H219发来的数据包. 0:90:27:58:af:1a是主机ICE的MAC地址,表示该数据包的目的地址是ICE . ip 是表明该数据包是IP数据包,60 是数据包的长度, h219.33357 > ice.telnet 表明该数据包是从主机H219的33357端口发往主机ICE的TELNET(23)端口. ack 22535 表明对序列号是222535的包进行响应. win 8760表明发送窗口的大小是8760.

(2) ARP包的TCPDUMP输出信息
使用命令#tcpmp arp
得到的输出结果是:
22:32:42.802509 eth0 > arp who-has route tell ice (0:90:27:58:af:1a)
22:32:42.802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af:1a)
分析: 22:32:42是时间戳, 802509是ID号, eth0 >表明从主机发出该数据包, arp表明是ARP请求包, who-has route tell ice表明是主机ICE请求主机ROUTE的MAC地址。 0:90:27:58:af:1a是主机ICE的MAC地址。

(3) TCP包的输出信息
用TCPDUMP捕获的TCP包的一般输出信息是:
src > dst: flags data-seqno ack window urgent options
src > dst:表明从源地址到目的地址, flags是TCP包中的标志信息,S 是SYN标志, F (FIN), P (PUSH) , R (RST) "." (没有标记); data-seqno是数据包中的数据的顺序号, ack是下次期望的顺序号, window是接收缓存的窗口大小, urgent表明数据包中是否有紧急指针. Options是选项.

(4) UDP包的输出信息
用TCPDUMP捕获的UDP包的一般输出信息是:
route.port1 > ice.port2: udp lenth
UDP十分简单,上面的输出行表明从主机ROUTE的port1端口发出的一个UDP数据包到主机ICE的port2端口,类型是UDP, 包的长度是lenth上面,我就详细介绍了TCPDUMP的安装和使用,希望会对大家有所帮助。如果想要熟练运用TCPDUMP这个LINUX环境下的SNIFFER利器,还需要大家在实践中总结经验,充分发挥它的威力。
(五).windows平台上的sniffer
我推荐netxray和sniffer pro软件,想必大家都用过他们,不过我在这儿还要再简单介绍一下他们。
netxray的使用说明
1.1.1.1----2.2.2.2----3.3.3.3----4.4.4.4 这是一个ShareHub连接下的局域网

5.5.5.5 这是一个8080端口上的http/ftp proxy

Internet

启动Capture,?

⑵ ftp 连接怎样让他保持连接不断

用一个不间断ftp工具,就算断了也不怕,可以续传,覆盖,根据大小不同覆盖等随你选择。断了再连,下载的文件还在,不浪费之前下的。

filezilla-project.org 到这个网站下载 ftp客户段就可以实现了,如果需要ftp服务器,也有,也可以设置ftp服务器不间断。(是开源免费安全软件啊)
---------
既然你都找到 定时发包的方式,那么方法就在服务器端了,在服务器设置永不短线就是了。如果还找其他办法,岂不显得多余了。

⑶ ros 被攻击了吗

给的分太少了吧
既然你怀疑是ARP就把所有机器的的MAC和路由还有2台服务器绑定了
如果问题依然就要想别的办法,网络问题不是一句两句话就可以解释的了得。
而且看你应该是企业在用吧,既然用ROS为什么不做个PPPOE这样肯定不会中ARP了。

⑷ NAT-PT的简介

支持NAT-PT的网关路由器应具有IPv4地址池,在从IPv6向IPv4域中转发包时使用,地址池中的地址是用来转换IPv6报文中的源地址的。此外,网关路由器需要DNS-ALG和FTP-ALG这两种常用的应用层网关的支持,在IPv6节点访问IPv4节点时发挥作用。如果没有DNS-ALG的支持,只能实现由IPv6节点发起的与IPv4节点之间的通信,反之则不行。如果没有FTP-ALG的支持,IPv4网络中的主机将不能用FTP软件从IPv6网络中的服务器上下载文件或者上传文件,反之亦然。

⑸ 发包长度大于1518的发包工具

三款常用IP发包工具介绍
SENDIP 可在各种UNIX 或LINUX 版本中运行,本人使用的是SLACKWARE 8.0 和
REDHAT 9.0 两个版本。
可在网站http://www.earth.li/projectpurple/progs/sendip.html 中下载最新的源代码或RPM
包,目前版本为2.5,源码包大小只有54K。
2.1.1. 安装过程
SENDIP 的安装过程非常简单,首先从前面介绍的网站中下载最新的源代码包,目前为
sendip-2.5.tar.gz。
在LINUX 系统中执行:
#tar –xzvf sendip-2.5.tar.gz
#cd sendip-2.5
#make
#make install
在系统的/usr/local/bin 目录下会产生一个SENDIP 命令文件,同时,在/usr/local/lib 目录
下建立一个sendip 目录,并在其下放置ipv4.so、ipv6.so、tcp.so 等与协议相关的模块文件。
通过在命令行下运行这个文件,我们可以产生各种各样我们需要的IP 包,还可以通过运行
脚本自动发送大量的IP 包。
AntPower 版权所有&; 2003 技术文章
http://www.antpower.org 第3 页共14 页
2.1.2. 发包方法
SENDIP 可以发送NTP, BGP, RIP, RIPng, TCP, UDP, ICMP、IPv4 和IPv6 等各种格式的
数据包,SENDIP 本身是以模块的方式发送各种协议的数据包,用-p 参数指定协议类型,要
发送每种协议的数据包, 必须对该协议的数据包格式有一定的了解。通常发送
TCP/UDP/ICMP 数据包时,都必须以IP 包进行封装,然后才可以发出去。本节我们将以TCP
数据包为例进行讲述。
下面介绍一下SENDIP 的命令行格式,以下为直接执行SENDIP 时的输出:
Usage: sendip [-v] [-d data] [-h] [-f datafile] [-p mole] [mole options] hostname
-d data add this data as a string to the end of the packet
Data can be:
rN to generate N random(ish) data bytes;
0x or 0X followed by hex digits;
0 followed by octal digits;
any other stream of bytes(以指定字节的随机数据填充包中的数据段)
-f datafile read packet data from file(以指定数据文件中的内容填充包中的数据段)
-h print this message(输出帮助信息)
-p mole load the specified mole (see below)(指定协议类型)
-v be verbose(运行时输出详细运行信息,如不指定,运行时不输出信息)
(协议类型是以模块的方式指定的,用-p 参数指定)
Moles are loaded in the order the -p option appears. The headers from
each mole are put immediately inside the headers from the previos model in
the final packet. For example, to embed bgp inside tcp inside ipv4, do
sendip -p ipv4 -p tcp -p bgp ....
Moles available at compile time:
ipv4 ipv6 icmp tcp udp bgp rip ntp(支持的协议类型)
通常执行格式如下:
#sendip –v –d r64 –p ipv4 –iv 4 –ih 5 –il 128 –is 10.0.0.1 –id 30.0.0.1 –p tcp –ts 1379 –td 23 –tt 8 30.0.0.1
-v:运行时输出详细运行信息,如不指定,运行时不输出信息
–d r64:用64 字节的随机数值填充IP 包中的数据段
–p ipv4:指定协议类型为IP 协议(IP 协议有自己的相应参数,以i 开头)
–iv 4:协议版本为4,即IPV4
–ih 5:指定IP 头的长度为5×4=20 字节
–il 128:指定IP 包的总长度为128 字节
–is 10.0.0.1:指定IP 包的源地址
–id 30.0.0.1:指定IP 包的目的地址
AntPower 版权所有&; 2003 技术文章
http://www.antpower.org 第4 页共14 页
–p tcp:指定IP 包中封装的包的协议类型(TCP 协议有自己的相应参数,以t 开头)
–ts 1379:指定TCP 包的源端口1379
–td 23:指定TCP 包的目的端口为23
-tt 8:指定TCP 包的偏移量即TCP 头的长度,没有TCP 选项时为5,即20 字
节,有TCP 选项时需要增加。
30.0.0.1:指定发包的目的主机
以上部分为利用SENDIP 发送一个简单的TCP 数据包的方法,下面结合IP 和TCP 数据
包的格式详细介绍IP 和TCP 协议的各种参数。
具体各种协议的数据包格式可参考TCP/IP 协议中对各种协议数据包格式的介绍,下面
我们只介绍IP 数据包的格式和TCP 数据包的格式:
IP 数据包的格式:
根据IP 数据包的格式,SENDIP 有如下命令行参数可以指定对应的IP 数据包中参数的
值。
Field name
Size
(bits)
SendIP
option
Description
Version 4 -iv Always 4(对应“4 位版本”,通常值为4,表示IPV4)
Header length 4 -ih
IP header length, measured in 32bit words, 5 if there are
no options(对应“4 位首部长度”,表示以32 位即4
字节为单位的IP 首部长度,如果没有IP 参数的话,
通常为5,表示首部长度为20 字节,如有IP 参数的
话,需要调整该值)
Type of
Service/Differentiated
Services
8 -iy
服务类型(TOS)字段由8 位组成,其中包括3 位的
优先权字段(现已被忽略)、4 位的TOS 子字段和1
位未用位但必须置0,4 位TOS 子字段分别代表最小
时延、最大吞吐量、最高可靠性和最小费用。4 位只
能置其中1 位,使用时只要将设置相应位后运算出十
进制值即可。如要设置最大吞吐量位(00001000),只
需添加参数iy 8 即可。
Total Length 16 -il Total length of IP packet including header and data,
AntPower 版权所有&; 2003 技术文章
http://www.antpower.org 第5 页共14 页
measured in octets(指定IP 包的总长度,包括IP 头部
分和数据部分,以8 位字节为单位,最长为65535)
Identification 16 -ii
Used to help reassembled fragmented packets(指定IP
包的标识号,用来帮助重新组装分段的IP 包)
-ifr 1 bit: reserved, should be 0
-ifd 1 bit: don't fragment(可指定-ifd x,下可为0、1 或r) Flags 3
-ifm 1 bit: more fragmets(可指定-ifm x,下可为0、1 或r)
Fragment offset 13 -if
Where in the reconstructed datagram this fragment
belongs, measured in 64bit words starting from 0(以8
字节长度为单位,指定段偏移量)
Time to Live 8 -it
Number of routers the packet can pass through before
being discarded(值的范围从0 到255,指定TTL,表
示该包可通过的路由器的数目,用于防止包在循环路
径上无休止地传递)
Protocol 8 -ip
Protocol associated with the data. See iana for an
uptodate list of assigned numbers(用于定义IP 包内部
封装的上层协议的协议号,如TCP 为6,可在IANA
的网站上
http://www.iana.org/assignments/protocol-numbers
获得最新的协议号表)
Header checksum 16 -ic
Checksum of the IP header data (with checksum set to
zero)(可指定IP 首部校验和的值,通常由SENDIP 自
动生成,不指定该参数,除非要发出带有错误校验和
的包)
Source Address 32 -is Duhh...(源地址,以点分十进制方式表示)
Destination Address 32 -id Cabbage(目的地址,以点分十进制方式表示)
Options Variable -io...
No options are required. Any number can be added. See
below for details(定义各种IP 选项,如果定义了IP
选项,则前面的IP 头的长度值要包括IP 选项的长度,
不带IP 选项时,该值为20,带IP 选项时,可设定该
值,如果要故意制造不匹配的包,可不符合规范。)
如果有IP 选项,还可指定IP 选项的值,SENDIP 支持的IP 选项如下表所示。
Name
SendIP
option
RFC Copy Class Number
Type
(see
above)
Length
(0 not
present)
Description
EOL -ioeol 791 0 0 0 0 0
Used as padding if needed
(使用该选项后,会自动在IP 头
中未用到的位补0)
NOP -ionop 791 0 0 1 1 0
Do nothing. Often used as padding
so the next option starts on a 32 bit
AntPower 版权所有&; 2003 技术文章
http://www.antpower.org 第6 页共14 页
boundary
RR -iorr 791 0 0 7 7 variable
Used to record the route of a
packet.(记录包走过的每个路由
器, 通常用法是: -iorr
0f:ff.ff.ff.ff:10.0.0.234 –ioeol,其中
iorr 表示记录路由,此时系统会自
动将IP 选项号置为07,0f 表示指
针,即记录的最后一个IP 地址的
指针,系统会自动运算该IP 选项
的长度)
TS -iots 791 0 2 4 68 variable
Used to record the time at which a
packet was processed by an
intermediate system
LSR -iolsr 791 1 0 3 131 vairable
Loose Source Route - let the
source specify the route for a
packet.
SID -iosid 791 1 0 8 136 4
Rarely used, carries the SATNET
stream identifier.
SSR -iossr 791 1 0 9 137 variable
Strict Source Route - same as LSR,
but extra hops are not allowed.
SEC
791,
1108
1 0 2 130 variable Security, rarely used
E-SEC 1108 1 0 5 133 variable Extended Security, rarely used
通常在SENDIP 中指定IP 选项时,格式比较特别,下面我们以RR 记录路由选项为例
介绍一下,如果要发送一个记录三个IP 的数据包,需要考虑如下,一是指定IP 头的长度要
包括IP 选项的长度,而是要指定RR 记录路由选项的指针位置和IP 地址(本来是由系统自
动记录IP 和更新指针位置,但现在必须手工指定),那么记录三个IP 包后,指针的位置应
是3+4×3+1=16,造好后,数据包的格式应该如下:
IP 头07 15 16 10.0.0.234(IP1) 20.0.0.234(IP2) 30.0.0.234(IP3) 00(ioeol) tcp
20B RR len ptr 4bytes 4bytes 4bytes Ptr
具体命令行如下:
#sendip –d r64 –p ipv4 –iv 4 –ih 10 –il 128 –is 10.0.0.1 –id 30.0.0.1 –iorr 10:10.0.0.234:20.0.0.234:30.0.0.234
–ioeol –p tcp –ts 1379 –td 23 –tt 8 30.0.0.1
-ih 10 表示IP 头的长度为10×4 为40 个字节,去除标准的20 个字节长度,为IP
选项预留为20 个字节
-iorr 10:10.0.0.234:20.0.0.234:30.0.0.234 中第一个10 表示用16 进制表示的指针的
位置,后面为用冒号分隔的三个用点分十进制表示的IP 地址
-ioeol 表示用00 结束IP 选项,并用随机数填充后面未用的IP 头位置
以上部分只是以RR 记录路由IP 选项为例,介绍了sendip 中指定IP 选项的方法,当然
也可以根据自己的要求发送IP 选项不符合常规的数据包。其他的IP 选项与此雷同,但发送
AntPower 版权所有&; 2003 技术文章
http://www.antpower.org 第7 页共14 页
前需要详细了解IP 选项的格式,才可正确发送。
TCP 数据包的格式:
根据TCP 数据包的格式,SENDIP 有如下命令行参数可以指定对应的TCP 数据包中参
数的值。
Field name
Size
(bits)
SendIP
option
Description
Source port 16 -ts
Source port number for the connection
(以十进制的方式指定TCP 原端口)
Destination port 16 -td
Destination port number
(以十进制的方式指定TCP 目的端口)
Sequence number 32 -tn
Number of the first data octet in this packet. If SYN bit is
set, this is the number of the first data octet of the stream
too.(指定TCP 序列号,如果不指定则随机产生)
Acknowledgment
number
32 -ta
If ACK bit is set, the next sequence number the sender is
expecting to receive.
Data offset 4 -tt
Length of TCP header in 32 bit words(指定TCP 头的长
度,单位是以32bits 也就是4 字节为单位)
Reserved 4 -tr
Should be 0. Note, rfc793 defines this as a 6 bit field, but
the last 2 are used by rfc2481 for ECN as below.
Flags: ECN 1 -tfe
Flags: CWR 1 -tfc
ECN extension flags, see rfc2481. (指定TCP 标志位,
如果要打开哪一位,就在命令行参数中指定相应位的
值,如要设置SYN 状态,只需在命令行加入-tfs 1 即可

Flags: URG 1 -tfu Urgent pointer is significant(同上)
Flags: ACK 1 -tfa Acknowledgment field is significant(同上)
Flags: PSH 1 -tfp Push function(同上)
Flags: RST 1 -tfr Reset the connection(同上)
Flags: SYN 1 -tfs Synchronize sequence numbers(同上)
AntPower 版权所有&; 2003 技术文章
http://www.antpower.org 第8 页共14 页
Flags: FIN 1 -tff No more data from sender(同上)
Window 16 -tw
Number of octet starting from the one in the
Acknowledgement field that the sender is willing to
accept
Checksum 16 -tc
Checksum of the TCP header (with checksum set to 0),
data, and a psuedo-header including the source and
destination IP addresses, IP protocol field and a 16 bit
length of the TCP header and data.
Urgent pointer 16 -tu
If URG bit is set, tHe offset of the last octet of urgent data
in this packet.
Options Variable -to...
No options are required. Any number can be added. See
below for details.
如果有TCP 选项,还可指定TCP 选项的值,SENDIP 支持的TCP 选项如下表所示。
Name
SendIP
option
RFC Type
Length (0
not
present)
Description
EOL -toeol 793 0 0
Used as padding if needed(用00 填充,表示TCP
选项结束,把TCP 头后面的位置用随机数填充)
NOP -tonop 793 1 0
Do nothing. Often used as padding so the next
option starts on a 32 bit boundary
MSS -tomss 793 2 4
Specify the maximum recieve segment size of the
sender as a 16 bit number. Only valid when SYN is
also set
WSOPT -towscale 1323 3 3
The window size should be leftshifted by the value
of the option (an 8 bit number). Only valid when
SYN is also set.
SACKOK -tosackok 2018 4 2
Selective Acknowledgement is permitted on this
connection
SACK -tosack 2018 5 variable
Selective Acknowledgement of non-contiguous
blocks of data. The data in the option is a series of
(left edge)-(right edge) pairs giving, respectively,
the first sequence number the has been recieved and
the first that hasn't.
TSOPT -tots 1323 8 10
Timestamp. The first 4 bytes (TSval) are the time
that the packet was sent, the remaining 4 (TSecr)
echo the TSval of a packet that was recieved. TSecr
is only valid when the ACK bit is set.
从上表所示,可以看出,TCP 选项可能只有一个单字节参数,如-toeol 和-tonop,也可
能由一个Type 号和一个length 长度以及该length 长度指定的字节数的数据组成的参数,使
用时sendip 会自动运算length 的长度,所以,不能随意设定TCP 选项的长度,但需要设定
TCP 选项的值。
AntPower 版权所有&; 2003 技术文章
http://www.antpower.org 第9 页共14 页
在设定TCP 选项时,同样要考虑到TCP 头的长度要包括TCP 选项的长度。
TCP 选项数据包的格式大致如下:
Kind=3 Len=3 数据:移位数
TCP 选项号TCP 选项长度TCP 选项数据占一个字节,总长度为三个字节
具体命令行格式可参照如下格式:
#sendip –d r64 –p ipv4 –iv 4 –ih 10 –il 128 –is 10.0.0.1 –id 30.0.0.1 –iorr 10:10.0.0.234:20.0.0.234:30.0.0.234
–ioeol –p tcp –ts 1379 –td 23 –tt 8 –tfa 0 –tfs 1 –towscale 0 –toeol 30.0.0.1
-towscale 0 :指设置TCP 选项3,长度为自动3,TCP 选项的值即移位数为0
-toeol :表示TCP 选项结束,后面用随机数填满TCP 头
因为用SENDIP 设定TCP 选项时,不能设定长度,所以,如果要设定长度不正确的包,
还要借助其他工具,如SNIFFER,用SNIFFER 抓到SENDIP 发送的包后,再将对应的TCP
选项的长度改为不规则的值即可。
根据前面介绍的内容,我们已经基本可以掌握用SENDIP 发送各种协议数据包的方法,
当然我们还可以利用他发送各种不符合标准的数据包,如校验和错误、长度不正确、状态位
不正确等各种我们需要的数据包,在使用时,建议与SNIFFER 搭配使用,以验证SENDIP
发出的包是否正确,进行有针对性的测试。
2.2. NESSUS 工具
NESSUS 是一个非常庞大的工具,它可以提供功能完善的安全扫描服务,还可以提供全
面的发包功能,用以构造各种格式的网络通信包。本篇只关注NESSUS 的发包功能。
NESSUS 由两个部分组成,一部分是服务器,通常运行在POSIX 系统如LINUX/UNIX
系统中,负责扫描和攻击,并收集数据,另一部分是客户端,可以运行在LINUX/UNIX 系
统或WINDOWS 系统中,负责接收和显示数据。
如果只是用来发包,则只需要服务端即可。
NESSUS 有专门的维护网站,可以随时到http://www.nessus.org 网站下载最新的源代码,
并获得全面的帮助。目前,NESSUS 最新的版本为2.0.8a。
2.2.1. NESSUS 安装方法
安装NESSUS 前要知道NESSUS 可能需要的支撑软件包,一个是GTK,通常POSIX
系统下的NESSUS 客户端需要GTK,如果你的系统安装了GTK,则必须确保安装了
gtk-config 程序,可到ftp://ftp.gimp.org/pub/gtk/v1.2 网站下载最新的GTK 程序,如果只在
LINUX/UNIX 系统下安装服务端,则可以不需要GTK 包;另一个是OPENSSL 包,如果希
望客户端和服务端的通信采用SSL 方式,则需要OPENSSL 包,可到http://www.openssl.org/
下载最新的OPENSSL 包,OPENSSL 包是可选的。
NESSUS 有三种安装方法:第一种是利用LINUX 下的LYNX 工具直接从网上安装,这
种方法很容易,但安全性低,在此不予详细介绍,可到NESSUS 网站上获取相关信息。第
二种方法是使用NESSUS 提供的nessus-installer.sh 工具,直接安装,这种方法简单且安全性
比较高。第三种方法是获取源码包,然后分别编译再进行安装。下面分别介绍第二种和第三
种方法。
AntPower 版权所有&; 2003 技术文章
http://www.antpower.org 第10 页共14 页
2.2.1.1. 采用nessus-installer.sh 方式安装
从NESSUS 网站下载最新的nessus-installer.sh 文件到本地LINUX 目录,然后执行
#sh nessus-installer.sh
系统会自动安装NESSUS 到你的系统中,中间会需要你提供相关的提示信息,一直按
回车即可。
2.2.1.2. 采用源码包方式安装
如果采用源码包方式进行安装,需要下载四个软件包,并按顺序进行安装。四个软件包
分别如下:
nessus-libraries
libnasl
nessus-core
nessus-plugins
安装时必须按顺序安装这四个软件包。
安装前,我们必须获得上面所说的四个软件包,目前版本为2.0.8a:
nessus-libraries-x.x.tar.gz
libnasl-x.x.tar.gz
nessus-core.x.x.tar.gz
nessus-plugins.x.x.tar.gz
然后开始进行安装。
1. 安装nessus-libraries
#tar –xzvf nessus-libraries-x.x.tar.gz
#cd nessus-libraries-x.x
#./configure
#make
#make install
2. 安装libnasl-x.x.tar.gz (执行与上面相同的操作)
3. 安装nessus-core.x.x.tar.gz(执行与上面相同的操作)
4. 安装nessus-plugins.x.x.tar.gz (执行与上面相同的操作)
5. 如果使用的是LINUX 系统,必须确保/usr/local/lib 路径在/etc/ld.so.conf 文件中,如
果是SOLARIS 系统, 必须执行export LD_LIBRARY_PATH=
$LD_LIBRARY_PATH :/usr/local/lib 命令。
6. 执行ldconfig 命令
7. 如果不想或不能使用GTK 的客户端,可强制使用命令行方式,这时,在执行第三
步编译nessus-core 时,可以使用如下命令:
#tar –xzvf nessus-libraries-x.x.tar.gz
#cd nessus-libraries-x.x
#./configure --disable-gtk
#make
#make install
AntPower 版权所有&; 2003 技术文章
http://www.antpower.org 第11 页共14 页
执行以上命令后,NESSUS 就已经安装在您的系统中了。
2.2.2. NESSUS 的发包方法
NESSUS 通常采用脚本方式控制发出的包,下面我们以发送圣诞老人攻击包为例,来介
绍如何利用NESSUS 发送数据包。
圣诞老人包是通过发送TCP Flag 中同时有SYN 和FIN 标志的数据包,穿透防火墙,
来达到攻击的目的。
为使用NESSUS 发送攻击包,首先要定义一个脚本,在LINUX 下,执行vi sendp 命令,
输入如下内容:
srcaddr=this_host(); 注:自动获取当前主机的IP 地址
ip = forge_ip_packet( ip_v : 4, 注:IP 协议版本为IPV4
ip_hl : 5, 注:IP 头的长度为5×4=20 字节
ip_tos : 0,
ip_len : 40, 注:在这里输入实际的长度40,因为IP 头和TCP 头都为20
ip_id : 0xABA,
ip_p : IPPROTO_TCP, 注:内部数据包协议为TCP
ip_ttl : 255,
ip_off : 0,
ip_src : srcaddr); 注:可在此直接输入IP
port = get_host_open_port(); 注:自动获取当前主机上的可用端口
if(!port)port = 139; 注:如果没有可用端口,就自动使用139 端口
tcpip = forge_tcp_packet( ip : ip, 注:表示IP 层协议采用前面定义的IP 协议包
th_sport : port, 注:可在这里直接输入端口
th_dport : port, 注:可在这里直接输入端口
th_flags : TH_SYN|TH_FIN, 注:设置TCP 状态的SYN 和FIN 标志位
th_seq : 0xF1C,
th_ack : 0,
th_x2 : 0,
th_off : 5, 注:TCP 头的长度位5×4=20 字节
th_win : 512,
th_urp : 0);
result = send_packet(tcpip,pcap_active:FALSE);
编辑完上面的脚本后,保存退出,运行如下命令:
#nasl –t 目的IP 地址测试脚本
如:
#nasl –t 10.0.0.227 sendp
AntPower 版权所有&; 2003 技术文章
http://www.antpower.org 第12 页共14 页
通过Sniffer 抓包,就会发现有相应的圣诞老人包。
在我的使用过程中,发现NESSUS 好像不支持发送带有IP 或TCP 选项的包。
具体发包的参数可参考http://www.nessus.org/doc/nasl.html
2.3. SNIFFER 工具
用SNIFFER 发包时,有两种方式,一种是直接利用Packet Generator 工具,从0 开始用
16 进制的方式造一个数据包,这种方法难度较高,因为要自己算出校验和,除非需要重现
在网络上抓到的一个16 进制格式的数据包,另外一种方式是利用已经抓到的数据包修改一
下,再发送出去,具体实现方法分别如下。
2.3.1. 利用Packet Generator 直接造包
在SNIFFER 中,选择Tools|Packet Generator 菜单,系统弹出窗口如下:
按图中的红色框中的按钮,系统会弹出一个构造包内容的对话框,如下所示:
AntPower 版权所有&; 2003 技术文章
http://www.antpower.org 第13 页共14 页
在上图中可输入包的内容,还可规定发包的个数和包的长度。
2.3.2. 利用已抓的包发包
利用已抓的包进行修改,可以避免大量的运算和输入,只需要更改自己需要更改的地方,
然后发出去即可。
如上图所示,按包的大致要求,用其他工具造好包后,用SNIFFER 抓包,或者直接将
网络上的可疑包抓过来,然后,用鼠标邮件单击该包,弹出如上图所示的快捷菜单,从中选
择Send Current Frame 菜单,系统就会弹出如下图所示的发包窗口:
AntPower 版权所有&; 2003 技术文章
http://www.antpower.org 第14 页共14 页
按要求更改包的内容,即可发送。需要注意的是如果更改了IP 地址或其他头中的内容,
则需要更新校验和,对MAC 或选项的更改不需要更改校验和。
3. 总结
通过对比前面的三种发包工具,我们发现每种工具都有自己的优点和缺点,SENDIP 比
较短小而且功能较齐全,比较适合在日常测试中使用,SNIFFER 发包工具最自由,可以发
出任何可能的数据包,NESSUS 工具功能比较全面,但在发包方面不如SENDIP,所以,建
议如果是测试需要的话,应该采用SENDIP 和SNIFFER 相结合的方式,如果同时还要使用
扫描等其他功能,可以采用NESSUS 工具。

⑹ FileZilla软件是什么

FileZilla是一个免费开源的FTP客户端软件,分为客户端版本和服务器版本,具备所有的FTP软件功能.可控性、有条理的界面和管理多站点的简化方式使得Filezilla客户端版成为一个方便高效的FTP客户端工具,而FileZilla Server则是一个小巧并且可靠的支持FTP&SFTP的FTP服务器软件.

1. 功能强大。和CuteFTP和LeechFTP很像。支持多线程下载(不过考虑到各位FTP管理员的感受,我把这个功能关闭了,呵呵),支持raw FTP指令。

2. 界面简洁。界面其实也和CuteFTP很像的,嘻嘻,而且我很欣赏它的“目录树视图”,在FTP站点目录结构复杂的时候不用转来转去了。不过不能像FlashFXP那样用ShellFolder视图是一个遗憾,要到“我的文档”之类的shell文件夹就比较麻烦了。什么时候看能不能把这个改过来。
好在我是用惯了LeapFTP的,所以这些小问题还不是很介意,呵呵。

3. 绿色!不用安装就可以直接运行,当然FileZilla也提供了一个安装版的。FileZilla的参数设置还可以选择保存在注册表还是保存到一个XML文件,如果选择保存到XML文件,就不用担心污染注册表了。

下面是使用方法:
填写好服务器地址,端口,用户名,密码,就能用了,以前没用过flashfxp或cuteftp吗

你是上传到自己的空间吧,网页要显示的话,需要传到对应的文件夹,pulic html,http doc之类的文件夹,看具体的,

远程登入这个我得看下,我没装filezilla,等我装下

远程站点是不是填写远程空间地址的,可以不填写吧,应该是这样的,因为有时候需要进入里面的文件夹,这样先填好了,连接上后就不要点了

⑺ 出于保密需要,公司某个部门要求只能下载,不能上传文件出去,能否实现

谈对局域网用户的限制技术和反限制技巧
可能现在对局域网上网用户限制比较多,比如不能上一些网站,不能玩某些游戏,不能上MSN,端口限制等等,一般就是通过代理服务器上的软件进行限制,如现在谈的最多的ISA Server 2004,或者是通过硬件防火墙进行过滤。下面谈谈如何突破限制,需要分限制情况进行说明:

一、单纯的限制某些网站,不能访问,网络游戏(比如联众)不能玩,这类限制一般是限制了欲访问的IP地址。

对于这类限制很容易突破,用普通的HTTP代理就可以了,或者SOCKS代理也是可以的。现在网上找HTTP代理还是很容易的,一抓一大把。在IE里加了HTTP代理就可以轻松访问目的网站了。

二、限制了某些协议,如不能FTP了等情况,还有就是限制了一些网络游戏的服务器端IP地址,而这些游戏又不支持普通HTTP代理。

这种情况可以用SOCKS代理,配合Sockscap32软件,把软件加到SOCKSCAP32里,通过SOCKS代理访问。一般的程序都可以突破限制。对于有些游戏,可以考虑Permeo Security Driver 这个软件。如果连SOCKS也限制了,那可以用socks2http了,不会连HTTP也限制了吧。

三、基于包过滤的限制,或者禁止了一些关键字。这类限制就比较强了,一般是通过代理服务器或者硬件防火墙做的过滤。比如:通过ISA Server 2004禁止MSN ,做了包过滤。这类限制比较难突破,普通的代理是无法突破限制的。

这类限制因为做了包过滤,能过滤出关键字来,所以要使用加密代理,也就是说中间走的HTTP或者SOCKS代理的数据流经过加密,比如跳板,SSSO, FLAT等,只要代理加密了就可以突破了, 用这些软件再配合Sockscap32,MSN就可以上了。 这类限制就不起作用了。

四、基于端口的限制,限制了某些端口,最极端的情况是限制的只有80端口可以访问,也就只能看看网页,连OUTLOOK收信,FTP都限制了。当然对于限制几个特殊端口,突破原理一样。

这种限制可以通过以下办法突破,1、找普通HTTP80端口的代理,12.34.56.78:80,象这样的,配合socks2http,把HTTP代理装换成SOCKS代理,然后再配合SocksCap32,就很容易突破了。这类突破办法中间走的代理未 加密。通通通软件也有这个功能。2、用类似FLAT软件,配合SocksCap32,不过所做的FLAT代理最好也是80端口,当然不是80端口也没关系,因为FLAT还支持再通过普通的HTTP代理访问,不是80端口,就需要再加一个80端口的HTTP 代理。这类突破办法中间走的代理加密,网管不知道中间所走的数据是什么。代理跳板也可以做到,不过代理仍然要80端口的。对于单纯是80端口限制,还可以用一些端口转换的技术突破限制。

五、以上一些限制综合的,比如有限制IP的,也有限制关键字,比如封MSN,还有限制端口的情况。

一般用第四种情况的第二个办法就可以完全突破限制。只要还允许上网,呵呵,所有的限制都可以突破。

六、还有一种情况就是你根本就不能上网,没给你上网的权限或者IP,或者做IP与MAC地址绑定了。

两个办法:

1、你在公司应该有好朋友吧,铁哥们,铁姐们都行,找一个能上网的机器,借一条通道,装一个小软件就可以解决问题了,FLAT应该可以,有密钥,别人也上不了,而且可以自己定义端口。。其他能够支持这种方式代 理的软件也可以。我进行了一下测试,情况如下:局域网环境,有一台代理上网的服务器,限定了一部分IP, 给予上网权限,而另一部分IP不能上网,在硬件防火墙或者是代理服务器上做的限制。我想即使做MAC地址与IP绑定也没有用了,照样可以突破这个限制。

在局域网内设置一台能上网的机器,然后把我机器的IP设置为不能上网的,然后给那台能上网的机器装FLAT服务器端程序,只有500多K, 本机通过FLAT客户端,用SOCKSCAP32加一些软件,如IE,测试上网通过,速度很快,而且传输数据还是加密的,非常棒。

2、和网络管理员搞好关系,一切都能搞定,网络管理员什么权限都有,可以单独给你的IP开无任何限制的,前提是你不要给网络管理员带来麻烦,不要影响局域网的正常运转。这可是最好的办法了。

另外,在局域网穿透防火墙,还有一个办法,就是用HTTPTUNNEL,用这个软件需要服务端做配合,要运行httptunnel的服务端,这种方法对局域网端口限制很有效。

隐通道技术就是借助一些软件,可以把防火墙不允许的协议封装在已被授权的可行协议内,从而通过防火墙,端口转换技术也是把不允许的端口转换成允许通过的端口,从而突破防火墙的限制。这类技术现在有些软件可以做到,HACKER经常用到这类技术。

HTTPTunnel,Tunnel这个英文单词的意思是隧道,通常HTTPTunnel被称之为HTTP暗道,它的原理就是将数据伪装成HTTP的数据形式来穿过防火墙,实际上是在HTTP请求中创建了一个双向的虚拟数据连接来穿透防火墙。说得简单点, 就是说在防火墙两边都设立一个转换程序,将原来需要发送或接受的数据包封装成HTTP请求的格式骗过防火墙,所以它不需要别的代理服务器而直接穿透防火墙。HTTPTunnel刚开始时只有Unix版本,现在已经有人把它移植到Window平台上了,它包 括两个程序,htc和hts,其中htc是客户端,而hts是服务器端,我们现在来看看我是如何用它们的。比如开了FTP的机器的IP是192.168.1.231,我本地的机器的IP是192.168.1.226,现在我本地因为防火墙的原因无法连接到 FTP上,现在用HTTPTunnel的过程如下:

第一步:在我的机器上(192.168.1.226)启动HTTPTunnel客户端。启动MS-DOS的命令行方式,然后执行htc -F 8888 192.168.1.231:80命令,其中htc是客户端程序,-f参数表示将来自192.168.1.231:80的数据全部转发到本机的8888端口,这个端口可以随便选,只要本机没有占用就可以。

然后我们用Netstat看一下本机现在开放的端口,发现8888端口已在侦听。

第二步:在对方机器上启动HTTPTunnel的服务器端,并执行命令

“hts -f localhost:21 80”,这个命令的意思是说把本机21端口发出去的数据全部通过80端口中转一下,并且开放80端口作为侦听端口,再用Neststat看一下他的机器,就会发现80端口现在也在侦听状态。

第三步:在我的机器上用FTP连接本机的8888端口,现在已经连上对方的机器了,快点去下载吧!

可是,人家看到的怎么是127.0.0.1而不是192.168.1.231的地址?因为我现在是连接本机的8888端口,防火墙肯定不会有反应,因为我没往外发包,当然局域网的防火墙不知道了。现在连接上本机的8888端口以后,FTP的数据包不管是控 制信息还是数据信息,都被htc伪装成HTTP数据包然后发过去,在防火墙看来,这都是正常数据,相当于欺骗了防火墙。

需要说明的是,这一招的使用需要其他机器的配合,就是说要在他的机器上启动一个hts,把他所提供的服务,如FTP等重定向到防火墙所允许的80端口上,这样才可以成功绕过防火墙!肯定有人会问,如果对方的机器上本身就有WWW服务,也就是说他的80端口 在侦听,这么做会不会冲突?HTTPTunnel的优点就在于,即使他的机器以前80端口开着,现在这么用也不会出现什么问题,正常的Web访问仍然走老路子,重定向的隧道服务也畅通无阻!

这里是我以前的回帖,关于局域网中的限制与反限制技巧,希望能从中得到启示

⑻ 哥们,DbSecuritySpt的问题解决了吗,我的这几天也是一样,服务器不断发包,重装系统未解决。

带宽情况:一条2M的电信光纤,一条6M的DDN专线,一条4M的网通AD,2条4M的电信AD。
带宽分配清苦:2M光纤是给市场部和商务接受订单,6M专线是专门公司邮件和FTP使用(分公司的也要上传文件),4M网通是给3个老总使用的,4M电信是给公司其他部门使用。
终端数量:80台PC
公司内部才有域管理,有WEB服务器、邮件服务器、VPN,采用群集管理。。。

问题出现:本来以前没什么问题,虽然老是遇到ARP之类的东西,不过还好基本上都能解决,虽然效率不是很高,但是由于前几天公司又加了个VOIP,这些问题就出现了,不光是VOIP老是断断续续(服务器是没问题的),连以前用得好好的VPN也老是连接不上,FTP也经常出现问题。导致一些同事老是抱怨是带宽不够,建议老板再加几条带宽,但我个人认为这并不是主要原因,因为我知道加了带宽情况可能还是这样,到时花了钱还没解决问题,我就不好在老板那说话了。

请各位给我出个主意。。。。
带宽情况:一条2M的电信光纤,一条6M的DDN专线,一条4M的网通AD,2条4M的电信AD。
带宽分配清苦:2M光纤是给市场部和商务接受订单,6M专线是专门公司邮件和FTP使用(分公司的也要上传文件),4M网通是给3个老总使用的,4M电信是给公司其他部门使用。
终端数量:80台PC
公司内部才有域管理,有WEB服务器、邮件服务器、VPN,采用群集管理。。。

问题出现:本来以前没什么问题,虽然老是遇到ARP之类的东西,不过还好基本上都能解决,虽然效率不是很高,但是由于前几天公司又加了个VOIP,这些问题就出现了,不光是VOIP老是断断续续(服务器是没问题的),连以前用得好好的VPN也老是连接不上,FTP也经常出现问题。导致一些同事老是抱怨是带宽不够,建议老板再加几条带宽,但我个人认为这并不是主要原因,因为我知道加了带宽情况可能还是这样,到时花了钱还没解决问题,我就不好在老板那说话了。

请各位给我出个主意。。。。

⑼ 如何把旧网站的数据全部转移到新网站详细点谢谢。

数据应该都是在数据库开面,先分离在附加到新的数据库里面就行了。具体方法就要看你使用的是什么什么公司的数据库软件了。

⑽ tcp协议通过什么来区分不同的连接

TCP/IP
不同的计算机系统,就好像语言不同的两个人互相见了面,完全不能交流信息。因而他们需要定义一些共通的东西来进行交流,TCP/IP就是为此而生。TCP/IP不是一个协议,而是一个协议族的统称。里面包括了IP协议,IMCP协议,TCP协议,以及我们更加熟悉的http、ftp、pop3协议等等。电脑有了这些,就好像学会了外语一样,就可以和其他的计算机终端做自由的交流了。
TCP/IP 层次
应用层(http、ftp、smtp) -->传输层(TCP、UDP)-->网络层(IP)-->数据链路层
域名系统 :域名系统是一个分布的数据库,它提供将主机名(就是网址啦)转换成IP地址的服务。
端口号(port): 注意,这个号码是用在TCP,UDP上的一个逻辑号码,并不是一个硬件端口,我们平时说把某某端口封掉了,也只是在IP层次把带有这个号码的IP包给过滤掉了而已。
应用编程接口:现在常用的编程接口有socket和TLI。
数据链路层
数据链路层有三个目的:
为IP模块发送和 接收IP数据报。
为ARP模块发送ARP请求和接收ARP应答。
为RARP发送RARP请 求和接收RARP应答
ip大家都听说过。至于ARP和RARP,ARP叫做地址解析协议,是用IP地址换MAC地址的一种协议,而RARP则叫做逆地址解析协议.
--
IP 、ARP 、RARP 协议
三者都是在网络层 ,ARP协议用来找到目标主机的Ethernet网卡Mac地址,IP则承载要发送的消息。数据链路层可以从ARP得到数据的传送信息,而从IP得到要传输的数据信息。
IP 协议
IP协议是TCP/IP协议的核心,所有的TCP,UDP,IMCP,IGCP的数据都以IP数据格式传输。要注意的是,IP不是可靠的协议,这是说,IP协议没有提供一种数据未传达以后的处理机制--这被认为是上层协议:TCP或UDP要做的事情。所以这也就出现了TCP是一个可靠的协议,而UDP就没有那么可靠的区别。

协议头
八位的TTL字段,还记得这个字段是做什么的么?这个字段规定该数据包在穿过多少个路由之后才会被抛弃(这里就体现出来IP协议包的不可靠性,它不保证数据被送达),某个ip数据包每穿过一个路由器,该数据包的TTL数值就会减少1,当该数据包的TTL成为零,它就会被自动抛弃。这个字段的最大值也就是255,也就是说一个协议包也就在路由器里面穿行255次就会被抛弃了,根据系统的不同,这个数字也不一样,一般是32或者是64,Tracerouter这个工具就是用这个原理工作的,tranceroute的-m选项要求最大值是255,也就是因为这个TTL在IP协议里面只有8bit。
现在的ip版本号是4,所以也称作IPv4。现在还有IPv6,而且运用也越来越广泛了。
IP路由选择
当一个IP数据包准备好了的时候,IP数据包(或者说是路由器)是如何将数据包送到目的地的呢?它是怎么选择一个合适的路径来"送货"的呢?
最特殊的情况是目的主机和主机直连,那么主机根本不用寻找路由,直接把数据传递过去就可以了。至于是怎么直接传递的,这就要靠ARP协议了。
稍微一般一点的情况是,主机通过若干个路由器(router)和目的主机连接。那么路由器就要通过ip包的信息来为ip包寻找到一个合适的目标来进行传递,比如合适的主机,或者合适的路由。路由器或者主机将会用如下的方式来处理某一个IP数据包
如果IP数据包的TTL(生命周期)以到,则该IP数据包就被抛弃。
搜索路由表,优先搜索匹配主机,如果能找到和IP地址完全一致的目标主机,则将该包发向目标主机
搜索路由表,如果匹配主机失败,则匹配同子网的路由器,这需要“子网掩码(1.3.)”的协助。如果找到路由器,则将该包发向路由器。
搜索路由表,如果匹配同子网路由器失败,则匹配同网号路由器,如果找到路由器,则将该包发向路由器。
搜索路由表,如果以上都失败了,就搜索默认路由,如果默认路由存在,则发包
如果都失败了,就丢掉这个包
这再一次证明了,ip包是不可靠的。因为它不保证送达。
ARP协议
还记得数据链路层的以太网的协议中,每一个数据包都有一个MAC地址头么?我们知道每一块以太网卡都有一个MAC地址,这个地址是唯一的,那么IP包是如何知道这个MAC地址的?这就是ARP协议的工作。
ARP(地址解析)协议是一种解析协议,本来主机是完全不知道这个IP对应的是哪个主机的哪个接口,当主机要发送一个IP包的时候,会首先查一下自己的ARP高速缓存(就是一个IP-MAC地址对应表缓存),如果查询的IP-MAC值对不存在,那么主机就向网络发送一个ARP协议广播包,这个广播包里面就有待查询的IP地址,而直接收到这份广播的包的所有主机都会查询自己的IP地址,如果收到广播包的某一个主机发现自己符合条件,那么就准备好一个包含自己的MAC地址的ARP包传送给发送ARP广播的主机,而广播主机拿到ARP包后会更新自己的ARP缓存(就是存放IP-MAC对应表的地方)。发送广播的主机就会用新的ARP缓存数据准备好数据链路层的的数据包发送工作。
arp -a 可以查询自己的arp缓存
这样的高速缓存是有时限的,一般是20分钟(伯克利系统的衍生系统)。
--
ICMP协议
--
UDP 协议
UDP是传输层协议,和TCP协议处于一个分层中,但是与TCP协议不同,UDP协议并不提供超时重传,出错重传等功能,也就是说其是不可靠的协议。
1 、UDP 的端口号
由于很多软件需要用到UDP协议,所以UDP协议必须通过某个标志用以区分不同的程序所需要的数据包。端口号的功能就在于此,例如某一个UDP程序A在系统中注册了3000端口,那么,以后从外面传进来的目的端口号为3000的UDP包都会交给该程序。端口号理论上可以有2^16这么多。因为它的长度是16个bit
2 、UDP 的检验和
这是一个可选的选项,并不是所有的系统都对UDP数据包加以检验和数据(相对TCP协议的必须来说),但是RFC中标准要求,发送端应该计算检验和。
UDP检验和覆盖UDP协议头和数据,这和IP的检验和是不同的,IP协议的检验和只是覆盖IP数据头,并不覆盖所有的数据。UDP和TCP都包含一个伪首部,这是为了计算检验和而摄制的。伪首部甚至还包含IP地址这样的IP协议里面都有的信息,目的是让UDP两次检查数据是否已经正确到达目的地。如果发送端没有打开检验和选项,而接收端计算检验和有差错,那么UDP数据将会被悄悄的丢掉(不保证送达),而不产生任何差错报文。
3 、UDP 的长度
UDP可以很长很长,可以有65535字节那么长。但是一般网络在传送的时候,一次一般传送不了那么长的协议(涉及到MTU的问题),就只好对数据分片,当然,这些是对UDP等上级协议透明的,UDP不需要关心IP协议层对数据如何分片。
4 、IP 分片
IP在从上层接到数据以后,要根据IP地址来判断从那个接口发送数据(通过选路),并进行MTU的查询,如果数据大小超过MTU就进行数据分片。数据的分片是对上层和下层透明,而数据也只是到达目的地还会被重新组装,不过不用担心,IP层提供了足够的信息进行数据的再组装。
在IP头里面,16bit识别号唯一记录了一个IP包的ID,具有同一个ID的IP片将会被重新组装;而13位片偏移则记录了某IP片相对整个包的位置;而这两个表示中间的3bit标志则标示着该分片后面是否还有新的分片。这三个标示就组成了IP分片的所有信息,接受方就可以利用这些信息对IP数据进行重新组织(就算是后面的分片比前面的分片先到,这些信息也是足够了)。
因为分片技术在网络上被经常的使用,所以伪造IP分片包进行流氓攻击的软件和人也就层出不穷。
5 、ICMP源站抑制差错
当目标主机的处理速度赶不上数据接收的速度,因为接受主机的IP层缓存会被占满,所以主机就会发出一个“我受不了”的一个ICMP报文。
--
单播广播和多播
单播
单播是说,对特定的主机进行数据传送。例如给某一个主机发送IP数据包。这时候,数据链路层给出的数据头里面是非常具体的目的地址,对于以太网来 说,就是网卡的MAC地址(不是FF-FF-FF-FF-FF-FF这样的地址)。现在的具有路由功能的主机应该可以将单播数据定向转发,而目的主机的网 络接口则可以过滤掉和自己MAC地址不一致的数据。
广播
广播是主机针对某一个网络上的所有主机发送数据包。这个网络可能是网络,可能是子网,还可能是所有的子网。如果是网络,例如A类网址的广播就是 netid.255.255.255,如果是子网,则是netid.netid.subnetid.255;如果是所有的子网(B类IP)则是则是 netid.netid.255.255。广播所用的MAC地址FF-FF-FF-FF-FF-FF。网络内所有的主机都会收到这个广播数据,网卡只要把 MAC地址为FF-FF-FF-FF-FF-FF的数据交给内核就可以了。一般说来ARP,或者路由协议RIP应该是以广播的形式播发的。
多播
可以说广播是多播的特例,多播就是给一组特定的主机(多播组)发送数据,这样,数据的播发范围会小一些(实际上播发的范围一点也没有变小),多播的MAC地址是最高字节的低位为一,例 如01-00-00-00-00-00。多播组的地址是D类IP,规定是224.0.0.0-239.255.255.255。
虽然多播比较特殊,但是究其原理,多播的数据还是要通过数据链路层进行MAC地址绑定然后进行发送。所以一个以太网卡在绑定了一个多播IP地址之后,必 定还要绑定一个多播的MAC地址,才能使得其可以像单播那样工作。这个多播的IP和多播MAC地址有一个对应的算法,在书的p133到p134之间。可以看到 这个对应不是一一对应的,主机还是要对多播数据进行过滤。
--
TCP
TCP和UDP处在同一层---运输层,但是TCP和UDP最不同的地方是,TCP提供了一种可靠的数据传输服务,TCP是面向连接的,也就是说,利用TCP通信的两台主机首先要经历一个“拨打电话”的过程,等到通信准备结束才开始传输数据,最后结束通话。所以TCP要比UDP可靠的多,UDP是把数据直接发出去,而不管对方是不是在收信,就算是UDP无法送达,也不会产生ICMP差错报文,这一经时重申了很多遍了。
把TCP保证可靠性的简单工作原理:
应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序产生的 数据报长度将保持不变。由TCP传递给IP的信息单位称为报文段或段
当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能 及时收到一个确认,将重发这个报文段.
当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒.
TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输 过程中的任何变化。如果收到段的检验和有差错, T P将丢弃这个报文段和不确认收到此报文段(希望发端超时并重发)。
既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段 的到达也可能会失序。如果必要, TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。
TCP还能提供流量控制。TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。
从这段话中可以看到,TCP中保持可靠性的方式就是超时重发,这是有道理的,虽然TCP也可以用各种各样的ICMP报文来处理这些,但是这也不是可靠的,最可靠的方式就是只要不得到确认,就重新发送数据报,直到得到对方的确认为止。
TCP的首部和UDP首部一样,都有发送端口号和接收端口号。但是显然,TCP的首部信息要比UDP的多,可以看到,TCP协议提供了发送和确认所需要的所有必要的信息。可以想象一个TCP数据的发送应该是如下的一个过程。
双方建立连接
发送方给接受方TCP数据报,然后等待对方的确认TCP数据报,如果没有,就重新发,如果有,就发送下一个数据报。
接受方等待发送方的数据报,如果得到数据报并检验无误,就发送ACK(确认)数据报,并等待下一个TCP数据报的到来。直到接收到FIN(发送完成数据报)
中止连接
可以想见,为了建立一个TCP连接,系统可能会建立一个新的进程(最差也是一个线程),来进行数据的传送
--
TCP协议
TCP是一个面向连接的协议,在发送输送之前 ,双方需要确定连接。而且,发送的数据可以进行TCP层的分片处理。
TCP连接的建立过程 ,可以看成是三次握手 。而连接的中断可以看成四次握手 。
1.连接的建立
在建立连接的时候,客户端首先向服务器申请打开某一个端口(用SYN段等于1的TCP报文),然后服务器端发回一个ACK报文通知客户端请求报文收到,客户端收到确认报文以后再次发出确认报文确认刚才服务器端发出的确认报文(绕口么),至此,连接的建立完成。这就叫做三次握手。如果打算让双方都做好准备的话,一定要发送三次报文,而且只需要三次报文就可以了。
可以想见,如果再加上TCP的超时重传机制,那么TCP就完全可以保证一个数据包被送到目的地。
2.结束连接
TCP有一个特别的概念叫做half-close,这个概念是说,TCP的连接是全双工(可以同时发送和接收)连接,因此在关闭连接的时候,必须关闭传和送两个方向上的连接。客户机给服务器一个FIN为1的TCP报文,然后服务器返回给客户端一个确认ACK报文,并且发送一个FIN报文,当客户机回复ACK报文后(四次握手),连接就结束了。
3.最大报文长度
在建立连接的时候,通信的双方要互相确认对方的最大报文长度(MSS),以便通信。一般这个SYN长度是MTU减去固定IP首部和TCP首部长度。对于一个以太网,一般可以达到1460字节。当然如果对于非本地的IP,这个MSS可能就只有536字节,而且,如果中间的传输网络的MSS更加的小的话,这个值还会变得更小。
4.客户端应用程序的状态迁移图
客户端的状态可以用如下的流程来表示:
CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED
以上流程是在程序正常的情况下应该有的流程,从书中的图中可以看到,在建立连接时,当客户端收到SYN报文的ACK以后,客户端就打开了数据交互地连接。而结束连接则通常是客户端主动结束的,客户端结束应用程序以后,需要经历FIN_WAIT_1,FIN_WAIT_2等状态,这些状态的迁移就是前面提到的结束连接的四次握手。
5.服务器的状态迁移图
服务器的状态可以用如下的流程来表示:
CLOSED->LISTEN->SYN收到->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED
在建立连接的时候,服务器端是在第三次握手之后才进入数据交互状态,而关闭连接则是在关闭连接的第二次握手以后(注意不是第四次)。而关闭以后还要等待客户端给出最后的ACK包才能进入初始的状态。
6.TCP服务器设计
前面曾经讲述过UDP的服务器设计,可以发现UDP的服务器完全不需要所谓的并发机制,它只要建立一个数据输入队列就可以。但是TCP不同,TCP服务器对于每一个连接都需要建立一个独立的进程(或者是轻量级的,线程),来保证对话的独立性。所以TCP服务器是并发的。而且TCP还需要配备一个呼入连接请求队列(UDP服务器也同样不需要),来为每一个连接请求建立对话进程,这也就是为什么各种TCP服务器都有一个最大连接数的原因。而根据源主机的IP和端口号码,服务器可以很轻松的区别出不同的会话,来进行数据的分发。
TCP的交互数据流
对于交互性要求比较高的应用,TCP给出两个策略来提高发送效率和减低网络负担:(1)捎带ACK。(2)Nagle算法(一次尽量多的发数据)
捎带ACK的发送方式
这个策略是说,当主机收到远程主机的TCP数据报之后,通常不马上发送ACK数据报,而是等上一个短暂的时间,如果这段时间里面主机还有发送到远程主机的TCP数据报,那么就把这个ACK数据报“捎带”着发送出去,把本来两个TCP数据报整合成一个发送。一般的,这个时间是200ms。可以明显地看到这个策略可以把TCP数据报的利用率提高很多。
Nagle算法
上过bbs的人应该都会有感受,就是在网络慢的时候发贴,有时键入一串字符串以后,经过一段时间,客户端“发疯”一样突然回显出很多内容,就好像数据一下子传过来了一样,这就是Nagle算法的作用。
Nagle算法是说,当主机A给主机B发送了一个TCP数据报并进入等待主机B的ACK数据报的状态时,TCP的输出缓冲区里面只能有一个TCP数据报,并且,这个数据报不断地收集后来的数据,整合成一个大的数据报,等到B主机的ACK包一到,就把这些数据“一股脑”的发送出去。虽然这样的描述有些不准确,但还算形象和易于理解,我们同样可以体会到这个策略对于低减网络负担的好处。
在编写插口程序的时候,可以通过TCP_NODELAY来关闭这个算法。并且,使用这个算法看情况的,比如基于TCP的X窗口协议,如果处理鼠标事件时还是用这个算法,那么“延迟”可就非常大了。
2.TCP的成块数据流
对于FTP这样对于数据吞吐量有较高要求的要求,将总是希望每次尽量多的发送数据到对方主机,就算是有点“延迟”也无所谓。TCP也提供了一整套的策略来支持这样的需求。TCP协议中有16个bit表示“窗口”的大小,这是这些策略的核心。
2.1.传输数据时ACK的问题
在解释滑动窗口前,需要看看ACK的应答策略,一般来说,发送端发送一个TCP数据报,那么接收端就应该发送一个ACK数据报。但是事实上却不是这样,发送端将会连续发送数据尽量填满接受方的缓冲区,而接受方对这些数据只要发送一个ACK报文来回应就可以了,这就是ACK的累积特性,这个特性大大减少了发送端和接收端的负担。
2.2.滑动窗口
滑动窗口本质上是描述接受方的TCP数据报缓冲区大小的数据,发送方根据这个数据来计算自己最多能发送多长的数据。如果发送方收到接受方的窗口大小为0的TCP数据报,那么发送方将停止发送数据,等到接受方发送窗口大小不为0的数据报的到来。
2.3.数据拥塞
上面的策略用于局域网内传输还可以,但是用在广域网中就可能会出现问题,最大的问题就是当传输时出现了瓶颈(比如说一定要经过一个slip低速链路)所产生的大量数据堵塞问题(拥塞),为了解决这个问题,TCP发送方需要确认连接双方的线路的数据最大吞吐量是多少。这,就是所谓的拥塞窗口。
拥塞窗口的原理很简单,TCP发送方首先发送一个数据报,然后等待对方的回应,得到回应后就把这个窗口的大小加倍,然后连续发送两个数据报,等到对方回应以后,再把这个窗口加倍(先是2的指数倍,到一定程度后就变成现行增长,这就是所谓的慢启动),发送更多的数据报,直到出现超时错误,这样,发送端就了解到了通信双方的线路承载能力,也就确定了拥塞窗口的大小,发送方就用这个拥塞窗口的大小发送数据。要观察这个现象是非常容易的,我们一般在下载数据的时候,速度都是慢慢“冲起来的”
--
TCP的超时和重传
超时重传是TCP协议保证数据可靠性的另一个重要机制,其原理是在发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的ACK报文,那么就重新发送数据,直到发送成功为止。
超时
超时时间的计算是超时的核心部分,TCP要求这个算法能大致估计出当前的网络状况,虽然这确实很困难。要求精确的原因有两个:(1)定时长久会造成网络利用率不高。(2)定时太短会造成多次重传,使得网络阻塞。所以,书中给出了一套经验公式,和其他的保证计时器准确的措施。
计时器的使用
一个连接中,有且仅有一个测量定时器被使用。也就是说,如果TCP连续发出3组数据,只有一组数据会被测量。
ACK数据报不会被测量,原因很简单,没有ACK的ACK回应可以供结束定时器测量。
重传
前面曾经提到过,数据在传输的时候不能只使用一个窗口协议,我们还需要有一个拥塞窗口来控制数据的流量,使得数据不会一下子都跑到网路中引起“拥塞”。也曾经提到过,拥塞窗口最初使用指数增长的速度来增加自身的窗口,直到发生超时重传,再进行一次微调。但是没有提到,如何进行微调,拥塞避免算法和慢启动门限就是为此而生。
所谓的慢启动门限就是说,当拥塞窗口超过这个门限的时候,就使用拥塞避免算法,而在门限以内就采用慢启动算法。所以这个标准才叫做门限,通常,拥塞窗口记做cwnd,慢启动门限记做ssthresh。下面我们来看看拥塞避免和慢启动是怎么一起工作的
算法概要
对一个给定的连接,初始化cwnd为1个报文段,ssthresh为65535个字节。
TCP输出例程的输出不能超过cwnd和接收方通告窗口的大小。拥塞避免是发送方使用 的流量控制,而通告窗口则是接收方进行的流量控制。前者是发送方感受到的网络拥塞的估 计,而后者则与接收方在该连接上的可用缓存大小有关。
当拥塞发生时(超时或收到重复确认),ssthresh被设置为当前窗口大小的一半(cwnd 和接收方通告窗口大小的最小值,但最少为2个报文段)。此外,如果是超时引起了拥塞,则 cwnd被设置为1个报文段(这就是慢启动)。
当新的数据被对方确认时,就增加cwnd,但增加的方法依赖于我们是否正在进行慢启 动或拥塞避免。如果cwnd小于或等于ssthresh,则正在进行慢启动,否则正在进行拥塞避免。 慢启动一直持续到我们回到当拥塞发生时所处位置的半时候才停止(因为我们记录了在步骤2 中给我们制造麻烦的窗口大小的一半),然后转为执行拥塞避免。
快速重传和快速恢复算法
这是数据丢包的情况下给出的一种修补机制。一般来说,重传发生在超时之后,但是如果发送端接受到3个以上的重复ACK的情况下,就应该意识到,数据丢了,需要重新传递。这个机制是不需要等到重传定时器溢出的,所以叫做快速重传,而重新传递以后,因为走的不是慢启动而是拥塞避免算法,所以这又叫做快速恢复算法。流程如下:
当收到第3个重复的ACK时,将ssthresh设置为当前拥塞窗口cwnd的一半。重传丢失的 报文段。设置cwnd为ssthresh加上3倍的报文段大小。
每次收到另一个重复的ACK时, cwnd增加1个报文段大小并发送1个分组(如果新的 cwnd允许发送)。
当下一个确认新数据的ACK到达时,设置cwnd为ssthresh(在第1步中设置的值)。这个 ACK应该是在进行重传后的一个往返时间内对步骤1中重传的确认。另外,这个ACK也应该 是对丢失的分组和收到的第1个重复的ACK之间的所有中间报文段的确认。这一步采用的是拥 塞避免,因为当分组丢失时我们将当前的速率减半。
TCP的其它定时器
坚持定时器
用于防止通告窗口为0以后双方互相等待死锁的情况
坚持定时器的原理是简单的,当TCP服务器收到了客户端的0滑动窗口报文的时候,就启动一个定时器来计时,并在定时器溢出的时候向向客户端查询窗口是否已经增大,如果得到非零的窗口就重新开始发送数据,如果得到0窗口就再开一个新的定时器准备下一次查询。通过观察可以得知,TCP的坚持定时器使用1,2,4,8,16……64秒这样的普通指数退避序列来作为每一次的溢出时间。
2.保活定时器
保活定时器更加的简单,还记得FTP或者Http服务器都有Sesstion Time机制么?因为TCP是面向连接的,所以就会出现只连接不传送数据的“半开放连接”,服务器当然要检测到这种连接并且在某些情况下释放这种连接,这就是保活定时器的作用。其时限根据服务器的实现不同而不通。另外要提到的是,当其中一端如果崩溃并重新启动的情况下,如果收到该端“前生”的保活探察,则要发送一个RST数据报文帮助另一端结束连接。