发布新日志

  • 深入理解HTTP协议(转)

    2012-06-18 13:43:09

    1. 基础概念篇

    1.1 介绍

      HTTPHyper Text Transfer Protocol(超文本传输协议)的缩写。它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETFInternet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFCRFC 1945定义了HTTP/1.0版本。其中最著名的就是RFC 2616RFC 2616定义了今天普遍使用的一个版本——HTTP 1.1

    HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。

    HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。

    1.2 TCP/IP协议栈中的位置

    HTTP协议通常承载于TCP协议之上,有时也承载于TLSSSL协议层之上,这个时候,就成了我们常说的HTTPS。如下图所示:
       

    默认HTTP的端口号为80HTTPS的端口号为443

    1.3 HTTP的请求响应模型

    HTTP协议永远都是客户端发起请求,服务器回送响应。见下图:
       

    这样就限制了使用HTTP协议,无法实现在客户端没有发起请求的时候,服务器将消息推送给客户端。

    HTTP协议是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系。

    1.4 工作流程

    一次HTTP操作称为一个事务,其工作过程可分为四步:

    1)首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。

    2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。

    3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

    4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。

    如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。

    1.5 使用WiresharkTCPhttp

    打开Wireshark,选择工具栏上的“Capture->Options”,界面选择如图1所示:
                                

    1 设置Capture选项

    一般读者只需要选择最上边的下拉框,选择合适的Device,而后点击“Capture Filter”,此处选择的是“HTTP TCP port80)”,选择后点击上图的“Start”开始抓包。
                                     

    2 选择Capture Filter

    例如在浏览器中打开http://image.baidu.com/,抓包如图3所示:
        http://www.blogjava.net/images/blogjava_net/amigoxie/40799/o_http%e5%8d%8f%e8%ae%ae%e5%ad%a6%e4%b9%a0-%e6%a6%82%e5%bf%b5-3.jpg

    3   抓包

    在上图中,可清晰的看到客户端浏览器(ip192.168.2.33)与服务器的交互过程:

    1No1:浏览器(192.168.2.33)向服务器(220.181.50.118)发出连接请求。此为TCP三次握手第一步,此时从图中可以看出,为SYNseq:X x=0

    2No2:服务器(220.181.50.118)回应了浏览器(192.168.2.33)的请求,并要求确认,此时为:SYNACK,此时seqyy0),ACKx+1(为1)。此为三次握手的第二步;

    3No3:浏览器(192.168.2.33)回应了服务器(220.181.50.118)的确认,连接成功。为:ACK,此时seqx+1(为1),ACKy+1(为1)。此为三次握手的第三步;

    4No4:浏览器(192.168.2.33)发出一个页面HTTP请求;

    5No5:服务器(220.181.50.118)确认;

    6No6:服务器(220.181.50.118)发送数据;

    7No7:客户端浏览器(192.168.2.33)确认;

    8No14:客户端(192.168.2.33)发出一个图片HTTP请求;

    9No15:服务器(220.181.50.118)发送状态响应码200 OK

    ……

    1.6 头域

    每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。

    在抓包的图中,No14点开可看到如图4所示:
       http://www.blogjava.net/images/blogjava_net/amigoxie/40799/o_http%e5%8d%8f%e8%ae%ae%e5%ad%a6%e4%b9%a0-%e6%a6%82%e5%bf%b5-4.jpg

    4 http请求消息

           回应的消息如图5所示:
                  

    5 http状态响应信息

    1.6.1 host头域

    Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。

    5host那行为:
       

    1.6.2 Referer头域

    Referer头域允许客户端指定请求uri的源资源地址,这可以允许服务器生成回退链表,可用来登陆、优化cache等。他也允许废除的或错误的连接由于维护的目的被追踪。如果请求的uri没有自己的uri地址,Referer不能被发送。如果指定的是部分uri地址,则此地址应该是一个相对地址。

    在图4中,Referer行的内容为:
       

    1.6.3 User-Agent头域

    User-Agent头域的内容包含发出请求的用户信息。

    在图4中,User-Agent行的内容为:
       http://www.blogjava.net/images/blogjava_net/amigoxie/40799/o_http%e5%8d%8f%e8%ae%ae%e5%ad%a6%e4%b9%a0-%e6%a6%82%e5%bf%b5-8.jpg

    1.6.4 Cache-Control头域

    Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cacheno-storemax-agemax-stalemin-freshonly-if-cached,响应消息中的指令包括publicprivateno-cacheno-storeno-transformmust-revalidateproxy-revalidatemax-age

    在图5中的该头域为:
       

    1.6.5 Date头域

    Date头域表示消息发送的时间,时间的描述格式由rfc822定义。例如,Date:Mon,31Dec200104:25:57GMTDate描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。

    5中,该头域如下图所示:
      
     

    1.7 HTTP的几个重要概念

    1.7.1连接:Connection

    一个传输层的实际环流,它是建立在两个相互通讯的应用程序之间。

    http1.1requestreponse头中都有可能出现一个connection的头,此header的含义是当clientserver通信时对于长链接如何进行处理。

    http1.1中,clientserver都是默认对方支持长链接的, 如果client使用http1.1协议,但又不希望使用长链接,则需要在header中指明connection的值为close;如果server方也不想支持长链接,则在response中也需要明确说明connection的值为close。不论request还是responseheader中包含了值为closeconnection,都表明当前正在使用的tcp链接在当天请求处理完毕后会被断掉。以后client再进行新的请求时就必须创建新的tcp链接了。

    1.7.2消息:Message

    HTTP通讯的基本单位,包括一个结构化的八元组序列并通过连接传输。

    1.7.3请求:Request

    一个从客户端到服务器的请求信息包括应用于资源的方法、资源的标识符和协议的版本号。

    1.7.4响应:Response

    一个从服务器返回的信息包括HTTP协议的版本号、请求的状态(例如成功没找到”)和文档的MIME类型。

    1.7.5资源:Resource

    URI标识的网络数据对象或服务。

    1.7.6实体:Entity

    数据资源或来自服务资源的回映的一种特殊表示方法,它可能被包围在一个请求或响应信息中。一个实体包括实体头信息和实体的本身内容。

    1.7.7客户机:Client

    一个为发送请求目的而建立连接的应用程序。

    1.7.8用户代理:UserAgent

    初始化一个请求的客户机。它们是浏览器、编辑器或其它用户工具。

    1.7.9服务器:Server

    一个接受连接并对请求返回信息的应用程序。

    1.7.10源服务器:Originserver

    是一个给定资源可以在其上驻留或被创建的服务器。

    1.7.11代理:Proxy

    一个中间程序,它可以充当一个服务器,也可以充当一个客户机,为其它客户机建立请求。请求是通过可能的翻译在内部或经过传递到其它的服务器中。一个代理在发送请求信息之前,必须解释并且如果可能重写它。

    代理经常作为通过防火墙的客户机端的门户,代理还可以作为一个帮助应用来通过协议处理没有被用户代理完成的请求。

    1.7.12网关:Gateway

    一个作为其它服务器中间媒介的服务器。与代理不同的是,网关接受请求就好象对被请求的资源来说它就是源服务器;发出请求的客户机并没有意识到它在同网关打交道。

    网关经常作为通过防火墙的服务器端的门户,网关还可以作为一个协议翻译器以便存取那些存储在非HTTP系统中的资源。

    1.7.13通道:Tunnel

    是作为两个连接中继的中介程序。一旦激活,通道便被认为不属于HTTP通讯,尽管通道可能是被一个HTTP请求初始化的。当被中继的连接两端关闭时,通道便消失。当一个门户(Portal)必须存在或中介(Intermediary)不能解释中继的通讯时通道被经常使用。

    1.7.14缓存:Cache

    反应信息的局域存储。

        附录:参考资料

    http_百度百科》:http://baike.baidu.com/view/9472.htm

    《结果编码和http状态响应码》:http://blog.tieniu1980.cn/archives/377

    《分析TCP的三次握手》:

    http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece763104c8c711923d030678197027fa3c215cc7905141130a8e5747e0d548d98297a5ae91e03f7f63772315477e3cacdd94cdbbdc42225d82c36734f844315c419d891007a9f34d507a9f916a2e1b065d2f48193864353bb15543897f1fb4d711edd1b86033093b1e94e022e67adec40728e2e605f983431c5508fe4&p=c6769a46c5820efd08e2973b42&user=baidu

    《使用Wireshark来检测一次HTTP连接过程》:

    http://blog.163.com/wangbo_tester/blog/static/12806792120098174162288/

    http协议的几个重要概念》:http://nc.mofcom.gov.cn/news/10819972.html

    http协议中connection头的作用》:

           http://blog.csdn.net/barfoo/archive/2008/06/05/2514667.aspx 

    2. 协议详解篇

    2.1 HTTP/1.0HTTP/1.1的比较

    RFC 1945定义了HTTP/1.0版本,RFC 2616定义了HTTP/1.1版本。

    笔者在blog上提供了这两个RFC中文版的下载地址。

    RFC1945下载地址:

    http://www.blogjava.net/Files/amigoxie/RFC1945HTTP)中文版.rar

    RFC2616下载地址:

    http://www.blogjava.net/Files/amigoxie/RFC2616HTTP)中文版.rar

    2.1.1建立连接方面

    HTTP/1.0 每次请求都需要建立新的TCP连接,连接不能复用。HTTP/1.1 新的请求可以在上次请求建立的TCP连接之上发送,连接可以复用。优点是减少重复进行TCP三次握手的开销,提高效率。

    注意:在同一个TCP连接中,新的请求需要等上次请求收到响应后,才能发送。

    2.1.2 Host

    HTTP1.1Request消息头里头多了一个Host, HTTP1.0则没有这个域。

    Eg

        GET /pub/WWW/TheProject.html HTTP/1.1
        Host: www.w3.org

        可能HTTP1.0的时候认为,建立TCP连接的时候已经指定了IP地址,这个IP地址上只有一个host

    2.1.3日期时间戳

    (接收方向)

    无论是HTTP1.0还是HTTP1.1,都要能解析下面三种date/time stamp

    Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123
    Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
    Sun Nov 6 08:49:37 1994       ; ANSI C's asctime() format

           (发送方向)

    HTTP1.0要求不能生成第三种asctime格式的date/time stamp

    HTTP1.1则要求只生成RFC 1123(第一种)格式的date/time stamp

    2.1.4状态响应码

    状态响应码100 (Continue) 状态代码的使用,允许客户端在发request消息body之前先用request header试探一下server,看server要不要接收request body,再决定要不要发request body

    客户端在Request头部中包含

    Expect: 100-continue

           Server看到之后呢如果回100 (Continue) 这个状态代码,客户端就继续发request body。这个是HTTP1.1才有的。

    另外在HTTP/1.1中还增加了101203205等等性状态响应码

    2.1.5请求方式

    HTTP1.1增加了OPTIONS, PUT, DELETE, TRACE, CONNECT这些Request方法.

           Method         = "OPTIONS"                ; Section 9.2

                          | "GET"                    ; Section 9.3

                          | "HEAD"                   ; Section 9.4

                          | "POST"                   ; Section 9.5

                          | "PUT"                    ; Section 9.6

                          | "DELETE"                 ; Section 9.7

                          | "TRACE"                  ; Section 9.8

                          | "CONNECT"                ; Section 9.9

                          | extension-method

           extension-method = token

    2.2 HTTP请求消息

    2.2.1请求消息格式

    请求消息格式如下所示:

    请求行

    通用信息头|请求头|实体头

    CRLF(回车换行)

    实体内容

    其中“请求行”为:请求行 = 方法 [空格] 请求URI [空格] 版本号 [回车换行]

    请求行实例:

    Eg1

    GET /index.html HTTP/1.1

           Eg2

    POST http://192.168.2.217:8080/index.jsp HTTP/1.1

    HTTP请求消息实例:

    GET /hello.htm HTTP/1.1
    Accept: */*
    Accept-Language: zh-cn
    Accept-Encoding: gzip, deflate
    If-Modified-Since: Wed, 17 Oct 2007 02:15:55 GMT
    If-None-Match: W/"158-1192587355000"
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
    Host: 192.168.2.162:8080
    Connection: Keep-Alive


    2.2.2请求方法

           HTTP的请求方法包括如下几种:

    q      GET

    q      POST

    q      HEAD

    q      PUT

    q      DELETE

    q      OPTIONS

    q      TRACE

    q      CONNECT

    2.3 HTTP响应消息

    2.3.1响应消息格式

    HTTP响应消息的格式如下所示:

    状态行

    通用信息头|响应头|实体头

    CRLF

    实体内容

    其中:状态行 = 版本号 [空格] 状态码 [空格] 原因 [回车换行]

    状态行举例:

    Eg1

    HTTP/1.0 200 OK 

          Eg2

    HTTP/1.1 400 Bad Request

         HTTP响应消息实例如下所示:

    HTTP/1.1 200 OK
    ETag: W/"158-1192590101000"
    Last-Modified: Wed, 17 Oct 2007 03:01:41 GMT
    Content-Type: text/html
    Content-Length: 158
    Date: Wed, 17 Oct 2007 03:01:59 GMT
    Server: Apache-Coyote/1.1

    2.3.2 http的状态响应码

    2.3.2.1  1**:请求收到,继续处理

    100——客户必须继续发出请求

    101——客户要求服务器根据请求转换HTTP协议版本

    2.3.2.2  2**操作成功收到分析、接受

    200——交易成功
    201——提示知道新文件的URL

    202——接受和处理、但处理未完成

    203——返回信息不确定或不完整

    204——请求收到,但返回信息为空

    205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件

    206——服务器已经完成了部分用户的GET请求

    2.3.2.3  3**:完成此请求必须进一步处理

    300——请求的资源可在多处得到

    301——删除请求数据

    302——在其他地址发现了请求数据

    303——建议客户访问其他URL或访问方式

    304——客户端已经执行了GET,但文件未变化

    305——请求的资源必须从服务器指定的地址得到

    306——前一版本HTTP中使用的代码,现行版本中不再使用

    307——申明请求的资源临时性删除

    2.3.2.4  4**:请求包含一个错误语法或不能完成

    400——错误请求,如语法错误

    401——未授权

    HTTP 401.1 - 未授权:登录失败

      HTTP 401.2 - 未授权:服务器配置问题导致登录失败

      HTTP 401.3 - ACL 禁止访问资源

      HTTP 401.4 - 未授权:授权被筛选器拒绝

    HTTP 401.5 - 未授权:ISAPI CGI 授权失败

    402——保留有效ChargeTo头响应

    403——禁止访问

    HTTP 403.1 禁止访问:禁止可执行访问

      HTTP 403.2 - 禁止访问:禁止读访问

      HTTP 403.3 - 禁止访问:禁止写访问

      HTTP 403.4 - 禁止访问:要求 SSL

      HTTP 403.5 - 禁止访问:要求 SSL 128

      HTTP 403.6 - 禁止访问:IP 地址被拒绝

      HTTP 403.7 - 禁止访问:要求客户证书

      HTTP 403.8 - 禁止访问:禁止站点访问

      HTTP 403.9 - 禁止访问:连接的用户过多

      HTTP 403.10 - 禁止访问:配置无效

      HTTP 403.11 - 禁止访问:密码更改

      HTTP 403.12 - 禁止访问:映射器拒绝访问

      HTTP 403.13 - 禁止访问:客户证书已被吊销

      HTTP 403.15 - 禁止访问:客户访问许可过多

      HTTP 403.16 - 禁止访问:客户证书不可信或者无效

    HTTP 403.17 - 禁止访问:客户证书已经到期或者尚未生效

    404——没有发现文件、查询或URl

    405——用户在Request-Line字段定义的方法不允许

    406——根据用户发送的Accept拖,请求资源不可访问

    407——类似401,用户必须首先在代理服务器上得到授权

    408——客户端没有在用户指定的饿时间内完成请求

    409——对当前资源状态,请求不能完成

    410——服务器上不再有此资源且无进一步的参考地址

    411——服务器拒绝用户定义的Content-Length属性请求

    412——一个或多个请求头字段在当前请求中错误

    413——请求的资源大于服务器允许的大小

    414——请求的资源URL长于服务器允许的长度

    415——请求资源不支持请求项目格式

    416——请求中包含Range请求头字段,在当前请求资源范围内没有range

  • 【转】 标准http状态码

    2011-05-07 17:42:55

    Number
        Description
     
    100
     Continue
     
    101
     Switching protocols
     
    200
     OK
     
    201
     Created
     
    202
     Accepted
     
    203
     Non-Authoritative Information
     
    204
     No Content
     
    205
     Reset Content
     
    206
     Partial Content
     
    300
     Multiple Choices
     
    301
     Moved Permanently
     
    302
     Found
     
    303
     See Other
     
    304
     Not Modified
     
    305
     Use Proxy
     
    307
     Temporary Redirect
     
    400
     Bad Request
     
    401
     Unauthorized
     
    402
     Payment Required
     
    403
     Forbidden
     
    404
     Not Found
     
    405
     Method Not Allowed
     
    406
     Not Acceptable
     
    407
     Proxy Authentication Required
     
    408
     Request Timeout
     
    409
     Conflict
     
    410
     Gone
     
    411
     Length Required
     
    412
     Precondition Failed
     
    413
     Request Entity Too Large
     
    414
     Request-URI Too Long
     
    415
     Unsupported Media Type
     
    416
     Requested Range Not Suitable
     
    417
     Expectation Failed
     
    500
     Internal Server Error
     
    501
     Not Implemented
     
    502
     Bad Gateway
     
    503
     Service Unavailable
     
    504
     Gateway Timeout
     
    505
     HTTP Version Not Supported
     

     
     
     
     
    1.1 消息1xx(Informational 1xx)
    该类状态代码用于表示临时回应。临时回应由状态行(Status-Line)及可选标题组成,由空行终止。HTTP/1.0中没有定义任何1xx的状态代码,所以它们不是对HTTP/1.0请求的合法回应。实际上,它们主要用于实验用途,这已经超出本文档的范围。
    1.2 成功2xx(Successful 2xx)
    表示客户端请求被成功接收、理解、接受。
    200 OK
    请求成功。回应的信息依赖于请求所使用的方法,如下:
    GET 要请求的资源已经放在回应的实体中了。
    HEAD 没有实体主体,回应中只包括标题信息。 
    POST 实体(描述或包含操作的结果)。
    201 Created
    请求完成,结果是创建了新资源。新创建资源的URI可在回应的实体中得到。原始服务器应在发出该状态代码前创建该资源。如果该操作不能立即完成,服务器必须在该资源可用时在回应主体中给出提示,否则,服务器端应回应202(可被接受)。
    在本文定义的方法,只有POST可以创建资源。
    202 Accepted
    请求被接受,但处理尚未完成。请求可能不一定会最终完成,有可能被处理过程随时中断,在这种情况下,没有办法在异步操作中重新发送状态代码。
    202回应是没有义务的,这样做的目的是允许服务器不必等到用户代理和服务器间的连接结束,就可以响应其它过程的请求(象每天运行一次的,基于批处理的过程)。
    在某些回应中返回的实体中包括当前请求的状态指示、状态监视器指针或用户对请求能否实现的评估信息。
    204 No Content
    服务器端已经实现了请求,但是没有返回新的信息。如果客户是用户代理,则勿需为此更新自身的文档视图。该回应主要是为了在不影响用户代理激活文档视图的前提下,进行script语句的输入及其它操作。该回应还可能包括新的、以实体标题形式表示的元信息,它可被当前用户代理激活视图中的文档所使用。
    1.3 重定向(Redirection 3xx)
    该类状态码表示用户代理要想完成请求,还需要发出进一步的操作。这些操作只有当后跟的请求是GET或HEAD时,才可由用户代理来实现,而不用与用户进行交互。用户代理永远也不要对请求进行5次以上的重定向操作,这样可能导致无限循环。
    300 Multiple Choices
    该状态码不被HTTP/1.0的应用程序直接使用,只是做为3xx类型回应的缺省解释。存在多个可用的被请求资源。
    除非是HEAD请求,否则回应的实体中必须包括这些资源的字符列表及位置信息,由用户或用户代理来决定哪个是最适合的。
    如果服务器有首选,它应将对应的URL信息存放在位置域(Location field)处,用户代理会根据此域的值来实现自动的重定向。
    301 Moved Permanently
    请求到的资源都会分配一个永久的URL,这样就可以在将来通过该URL来访问此资源。有编辑链接功能的客户端会尽可能地根据服务器端传回的新链接而自动更新请求URI。新的URL必须由回应中的位置域指定。除非是HEAD请求,否则回应的实体主体(Entity-Body)必须包括对新URL超链接的简要描述。
    如果用POST方法发出请求,而接收到301回应状态码。在这种情况下,除非用户确认,否则用户代理不必自动重定向请求,因为这将导致改变已发出请求的环境。
    注意:当在接收到301状态码后而自动重定向POST请求时,一些现存的用户代理会错误地将其改为GET请求。
    302 Moved Temporarily
    请求到的资源在一个不同的URL处临时保存。因为重定向有时会被更改,客户端应继续用请求URI来发出以后的请求。新的URL必须由回应中的位置域指定。除非是HEAD请求,否则回应的实体主体(Entity-Body)必须包括对新URL超链接的简要描述。
    如果用POST方法发出请求,而接收到302回应状态码。在这种情况下,除非用户确认,否则用户代理不必自动重定向请求,因为这将导致改变已发出请求的环境。
    注意:当在接收到302状态码后而自动重定向POST请求时,一些现存的用户代理会错误地将其改为GET请求。
    304 Not Modified
    如果客户端成功执行了条件GET请求,而对应文件自If-Modified-Since域所指定的日期以来就没有更新过,服务器应当回应此状态码,而不是将实体主体发送给客户端。回应标题域中只应包括一些相关信息,比如缓存管理器、与实体最近更新(entity's Last-Modified)日期无关的修改。相关标题域的例子有:日期、服务器、过期时间。每当304回应中给出的域值发生变化,缓存都应当对缓存的实体进行更新。
    1.4 客户端错误(Client Error)4xx
    4xx类的状态码表示客户端发生错误。如果客户端在收到4xx代码时请求还没有完成,它应当立即终止向服务器发送数据。除了回应HEAD请求外,不论错误是临时的还是永久的,服务器端都必须在回应的实体中包含错误状态的解释。这些状态码适用于任何请求方法。
    注意:如果客户端正在发送数据,服务器端的TCP实现应当小心,以确保客户端在关闭输入连接之前收到回应包。如果客户端在关闭后仍旧向服务器发送数据,服务器会给客户  端发送一个复位包,清空客户端尚未处理的输入缓冲区,以终止HTTP应用程序的读取、解释活动。
    400 非法请求(Bad Request)
    如果请求的语法不对,服务器将无法理解。客户端在对该请求做出更改之前,不应再次向服务器重复发送该请求。
    401 未授权(Unauthorized)
    请求需要用户授权。回应中的WWW-Authenticate标题域(10.16节)应提示用户以授权方式请求资源。客户端应使用合适的授权标题域(10.2节)来重复该请求。如果请求中已经包括了授权信任信息,那回应的401表示此授权被拒绝。如果用户代理在多次尝试之后,回应一样还是返回401状态代码,用户应当察看一下回应的实体,因为在实体中会包括一些相关的动态信息。HTTP访问授权会在11节中解释。
    403 禁止(Forbidden)
    服务器理解请求,但是拒绝实现该请求。授权对此没有帮助,客户端应当停止重复发送此请求。如果不是用HEAD请求方法,而且服务器端愿意公布请求未被实现原因的前提下,服务器会将拒绝原因写在回应实体中。该状态码一般用于服务器端不想公布请求被拒绝的细节或没有其它的回应可用。
    404 没有找到(Not Found)
    服务器没有找到与请求URI相符的资源。404状态码并不指明状况是临时性的还是永久性的。如果服务器不希望为客户端提供这方面的信息,还回应403(禁止)状态码。
    1.5 服务器错误(Server Error )5xx
    回应代码以‘5’开头的状态码表示服务器端发现自己出现错误,不能继续执行请求。如果客户端在收到5xx状态码时,请求尚未完成,它应当立即停止向服务器发送数据。除了回应HEAD请求外,服务器应当在其回应实体中包括对错误情况的解释、并指明是临时性的还永久性的。
    这类回应代码没有标题域,可适用于任何请求方法。
    500 服务器内部错误(Internal Server Error)
    服务器碰到了意外情况,使其无法继续回应请求。
    501 未实现(Not Implemented)
    服务器无法提供对请求中所要求功能的支持。如果服务器无法识别请求方法就会回应此状态代码,这意味着不能回应请求所要求的任何资源。
    502 非法网关(Bad Gateway)
    充当网关或代理的服务器从要发送请求的上游(upstream)服务器收到非法的回应。
    503 服务不可用(Service Unavailable)
    服务器当前无法处理请求。这一般是由于服务器临时性超载或维护引起的。该状态码暗示情况是暂时性的,要产生一些延迟。
    注意:503状态码并没有暗示服务器在超载时一定要返回此状态码。一些服务器可能希望在超载时采用简单处理,即断掉连接。
    IIS 错误代码大汇总
    400 无法解析此请求。
    401.1 未经授权:访问由于凭据无效被拒绝。
    401.2 未经授权: 访问由于服务器配置倾向使用替代身份验证方法而被拒绝。
    401.3 未经授权:访问由于 ACL 对所请求资源的设置被拒绝。
    401.4 未经授权:Web 服务器上安装的筛选器授权失败。
    401.5 未经授权:ISAPI/CGI 应用程序授权失败。
    401.7 未经授权:由于 Web 服务器上的 URL 授权策略而拒绝访问。
    403 禁止访问:访问被拒绝。
    403.1 禁止访问:执行访问被拒绝。
    403.2 禁止访问:读取访问被拒绝。
    403.3 禁止访问:写入访问被拒绝。
    403.4 禁止访问:需要使用 SSL 查看该资源。
    403.5 禁止访问:需要使用 SSL 128 查看该资源。
    403.6 禁止访问:客户端的 IP 地址被拒绝。
    403.7 禁止访问:需要 SSL 客户端证书。
    403.8 禁止访问:客户端的 DNS 名称被拒绝。
    403.9 禁止访问:太多客户端试图连接到 Web 服务器。
    403.10 禁止访问:Web 服务器配置为拒绝执行访问。
    403.11 禁止访问:密码已更改。
    403.12 禁止访问:服务器证书映射器拒绝了客户端证书访问。
    403.13 禁止访问:客户端证书已在 Web 服务器上吊销。
    403.14 禁止访问:在 Web 服务器上已拒绝目录列表。
    403.15 禁止访问:Web 服务器已超过客户端访问许可证限制。
    403.16 禁止访问:客户端证书格式错误或未被 Web 服务器信任。
    403.17 禁止访问:客户端证书已经到期或者尚未生效。
    403.18 禁止访问:无法在当前应用程序池中执行请求的 URL。
    403.19 禁止访问:无法在该应用程序池中为客户端执行 CGI。
    403.20 禁止访问:Passport 登录失败。
    404 找不到文件或目录。
    404.1 文件或目录未找到:网站无法在所请求的端口访问。
    注意 404.1 错误只会出现在具有多个 IP 地址的计算机上。如果在特定 IP 地址/端口组合上收到客户端请求,而且没有将 IP 地址配置为在该特定的端口上侦听,则 IIS 返回 404.1 HTTP 错误。例如,如果一台计算机有两个 IP 地址,而只将其中一个 IP 地址配置为在端口 80 上侦听,则另一个 IP 地址从端口 80 收到的任何请求都将导致 IIS 返回 404.1 错误。只应在此服务级别设置该错误,因为只有当服务器上使用多个 IP 地址时才会将它返回给客户端。
    404.2 文件或目录无法找到:锁定策略禁止该请求。
    404.3 文件或目录无法找到:MIME 映射策略禁止该请求。
    405 用于访问该页的 HTTP 动作未被许可。
    406 客户端浏览器不接受所请求页面的 MIME 类型。
    407 Web 服务器需要初始的代理验证。
    410 文件已删除。
    412 客户端设置的前提条件在 Web 服务器上评估时失败。
    414 请求 URL 太大,因此在 Web 服务器上不接受该 URL。
    500 服务器内部错误。
    500.11 服务器错误:Web 服务器上的应用程序正在关闭。
    500.12 服务器错误:Web 服务器上的应用程序正在重新启动。
    500.13 服务器错误:Web 服务器太忙。
    500.14 服务器错误:服务器上的无效应用程序配置。
    500.15 服务器错误:不允许直接请求 GLOBAL.ASA。
    500.16 服务器错误:UNC 授权凭据不正确。
    500.17 服务器错误:URL 授权存储无法找到。
    500.18 服务器错误:URL 授权存储无法打开。
    500.19 服务器错误:该文件的数据在配置数据库中配置不正确。
    500.20 服务器错误:URL 授权域无法找到。
    500.100 内部服务器错误:ASP 错误。
    501 标题值指定的配置没有执行。
    502 Web 服务器作为网关或代理服务器时收到无效的响应。
     
  • 【转】Cisco网络设备的SNMP及Syslog配置参考实例

    2010-05-13 15:26:56

    简单网络管理协议(SNMP)对于每个网络管理员来说说都是必需的。通过几个简单的命令,我们就可以对其进行配置。目前SNMP仍然是监视网络设备(包括Cisco路由器和交换机)性能的流行方法。通过SNMP管理站点,管理员可以查看网络设备性能的图表。另外,Cisco网简单网络管理协议(SNMP)对于每个网络管理员来说说都是必需的。通过几个简单的命令,我们就可以对其进行配置。
        目前SNMP仍然是监视网络设备(包括Cisco路由器和交换机)性能的流行方法。通过SNMP管理站点,管理员可以查看网络设备性能的图表。另外,Cisco网络设备还会将报警信息 (称作 traps)发送到管理站点。

    什么是SNMP?

    SNMP分为三个版本:v1, v2, 和 v3.其功能是依次递增的。很多网络管理员喜欢用V2版,但是V3版本可以提供更多的安全特性。

    那么SNMP是怎么工作的呢? SNMP设备包含了一个配制好的SNMP代理。网络管理系统(NMS)会与每个网络设备上的SNMP代理进行对话。

    NMS可以是一个很大的系统,比如HP OpenView,也可以是一个小巧的工具软件,比如PRTG.

    SNMP如何帮助我?

    SNMP可做的工作很多,比如以下几类:

    ◆以图表的方式显示 Cisco路由器/交换机的带宽使用情况,可以按端口,数据流向等分类。

    ◆以图形方式显示网络错误(比如CRC错误)。

    ◆某个端口出现问题时可以发送警告信息给管理员。

    是否需要NMS?

    作为管理员,一定要有一个NMS来帮助实现SNMP的功能。配置SNMP 本身并不会让你获得任何信息,你需要配置一个NMS系统来接收,并显示出SNMP的信息。

    如何配置SNMP监视?

    要配置SNMP,我建议首先查看一下设备的信息。比如下面这些:

    Router(config)# snmp-server contact David Davis - Network Admin - 555-1212
    Router(config)# snmp-server location Dallas, Texas, USA
    Router(config)# snmp-server chassis-id Cisco2610-Router


    接下来我们要配置SNMP以便 NMS可以监视它。配置SNMP的方法很多。这里我们只介绍一点配置Cisco路由器和交换机的方法。

    首先,我们需要建立一个识别字符串。识别字符串其实就是访问网络设备的密码。设立一个良好的识别字符串可以让我们更好的读写网络设备,比如:

    Router(config)# snmp-server community MyCommunity972 RW


    现在我们的NMS,不论在网络的什么节点,都可以读取(view)以及写入(change)设备的配置和状态。(对于高级的NMS,我们可以使用SNMP修改设备上的配置,但是这并不是SNMP的主要功能)

    在本例中,我们将网络设备设置为 MyCommunity972 .

    如何配置SNMP发送警报信息?

    在这方面,我们可以使用诸如PRTG等NMS来图形化路由器或者交换机端口的带宽使用情况。但是直接配置的方式也是管理员应该知道的。因此我们就先介 绍一下如何配置路由器和交换机在端口关闭或开启时发警报信息给NMS.首先,我们可以选择一款免费的开源NMS,如OpenNMS ,或者商业NMS,如Ipswitch的 WhatsUp .

    在本例中,我们设置路由器或交换机发送SNMP报文到192.168.1.23主机(NMS),并带有设备的识别字符串,以便我们知道是那个设备出现问题了。我们希望设备端口开启或关闭时,或者有人重新启动设备时发送信息给NMS.以下是设置命令:

    Router(config)# snmp-server host 192.168.1.23 version 2c MyCommunity972
    Router(config)# snmp-server enable traps snmp linkdown linkup coldstart warmstart


    在Cisco IOS 12.0到12.3版本中,存在SNMP漏洞,因此大家要注意不要使用这些版本的Cisco IOS.尽可能在安全的前提下进行配置。

     

     

    ◆◆Cisco snmp配置 ◆◆

    在IOS的Enable状态下,敲入
    config terminal 进入全局配置状态
    Cdp run 启用CDP
    snmp-server community gsunion ro 配置本路由器的只读字串为gsunion
    snmp-server community gsunion rw 配置本路由器的读写字串为gsunion
    snmp-server enable traps 允许路由器将所有 类型SNMP Trap发送出去
    snmp-server host IP-address-server traps trapcomm 指定路由器SNMP Trap的接收者为10.238.18.17,发送Trap时采用trapcomm作为字串
    snmp-server trap-source loopback0 将loopback接口的IP地址作为SNMP Trap的发送源地址
    show running
    copy running start或write terminal 显示并检查配置
    保存配置

    配置Cisco设备的SNMP代理

    配置Cisco设备上的SNMP代理的步骤如下:

    启用SNMP:

    configure terminal

    snmp-server community rw/ro (example: snmp-server community public ro)

    end

    copy running-configstartup-config
    启用陷阱:

    configure terminal

    snmp-server enable traps snmp authentication

    end

    copy running-configstartup-config

    配置snmp
    #conf t
    #snmp-server community cisco ro(只读) ;配置只读通信字符串
    #snmp-server community secret rw(读写) ;配置读写通信字符串
    #snmp-server enable traps ;配置网关SNMP TRAP
    #snmp-server host 10.254.190.1 rw ;配置网关工作站地址

  • 【转】Cisco网络设备的SNMP及Syslog配置参考实例

    2010-05-13 15:24:59

    IOS设备

    在IOS的Enable状态下,敲入
    config terminal 进入全局配置状态

    SNMP配置
    Cdp run 启用CDP
    snmp-server community gsunion ro 配置本路由器的只读字串为gsunion
    snmp-server community gsunion rw 配置本路由器的读写字串为gsunion
    snmp-server enable traps 允许路由器将所有类型SNMP Trap发送出去
    snmp-server host IP-address-server traps trapcomm 指定路由器SNMP Trap的接收者为10.238.18.17,发送Trap时采用trapcomm作为字串
    snmp-server trap-source loopback0 将loopback接口的IP地址作为SNMP Trap的发送源地址


    syslog配置
    1. 必配,配置将日志信息发送到指定服务器(监视服务器)
    logging on 起动log机制
    logging IP-address-server 将log记录发送到10.238.18.17 (CW2K安装机器的IP地址)上的syslog server
    2. 选配,设置日志发送的高级属性
    logging facility local7 将记录事件类型定义为local7
    logging trap warning 将记录事件严重级别定义为从warningl开始,一直到最紧急级别的事件全部记录到前边指定的syslog server.
    logging source-interface loopback0 指定记录事件的发送源地址为loopback0的IP地址
    service timestamps log datetime 发送记录事件的时候包含时间标记
    enable password ******
    line tty 0 4
    password ******
    login local 设置Enable口令和Telnet口令
    show running
    copy running start或write terminal 显示并检查配置
    保存配置

    -------------------------------------------------------------------------------------------------

    logging trap level //指定日志消息的级别

    (0:紧急(Emergencies)
    1:告警(Alerts)
    2:严重的(Critical)
    3:错误(Errors)
    4:警告(Warnings)
    5:通知(Notifications)
    6:信息(Informational)
    7:调试(Debugging))
    logging trap 7 //把调试信息设置为Debug级,记录FTP命令和WWW的URL

    另外可用logging facility命令更改设备号,PIX默认为local4(20)

    //facility标识, RFC3164 规定的本地设备标识为 local0 - local7
    这个是对设备的重要性进行标识而已,跟日志本身没有关系,用默认的local7即可.

    syslog要考虑的主要是哪些日志需要发送到日志服务器上,即日志等级,使用如下命令:
    device(config)#logging trap warning //日志记录级别,可用"?"查看详细内容
    • emergency—Logs only emergency events.
    • alert—Logs alert and more severe events.
    • critical—Logs critical and more severe events.
    • error—Logs error and more severe events.
    • warning—Logs warning and more severe events.
    • notice—Logs notice and more severe events.
    • informational—Logs informational and more severe events.
    • debug—Logs all events, including debug events.
    为了防止日志量太大,一般设置成warning就行了。
    ---------------------------------------------------------------------------------------------------------------


    CatOS设备
    在CatOS的Enable状态下,敲入

    SNMP配置
    set interface sc0 VLAN ID IP address 配置交换机本地管理接口所在VLAN ID,IP地址,子网掩码
    Set cdp enable all 启用CDP
    set snmp community read-only gsunion 配置本交换机的只读字串为public
    set snmp community read-write-all gsunion 配置本交换机的读写字串为private
    set snmp trap server-ip gsunion 指定交换机SNMP Trap的接收者为网管服务器,发送Trap时采用gsunion作为字串
    set snmp trap enable all 将全部类型的SNMP Trap发送出去
    set snmp rmon enable 激活交换机的SNMP RMON功能

    syslog配置
    set logging server IP-address-server 将log记录发送到网管服务器的IP (CW2K安装机器的IP地址)上的syslog server
    set logging level 6 将记录事件严重级别定义为从informational开始,一直到最紧急级别的事件全部记录到前边指定的syslog server
    set logging server facility local7 将记录事件类型定义为local7
    set logging timestamp 发送记录事件的时候包含时间标记
    set logging enable 起动log机制
    set password ******
    set enablepass ******
    设置Enable口令和Telnet口令
    show running
    write terminal 显示并检查配置
    保存配置

    PIX设备

    Logging on 在PIX上面启用日志记录
    Snmp-server community gsunion 为PIX设备配置共同体串gsunion
    Snmp-server enable traps 配置PIX设备将SNMP消息发送到网管服务器
    Snmp-server host server-ip 在PIX设备上面配置SNMP网管服务器
    Logging history warning
    为PIX设备SNMP系统日志消息设置warning级别。

    log信息到一台Syslog服务器

    第一步:指定一台主机接收log信息
      logging host [interface] ip_address [tcp[/port] | udp[/port]] [format emblem]
      例子
      logging host dmz1 192.168.1.5
      可以指定多台服务器来接收log信息,这样当一台服务器不在线的时候其它的服务器仍可以接收信息。
    第二步:设置log级别。
      logging trap severity_level (1-7)
    第三步:如果想在信息中包含设备的ID使用如下命令
      logging device-id {hostname | ipaddress if_name | string text}
      包含特定设备的ID(设备的名字,和特定接口的IP或者一个字串)


    log信息发送到SNMP管理机

    第一步:设置SNMP管理机的IP地址
      snmp-server host [if_name] ip_addr
    第二步:设备其它SNMP服务器的设置,也是必需的
      snmp-server location text
      snmp-server contact text
      snmp-server community key

    通过下面的设置来配置发送log信息到SNMP服务器上。
    第一步
      snmp-server enable traps
    第二步:设置log级别:
      logging history severity_level (1-7)
    第三步:关闭syslog捕获用下面的命令:
      no snmp-server enable traps

    Cisco PIX Syslog 配置说明
    一:启动log服务
    第一步:启动log            
       logging on
      注:By de fault, the logging level is set to 3 (error).
      默认log的级别为3(error)

    第二步:设置log级别     
    logging trap severity_level (1-7)
    第三步:检查log设置     
    show logging

    二:测试log输出
      通过下面几个步骤测试log信息输出:
     第一步:log信息发送到console口。
      logging console 7
      quit
      这个测试会产生下面的syslog信息
      111005: nobody End configuration: OK
      这个信息显示已经退出configureation mode.”111005”是该信息标识号。“nobody”指出你是通过console口登录PIX的。
     第二步:停止输送log信息到console
      no logging console 7
      quit
    三、发送syslog信息到缓存
     第一步:保存显示的信息
      logging buffered severity_level (1-7)
     第二步:查看console口上的信息
      show logging
    第三步:清除缓存中的信息以便接收查看新的信息
      clear logging
     第四步:停止发送log信息到缓存
      no logging buffered
      新的信息到列表的尾部。
    四、把log信息发送到一个telnet会话
     第一步:在PIX的内部配置一个host允许telnet到PIX
      a. 输入下面的命令:
      telnet ip_address [subnet_mask] [if_name]
      For example, if a host has the IP address 192.168.1.2, the command is:
      telnet 192.168.1.2 255.255.255.255
      b.设置一个telnet会话的空闲时间,默认为5分钟,建议值15分钟。
      telnet timeout 15
     第二步:启动一个telnet会话
     第三步:进行configuration模式
      enable
      (Enter your password at the prompt)
      configure terminal
     第四步:开始log设置
      logging monitor severity_level (1-7)
     第五步:发送log信息到该tetlnet会话
      terminal monitor
      该命令功能只发送log信息到当前telnet会话。“Logging monitor”设置所有的telnet会话参数,执行该命令后,log信息发送到每一个单独的telnet会话。
     第六步:使用像ping,web访问等应用触发产生syslog信息发送到telnet 会话窗口。
     第八步:
      terminal no monitor
      no logging monitor

     

  • 【转】snmpwalk命令常用方法

    2010-04-26 16:37:47

    在日常监控中,经常会用到snmp服务,而snmpwalk命令则是测试系统各种信息最有效的方法,命令格式:

    snmpwalk  -c SNMP读密码 -v 1或2(代表SNMP版本) 交换机或路由器IP地址 OID(对象标示符)

    现总结一些常用的方法如下:

    1、snmpwalk -v 2c -c public 10.103.33.1 .1.3.6.1.2.1.25.1    得到取得windows端的系统进程用户数等

    其中-v是指版本,-c 是指密钥,也就是客户端snmp.conf里面所设置的,下面类同.

    2、snmpwalk -v 2c -c public 10.103.33.1 .1.3.6.1.2.1.25.2.2  取得系统总内存

    3、snmpwalk -v 2c -c public 10.103.33.1 hrSystemNumUsers  取得系统用户数

    4、snmpwalk -v 2c -c public 10.103.33.1 .1.3.6.1.2.1.4.20    取得IP信息

    5、snmpwalk -v 2c -c public 10.103.33.1 system   查看系统信息

    6、snmpwalk -v 2c -c public 10.103.33.1 ifDescr 获取网卡信息

    以上只是一些常用的信息,snmpwalk功能很多,可以获取系统各种信息,只要更改后面的信息类型即可.如果不知道什么类型,也可以不指定,这样所有系统信息都获取到:

    snmpwalk -v 2c -c public 10.103.33.1

  • 【总结】IP地址、子网掩码、网关、DNS(二)

    2010-04-23 17:23:12

  • 【总结】IP地址、子网掩码、网关、DNS(一)

    2010-04-23 17:21:23

  • 【转】IP地址、子网掩码、网关、DNS的关系

    2010-04-23 17:10:26

  • 【转】网络管理员必备的网管工具

    2010-04-22 10:56:30

  • 【转】bit与byte的区别(总结分享)

    2010-04-22 10:42:30

  • 【转】SNMP介绍,OID及MIB库

    2010-04-20 14:24:16

    1.1. SNMP概览
    SNMP的基本知识介绍
    简单网络管理协议(SNMP-Simple Network Management Protocol)是一个与网络设备交互的简单方法。该规范是由IETF在1990年五月发布的RFC 1157中定义的。SNMP通常被认为相当难懂,并且过于复杂,其可用的API似乎在本来非常简单的东西外面封装了大量的东西。现在关于SNMP的书籍又往往只是把它更加复杂化了,而没有解释清楚。
    SNMP对于任何程序设计人员来说是特别易于理解的。总体的简化能够很好地把这个系统简化。一个网络设备以守护进程的方式运行SNMP代理,该守护进程能够响应来自网络的各种请求信息。该SNMP代理提供大量的对象标识符(OID-Object Identifiers)。一个OID是一个唯一的键值对。该代理存放这些值并让它们可用。一个SNMP管理器(客户)可以向代理查询键值对中的特定信息。从程序员的角度看,这和导入大量的全局变量没有多少区别。SNMP的OID是可读或可写的。尽管向一个SNMP设备写入信息的情况非常少,但它是各种管理应用程序用来控制设备的方法(例如针对交换机的可管理GUI)。SNMP中有一个基本的认证框架,能够让管理员发送公共名来对OID读取或写入的认证。绝大多数的设备使用不安全的公共名 "public" 。 SNMP协议通过UDP端口161和162进行通信的。
    注意,我还没有提到MIB!MIB的重要性被大大地夸大了。刚开始时,MIB显得非常复杂,但是它们其实非常简单。OID是数字的和全局的键值对。一个OID看起来和一个IPv6的地址很象,并且不同的厂商有不同的前缀等信息。OID都非常长,使得人们难以记住,或者对他非常感冒。因此,人们就设计了一种将数字OID翻译为人们可读的格式。这种翻译映射被保存在一个被称为 “管理信息基础"(Management Infomation Base) 或MIB的、可传递的无格式文本文件里。使用SNMP或者向SNMP设备查询,你不需要使用MIB,但是,如果没有MIB,你就得猜测你正在查看的数据是什么。某些情况下,不使用MIB也非常简单,例如查看主机名、磁盘使用率数字,或者端口状态信息。其他情况下,就非常困难了,这个时候使用MIB就非常有帮助。对于准备编写的应用程序来说,为了让用户避免妥当安装MIB带来的麻烦,而严格使用数字OID是并不是很少见的。安装一个MIB的动作,只是将他放置到你的SNMP客户端应用软件能够搜索到并进行上述翻译映射工作的某个位置而已。
    SNMP可以按照两种方式来使用:轮询和陷阱。轮询就是说你编写一个应用程序能够设置一个发送给一个SNMP代理查看某些值的SNMP GET请求。这种方法非常有用,因为如果该设备响应了请求,你就得到了你需要的信息,如果该设备没有响应请求,你就能够知道存在某些问题。轮询是网络监控的一种主动形式。另一方面,SNMP陷阱能够被用来进行被动形式的网络监控。SNMP陷阱是通过配置SNMP设备的代理,让他在某些动作发生时联系另一个SNMP代理来实现的
    备,可以配置为在某些事件发生时发送SNMP陷阱。例如,你可以配置Cisco的IOS在某个独立事件(例如链路断开)发生时,或者在任何定义的陷阱事件发生时,发送SNMP陷阱。(IOS:snmp服务器开启了链路断开的snmp陷阱)。当陷阱事件发生时,设备中的snmp代理会发送该陷阱到一个预先配置好的通常成为陷阱主机的目标上。陷阱主机会运行有自己的SNMP代理,该代理能够接受并处理传入的陷阱。这些陷阱的处理由陷阱处理器来完成。陷阱处理器可以用任何语言编写,并且可以通过STDIN(标准输入)传入的来自发送陷阱的信息。该处理器之后可以根据陷阱进行任何想作的事情,例如发送邮件或者你想要的任何事情。
    SNMP被广泛应用在NMS网络管理系统中(Network Management System)。知名的NMS包括BMC的Patrol、CA的Unicenter、Sun Mangegement控制台、IBM的Tivoli Netview、以及全球著名的HP Openview。NMS的目标是提供一个监控和管理所有开启SNMP功能的设备的单一入口。通过配置你的设备代理来接受写访问,你可以从一个应用程序中处理你的网络环境。如果你的整个环境围拢NMS解决方案架构你的环境,你就能无限制地控制、查看你的整个网络。尽管Net-SNMP提供了可用来构建你自己的NMS网管系统的所有工具,我们不会再进一步讨论关于NMS的话题。不过请记住,如果你认为你的SNMP设备厂商没有提供SNMP代理方面的详细信息,很可能是因为他们希望你购买他们的NMS网络管理系统,或者购买能够在另一个NMS平台上使用的插件。
    1.2. SNMP的三大版本
    SNMP的常用版本有三个:SNMPv1、SNMPv2、SNMPv3
    Three different version of SNMP exist: SNMPv1 (RFC’s 1155, 1157, and 1212), SNMPv2c (RFC’s 1901 through 1908), and SNMPv3 (RFC’s 3411 though 3418). The co-existence of all three versions are detailed in RFC 3584.SNMP有三个不同的版本:SNMPv1(RFC 1155、RFC 1157、RFC 1212),SNMPv2c (RFC 1901、1908)以及 SNMPv3 (RFC 3411 - 3418). RFC 3584中详细说明了这三种版本同时共存方面的信息。
    SNMPv1 is the original standard for community based management. SNMPv2 was derived from the SNMPv1 framework but had no message definition, which was later revamped aa SNMPv2c, a community based version of SNMPv2 with a message format similar to SNMPv1. SNMPv2 added several new datatypes (Counter32, Counter64, Gauge32, UInteger32, NsapAdress, and BIT STRING), as well as enhancements to OID tables and the setting of OID values. SNMPv3 is an extensable SNMPv2 framework with a new message format, ACL and security abilities, and remote configuration of SNMP parameters.
    SNMPv1是为基于公共管理的初始标准。SNMPv2是SNMPv1框架下衍生出来的,但是没有定义信息,其后修订为SNMPv2c,一个带有于SNMPv1类似信息格式的给予公共管理的版本。SNMPv2添加了几个新的数据类型(Counter32、Counter64、Gauge32、UInteger32、NsapAdress 以及BIT STRING),以及对OID表和OID值的设置的增强。SNMPv3是一个带有新的信息格式、ACL、安全功能和远处SNMP参数配置的、扩展了SNMPv2框架的版本。
    SNMP is based on several other standards including the Abstract Syntax Notation 1 Basic Encoding Rules (ASN.1 BER) which defines the SNMP used Datatypes and the Structure of Management Information (SMI) which details the grammar used by SNMP MIBs. SMI comes in two varieties: SMIv1 (RFC 1155) and SMIv2 (RFC 2578). SMIv1 is now obsolete and should not be used. If you choose to modify MIBs at some point you’ll need to learn SMIv2 and ASN.1 syntax, but otherwise they are interesting but unnecessary to learn.
    SNMP是基于几个其他规范的,包括定义给予SNMP的数据类型的ASN.1 BER(Abstract Syntax Notation 1 Basic Encoding Rules), 以及详细描述有SNMP MIB使用的语法的管理信息结构(SMI)。SMIv1目前被独立出来,不应当再被使用。如果你选择修改MIB的某些东西,你需要学习SMIv2和ASN.1语法,不过其他情况下你只需要在兴趣时看看他,而不必学习他。
    To this day, SNMPv1 and SNMPv2c are the most commonly used, however due to the insecurity inherent to these protocols read-only access is typical. In general, don’t bother with SNMPv3 unless you really need the added security features.
    现在,SNMPv1和SNMPv2被广泛应用,但是由于这些协议的不安全特性,通常只使用只读访问。通常,除非你确实需要附加安全特性,否则你不需要过多地关注SNMPv3。SNMPv3是具有安全性的通信协议。
    1.3. 本文不涉及的话题
    本文中不会涉及如何编写代理、MIB模块等方面的话题。
    There are several subject we will not be discussing in this paper. These topics include writing agents or sub-agents, writing MIB modules, trap generation and trap sending, synchronous vs asynchronous SNMP coding, and MIB parsing.
    本文中,有几个主题我们不会讨论。这些主题包括编写代理或子代理,编写MIB模块、陷阱生成以及陷阱发送、同步和一步SNMP代码编写,以及MIB解释器。
    Something that scares new or inexperienced coders away from the Net-SNMP documentation is the seemingly constant reference to synchronous and asynchronous applications. Don’t be afraid, thats referring to applications that can’t afford to sit and wait for a response. If your application needs a non-blocking method of handling SNMP traffic, use the asynchronous interface (eg: GUIs, Threads, Forking, etc). Otherwise, just stick with the synchronous interfaces for typical use.
    Net-SNMP中关于同步和异步应用程序的文档,常常会把没有经验的编码新手给吓唬住。别担心,那只是指无法坐等响应的应用程序。如果你的应用程序需要以非阻塞方式处理SNMP数据流,就使用一步接口(例如GUI、线程、forking等)。否则,只需要使用同步接口就可以了。
    Lastly, this document addresses the use of Net-SNMP on UNIX systems only. Please refer to the Net-SNMP website for information regarding development on Win32.
    本文中的后面会针对Unix系统中使用的问题,请参考Net-SNMP网站了解关于在Win32中开发的信息。

    2. MIB和OID
    OID(对象标识符),是SNMP代理提供的具有唯一标识的键值。MIB(管理信息基)提供数字化OID到可读文本的映射。
    2.1. OID
    OID的编写规则和习惯
    SNMP OIDs are laid out in a hierarchy forming unique addresses into a tree similar to the DNS hierarchy. Like many other forms of addressing, OIDs can be used in 2 forms: fully qualified and relative (sometimes called ”relevant”).
    SNMP OID是用一种按照层次化格式组织的、树状结构中的唯一地址来表示的,它与DNS层次相似。与其他格式的寻址方式类型,OID以两种格式加以应用:全名和先对名(有时称为“相关”)
    The fully qualified form. starts from the root and moves outward to the individual value on a device. An example of a fully qualified address is:
    完全验证格式从root根开始,并且向外移到某个设备的独立的质上。例如一个完整验证的地址为:
    This OID could be rewritten in human readable form. as:
    该OID可用人们可读的方式重写为:
    All fully qualified OIDs will begin with .iso.org.dod.internet.private represented numerically as .1.3.6.1.4. Almost all OIDs will then be followed by enterprises (.1) and a unique number for the vendor as assigned by the Internet Assigned Numbers Authority (IANA). In the example OID 789 represents the vendor ID for the Network Appliance Corporation (NetApp). Everything beyond the vendor ID is based on the vendors implementation and may vary between implementations. Please note the prefixing dot before iso. Similar to the trailing dot in DNS, properly qualified IODs begin with a dot representing the root.
    所有完全验证OID都有 .iso.org.dod.internet.private 开始,数字表达为: .1.3.6.1.4. 。几乎所有的OID都会跟上企业(.1)和由IANA(互联网编号分配中心分配的)唯一的厂商标号。例如OID 789表示Network Appliance格式的厂商编号( NetApp )。厂商编号后面的是基于厂商实现的功能,并且各不相同。请注意,在iso.前面的 . ` ,与DNS中的后点相似,正确验证的OID是有一个表示根的前缀 `. 开始的。
    The complete list of enterprise assignments can be found at the IANA website: http://www.iana.org/assignments/enterprise-numbers
    IANA网站上找到企业分配完整的清单 : http://www.iana.org/assignmenets/enterprise-numbers
    The relative form. of an OID, on the other hand, begins from the enterprises value and leaves all the implied addressing off. So we can use the relative form. of the above OID as enterprises.netapp.netapp1.raid.diskSummary.diskSpareCount.0 or numerically as .1.789.1.6.4.8.0 .
    OID的相对格式,从企业值开始,略过所有的隐含地址。因此,我们可以用相对地址 enterprises.netapp.netappl.raid.diskSUmmary.diskSpaceCount.0 来表示上述的OID,或者用数字格式 .1.789.6.4.8.0 .
    A common form. of writing OIDs is by the name of the MIB and a unique key defined within the MIB. For instance, we could rewrite the above OID into the condensed form. NETWORK-APPLIANCE-MIB::diskSpareCount.0 . This condensed form. follows the convention of MIB Name::Unique Key.instance. Some keys, while unique, can be represented by multiple instances of that key, and thus all OIDs end with an instance value. This is why you’ll notice that most OIDs end with a .0 .
    写OID的常用格式是用MIB名称和在MIB中定义的唯一键值。例如,我们可以用简写的格式重写上述OID:
    NETWORK-APPLIANCE-MIB::diskSpareCount.0
    MIB中OID的书写格式规则为::MIB Name::唯一键值.instance.
    某些唯一键值,可用多个实例表示,这样所有的OID都以实例值结尾。这就是为什么你得注意到大多数OID都是以一个 .0 结尾的。

    2.2. MIB
    MIB介绍
    The structure of a MIBs internals are a little strange and foreign at first, but it’s structured well enough that you can poke through it pretty intelligently without really knowing what your doing. The structure of a MIB comes from the Structure of Management Information (SMI) standard detailed in IETF RFC 1155 and 2578. If you choose to modify or write your own MIBs you’ll benefit from understanding SMI before hacking much on MIBs.
    MIB的内部结构刚开始时会让人感觉有些奇怪和不好理解,不过它的结构非常好,你可以在不懂的情况下一个一个看进去。MIB的结构来源于IETF RFC1155和2578定义的管理信息结构。如果你想要修改或编写自己的MIB,在动手前理解SMI非常有帮助。
    Lets look at the header of a MIB to get a better idea of how they work:
    为了更好地理解他们是怎样工作的,我们先来看看MIB的头:
    -- PowerNet-MIB {iso org(3) dod(6) internet(1) private(4)
    -- enterprises(1) apc(318) }

    PowerNet-MIB DEFINITIONS ::= BEGIN

    IMPORTS
    enterprises, IpAddress, Gauge, TimeTicks FROM RFC1155-SMI
    DisplayString FROM RFC1213-MIB
    OBJECT-TYPE FROM RFC-1212
    TRAP-TYPE FROM RFC-1215;

    apc OBJECT IDENTIFIER ::= { enterprises 318 }
    products OBJECT IDENTIFIER ::= { apc 1 }
    apcmgmt OBJECT IDENTIFIER ::= { apc 2 }

    Comments can be inserted into a MIB by prepending them with two dashes. In the header the declaration BEGIN starts off the MIB. Imports can be used to pull information from other MIBs, typically those mandated by the MIB-II standard.
    可以用行开头为 -- 的方法在MIB中加入注释
    头部用 BEGIN`声明来开始MIB的定义
    `Imports 可用来从其他MIB中提取信息,通常用它来提取MIB-II规范要求的内容
    The MIB lays out the structure of OID addresses starting from the enterprises value. Here the enterprise value 318 maps to ”apc” (relative address .1.318). Typically then several categories are defined. Here we see 2 categories: products (.1.318.1) and apcmgmt (.1.318.2). Notice that in the curly braces two values are specified, its parent address followed by its address. So the products identifier is parented by the apc identifier which is parented by the enterprises identifier, so on and so forth. This type of categorization and subcategorizing will typically continue on in the header of the MIB for awhile segmenting the available keys into tight subgroupings. By segmenting values out in this way it makes the available keys easier to navigate.
    MIB放置从enterprise值开始的OID地址的结构。在此,enterprise值是318, 对应 "apc" (相对地址为 .1.318)。 通常之后会定义几个类别。注意在花括号间定义的两个值,其父地址后面跟一个它自己的地址。因此产品标识符有apc标识符表示,其父为enterprise标识符,以此类推。类别和自类别的类型通常跟在MIB头的后面,并且把有用的键值分割为子组。通过分段,各种值分别被列出,这样可用的值更容易浏览。
    The real meat of the MIB is in the description of object types. Here’s an example of a integer key:
    MIB的真正好处在于对象类型的描述。以下是一个整形键值的例子:
    1. upsBasicOutputStatus OBJECT-TYPE
    2. SYNTAX INTEGER {
    3.    unknown(1),
    4.    onLine(2),
    5.    onBattery(3),
    6.    onSmartBoost(4),
    7.    timedSleeping(5),
    8.    softwareBypass(6),
    9.    off(7),
    10.    rebooting(8),
    11.    switchedBypass(9),
    12.    hardwareFailureBypass(10),
    13.    sleepingUntilPowerReturn(11),
    14.    onSmartTrim(12)
    15. }
    16. ACCESS read-only
    17. STATUS mandatory
    18. DESCRIPTION
    19.    "The current state of the UPS. If the UPS is unable
    20.     to determine the state of the UPS this variable is set
    21.     to unknown(1)."
    22. ::= { upsBasicOutput 1 }
    复制代码
    Here is defined the upsBasicOutputStatus key with a return type of INTEGER. The returned integer maps to one of 12 different return values as listed. Notice that in the MIB a description of the key is provided. These descriptions can be extremely useful in determining which objects can best provide the data you want, especially if you don’t have MIB documentation supplied by the vendor.
    在此定义了一个具有整型返回值的upsBasicOutputStatus键值。返回的整型对应到列出的12个不同的数值中的一个。注意在MIB中,提供了该键值的描述。在确定那个对象能够提供最好地你需要的数据时,特别有帮助,特别是当厂商没有提供MIB文档的情况下。
    Notice also that the last line of the object type description includes the numeric value 1 with upsBasicOutput as the parent. If we follow this parenting backwards in the MIB we’d find that upsBasicOutput has the value 1 and is parented by upsOutput which has the value 4 and is parented by ups which has a value of 1, which is parented by hardware which has a value of 1, which is parented by products with a value of 1 which is parented by apc with a value of 318, which is parented by enterprises with a value of 1. So, if we put all that mapping together we get a relative address for the key upsBasicOutputStatus of .1.318.1.1.1.4.1.1.0. Remember that the trailing .0 represents the first instance of the key. Applications called MIB Browsers can easily parse a MIB and make navigation much quicker than flipping through the file in vim, but don’t be fooled into thinking it’s difficult without such a tool.
    注意对象类型描述的最后一行包括有数值1,其父为数字为1的upsBasicOutput。如果我们按照这个父节点返推,我们会发现upsBasicOutput的值为1,并且其父节点是值为4的upsOutput, upsOutput的父节点是值为1的ups,upsOutput的父节点是值为1的hardware, hardware的父节点是值为1的products,products的父节点是值为318的apc,apc的父节点的是值为1的enterprise。因此,如果我们我们把所有的对应关系合起来,我们就得到 .1.319.1.1.1.4.1.1.0的upsBasicOutputStatus键值的相对地址。记住末尾的.0表示该键值的第一个实例。MIB浏览器这样的应用程序可以简化MIB解析,它能够比通过vim浏览文件的方式更加快捷地浏览,不过不要以为没有这样的工具就非常困难了。
    So, whats really important to notice here is that the MIB is really just providing us with a road map of the OIDs available on the agent we wish to get values from. A MIB describes both where to find a value and what it returns. We can still interface with a device without the MIB, it’s just much easier when you get a return of ”Up” instead of ”1”. By leveraging the options of the Net- SNMP CLI tools you can decide just how you wish to return output which will be different if your just using the tool from the command line (where ”Up” is preferable) or if your calling the tool from a script. (where ”1” is preferable).
    因此,在这里真正需要注意的是,MIB其实只是提供给我们一张我们想从某个SNMP代理中获得的可用OID的各种值的地图。一个MIB描述了在哪里找某个值、以及返回结果是什么。我们可以不用MIB与设备进行交互,只不过在理获得'Up'的返回值,要比‘1’的返回值要简单的多。通过利用Net-SNMP命令行工具,你可以决定你希望返回结果的输出样式(这种方式下使用“Up"这样的格式更好),或者你用脚本调用工具时(这种方式下使用”1“的格式就更好)。

    2.3. OID数据类型
    SMI定义的OID返回值的数据类型。
    SMI defines a fixed number of datatypes which are returned by OIDs. These datatypes include:
    SMI定义了一定数量的OID返回的数据类型。这些数据类型包括:
    Integer 整型
    Signed 32bit Integer (values between -2147483648 and 2147483647). 有符号32位整数(值范围: -2147483648 - +2147483648)
    Integer32
    Same as Integer. 与Integer相同。
    UInteger32
    Unsigned 32bit Integer (values between 0 and 4294967295). 无符号32位整数(值范围:0-4294967295).
    Octet String
    Arbitrary binary or textual data, typically limited to 255 characters in length. 任意二进制或文本数据,通常长度限制在255个字符内。
    Object Identifier
    An OID. 一个OID。
    Bit String
    Represents an enumeration of named bits. This is an unsigned datatype. 表示取名的位的枚举。这是一个无符号的数据类型。
    IpAddress
    An IP address. 一个IP地址。
    Counter32
    Represents a non-negative integer which monotonically increases until it reaches a maximum value of 32bits-1 (4294967295 dec), when it wraps around and starts increasing again from zero. 表示一个非负的整数(可递增到32位最大值-1),然后恢复并从0开始递增。
    Counter64
    Same as Counter32 but has a maximum value of 64bits-1. 与Counter32相同,最大值为64位的最大值-1。
    Gauge32
    Represents an unsigned integer, which may increase or decrease, but shall never exceed a maximum value. 表示无符号整数,可增加或减少,但是不超过最大值。
    TimeTicks
    Represents an unsigned integer which represents the time, modulo 2ˆ32 (4294967296 dec), in hundredths of a second between two epochs. 表示代表数据的一个无符号整数,2^32取模(4294967296),两个值之间为百分之一秒。
    Opaque
    Provided solely for backward-compatibility, its no longer used. 提供向下兼容,不再使用的数据类型
    NsapAddress
    Represents an OSI address as a variable-length OCTET STRING. 表示一个用变长八进制字符窗表示的OSI地址。

    Net-SNMP tools will report the datatype when returning an OID unless you otherwise disregard it. As an example of that you’ll see:
    Net-SNMP工具在返回一个OID时会包括其数据类型,除非你不想要他。以下是一个例子:
    SNMPv2-MIB::sysContact.0 = STRING: Ben Rockwood
    IF-MIB::ifPhysAddress.1 = STRING: 0:c0:b7:63:ca:4c
    SNMPv2-MIB::sysUpTime.0 = Timeticks: (47372422) 5 days, 11:35:24.22
    IF-MIB::ifAdminStatus.1 = INTEGER: up(1)
    SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.318.1.3.7
    RFC1213-MIB::atPhysAddress.1.1.10.10.1.1 = Hex-STRING: 00 50 73 28 47 A0
    RFC1213-MIB::atNetAddress.1.1.10.10.1.1 = Network Address: 0A:0A:01:01
    IF-MIB::ifSpeed.1 = Gauge32: 10000000
    SNMPv2-MIB::snmpInPkts.0 = Counter32: 316
    SNMPv2-MIB::snmpOutPkts.0 = Counter32: 314

    This is a fairly typical spread of datatypes returned by Net-SNMP tools. Notice that some values are being automatically interpreted by Net-SNMP, such as the sysUpTime and ifAdminStatus. The MIB was used when these values were returned and Net-SNMP was nice enough to find the return value in the MIB and give us the textual representation of the value.
    这是一个相当典型的由Net-SNMP工具返回的数据类型表单。注意有些值已经由Net-SNMP自动解释了,比如sysUpTime和ifAdminStatus。这些值返回时使用到MIB,Net-SNMP会在MIBzhong找到返回值,并且为我们提供该值的文本表示。

    2.4. MIB II
    MIB II
    IETF RFC 1213 ”defines the second version of the Management Information Base (MIB-II) for use with network management protocols in TCP/IP-based internets.” All SNMP agent and tool distributions should include MIBs that will comply with MIB-II and all devices should at the very least return values that comply with the MIB-II standard.
    Within the MIB-II standard several OID groups are defined, including:
    The System Group
    Basic system identification and information OIDs such as sysDescr, sysContact, sysName, SysLocation, etc. (Reported by Net-SNMP in SNMPv2-MIB)
    The Interfaces Group
    Network Interface information such as ifDescr, ifType,ifSpeed, ifAdminStatus, etc. (Reported by Net-SNMP in IF-MIB)
    The Address Translation Group
    Address Translation (AT) information mapping Physical to Logical addressing such as atNetAddress, atPhysAddress,etc. (Reported by Net-SNMP in RFC1213-MIB)
    The IP Group
    IP stats and settings such as ipInReceives, ipForwarding, ip-InAddrErrors, etc. (Reported by Net-SNMP in IP-MIB)
    The ICMP Group
    ICMP stats and settings such as icmpInMsgs, icmpIn-Errors, icmpInRedirects, etc. (Reported by Net-SNMP in IP-MIB)
    The TCP Group
    TCP stats and settings such as tcpActiveOpens, tcpPassiveOpens,tcpInErrs, etc. (Reported by Net-SNMP in TCP-MIB)
    The UDP Group
    UDP stats and settings such as udpInDatagrams, udpIn-Errors, etc. (Reported by Net-SNMP in UDP-MIB)
    The EGP Group
    EGP stats and settings (if the device support EGP) such as egpNeighAs, egpNeighMode, etc (Reported by Net-SNMP in RFC1213-MIB)
    The Transmission Group
    Device specific media transmition stats and settings(Reported by Net-SNMP in RFC1213-MIB or your vendor MIB)
    The SNMP Group
    SNMP stats and settings such as snmpInPkts, snmp-InASNParseErrs, snmpInTraps, etc. (Reported by Net-SNMP in SNMPv2-MIB)
    If you do a default walk of an SNMP device the MIB-II data should be returned. All data with the exception of the EGP and Transmission groups are requirements of the standard. For most networking devices such as routers this information is usually sufficient to provide most of the information you could want.
    2.5. 为Net-SNMP添加MIB
    如何为Net-SNMP添加MIB信息
    Additional MIBs can be added to your Net-SNMP installation by simply copying them into the $(PREFIX)/share/snmp/mibs directory. MIBs should be (re)named to follow the convention (MIB NAME).txt for clarity. You can find the MIBs proper name on the first uncommented line of the MIB (eg: Name- MIB DEFINITIONS ::= BEGIN).
    For example, if you downloaded MIB for the JetDirect Management Card found on HP LaserJet printers it might have been named something like ”hpjetdirect. mib”. The header of the MIB looks like the following:
    -- (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1997.
    -- LaserJet 5Si Printer Model Specific MIB.
    --
    LaserJet5Si-MIB DEFINITIONS ::= BEGIN

    This MIB should be renamed to ”LaserJet5Si-MIB.txt” and copied into the Net-SNMP mibs/ directory.
    By following this convention it assures greater clarity when utilizing the various MIBs and a consistency with all other installed MIBs.
    MIBs can be specified by a command line tool using the -m argument or the MIBS environmental variable for libsnmp applications including the PERL module. MIBs can be referenced locally by supplying a proper path (ie: - m ”./MY MIB.txt”) or globally by supplying the MIB name without the .txt suffix (ie: -m ”MY MIB”) if it’s located in the Net-SNMP MIBs directory.
  • 【转】高手眼中的网络

    2010-03-24 16:44:02

    转自:http://www.51testing.com/index.php?uid-124415-action-viewspace-itemid-131362

    这段文章是我导师在入职伊始发给我的,指引着我快乐的去做技术。

    假设你的名字叫小不点,你住在一个大院子里,你的邻居有很多小伙伴,在门口传达室还有个看大门的李大爷,李大爷就是你的网关。当你想跟院子里的某个小伙伴玩,只要你在院子里大喊一声他的名字,他听到了就会回应你,并且跑出来跟你玩。
    但 是你不被允许走出大门,你想与外界发生的一切联系,都必须由门口的李大爷(网关)用电话帮助你联系。假如你想找你的同学小明聊天,小明家住在很远的另外一 个院子里,他家的院子里也有一个看门的王大爷(小明的网关)。但是你不知道小明家的电话号码,不过你的班主任老师有一份你们班全体同学的名单和电话号码对 照表,你的老师就是你的DNS服务器。于是你在家里拨通了门口李大爷的电话,有了下面的对话:
    小不点:李大爷,我想找班主任查一下小明的电话号码行吗?
    李大爷:好,你等着。(接着李大爷给你的班主任挂了一个电话,问清楚了小明的电话)问到了,他家的号码是211.99.99.99
    小不点:太好了!李大爷,我想找小明,你再帮我联系一下小明吧。
    李大爷:没问题。(接着李大爷向电话局发出了请求接通小明家电话的请求,最后一关当然是被转接到了小明家那个院子的王大爷那里,然后王大爷把电话给转到小明家)就这样你和小明取得了联系。
    至于DHCP服务器嘛,可以这样比喻:
    你家院子里的居民越来越多了,传达室李大爷那里的电话交换机已经不能满足这么多居民的需求了,所以只好采用了一种新技术叫做DHCP,居民们开机的时候随机得到一个电话号码,每一次得到的号码都可能会不同。
    你家门口的李大爷:就是你的网关
    你的班主任:就是你的DNS服务器
    传达室的电话交换机:就是你的DHCP服务器
    同上,李大爷和王大爷之间的对话就叫做路由。
    另:如果还有个小朋友叫做小暗,他住的院子看门的是孙大爷,因为小暗的院子刚盖好,孙大爷刚来不久,他没有李大爷和王大爷办公室的电话(李大爷和王大爷当然也没有他的电话),这时会有两种情况:
    1、居委会的赵大妈告诉了孙大爷关于李、王两位大爷的电话(同时赵大妈也告诉了李、王关于孙的电话),这就叫静态设定路由
    2、赵大妈病了,孙大爷自己到处打电话,见人就说:“我是小暗他们院子管电话的”,结果被李、王二位听到了,就记在了他们的通讯录上,然后李、王就给孙大爷回了个电话说:“我是小明(小不点)他们院子管电话的”,这就叫动态设定路由

    然 后有一天小不点要找小暗,结果自然是小不点给李大爷打电话说:“大爷,我找小暗”(这里省略了李大爷去查小暗电话的过程,假设他知道小暗的电话),李大爷 一找通讯录:“哦,小暗的院子的电话是孙大爷管着的,要找小暗自然先要通知孙大爷,我可以通知王大爷让他去找孙大爷,也可以自己直接找孙,那当然是自己直 接找孙方便了”,于是李大爷给孙大爷打了电话,然后孙大爷又把电话转到了小暗家。
    这里李大爷的通讯录叫做路由表。
    李大爷选择是自己直接找孙大爷还是让王大爷帮忙转接叫做路由选择。
    李 大爷之所以选择直接找孙大爷是有依据的,因为他直接找孙大爷就能一步到位,如果要王大爷转接就需要两步才能完成,这里的“步”叫做“跳数”,李大爷的选择 遵循的是最少步骤(跳数)原则(如果他不遵守这个原则,小不点可能就会多等些时间才能找到小暗,最终结果可能导致李大爷因工作不力被炒鱿鱼,这叫做“延时 太长,选路原则不合理,换了一个路由器”)
    当然,事情总是变化的,小不点和小明吵架了,这些天小不点老是给小暗打电话,小明心里想:“操,他是不是在说我坏话啊?”于是小明决定偷听小不点和小暗的通话,但是他又不能出院子,怎么办呢?小明做了这样一个决定:
    首 先他告诉自己院里管电话的王大爷说:“你给李大爷打个电话说小暗搬到咱们院子了,以后凡是打给他的电话我来接”,王大爷没反映过来(毕竟年纪大了啊!)就 给李大爷打了电话,说:“现在我来管理小暗的电话了,孙已经不管了”,结果李大爷就把他的通讯录改了,这叫做路由欺骗。
    以后小不点再找小 暗,李大爷就转给王大爷了(其实应该转给孙大爷的),王大爷收到了这个电话就转给了小明(因为他之前已经和小明说好了),小明收到这个电话就假装小暗和小 不点通信。因为小明作贼心虚,害怕明天小不点和小暗见面后当面问他,于是通信断了之后,又自己以小不点的名义给小暗通了个电话复述了一遍刚才的话,有这就 叫数据窃听。
    再后来,小不点还是不断的和小暗联系,而零落了小明,小明心里嘀咕啊:“我不能总是这样以小暗的身份和小不点通话啊,外一有 一天露馅了怎么办!”于是他想了一个更阴险的招数:“干脆我也不偷听你们的电话了,你小不点不是不给我打电话吗!那我让你也给小暗打不了,哼哼!”,他怎 么做的呢?我们来看:
    他联系了一批狐朋狗友,和他们串通好,每天固定一个时间大家一起给小暗院子传达室打电话,内容什么都有,只要传达室 的孙爷爷接电话,就会听到“打雷啦,下雨收衣服啊!”、“人是人他妈生的,妖是妖他妈生的”、“你妈贵姓”等等,听的脑袋都大了,不听又不行,电话不停的 响啊!终于有一天,孙爷爷忍不住了,大喊一声:“我受不了拉!!!!”,于是上吊自杀了!
    这就是最简单的DDOS攻击,孙爷爷心理承受能 力弱的现象叫做“数据报处理模块有BUG”,孙爷爷的自杀叫做“路由器瘫痪”。如果是我,就会微笑着和他们拉家常,例如告诉他们“我早就听了天气预报,衣 服10分钟前已经收好了”或者“那你妈是人还是妖”或者“和你奶奶一个姓”等等,我这种健全的心理叫做“健壮的数据报处理,能够抵御任何攻击”
    孙爷爷瘫了之后,小不点终于不再给小暗打电话了,因为无论他怎么打对方都是忙音,这种现象叫做“拒绝服务”,所以小明的做法还有一个名字叫做“拒绝服务攻击”。
    小明终于安静了几天,
    ...
    几天后,小明的院子来了一个美丽的女孩,名字叫做小丽,小明很喜欢她(小小年纪玩什么早恋!)可是小丽有个很帅的男朋友,小明干瞪眼没办法。当然这里还是要遵循上面的原则:小丽是不能出院子的。那个男的想泡小丽自然只能打电话,于是小明又蠢蠢欲动了:
    还记得王爷爷是院子的电话总管吗?他之所以能管理电话是因为他有一个通讯录,因为同一个院子可能有2个孩子都叫小明,靠名字无法区分,所以通讯录上每一行只有两项:
    门牌 电话
    一号门 1234567 (这个是小明的)
    二号门 7654321 (这个是小丽的)
    ......
    王 爷爷记性不好,但这总不会错了吧(同一个院子不会有2个“二号门”吧)?每次打电话人家都要说出要找的电话号码,然后通过通讯录去院子里面敲门,比如人家 说我找“1234567”,于是王爷爷一比较,哦,是一号门的,他就去敲一号门“听电话”,如果是找“7654321”,那他就找二号门“听电话”。
    这里的电话号码就是传说中的“IP地址”
    这里的门牌号就是传说中的网卡的’MAC‘地址(每一块网卡的MAC地址都是不一样的,这是网卡的制造商写死在网卡的芯片中的)
    小 明心里想“奶奶的,老子泡不到你也别想泡”,于是他打起了王爷爷通讯录的主意,经过细心的观察,周密的准备,他终于发现王爷爷有尿频的毛病(毕竟是老人 啊...),终于在一个月黑风高的白天,王爷爷去上厕所了,小明偷偷的摸进传达室,小心翼翼的改了王爷爷的通讯录
    ......
    过了几天,小丽的男朋友又给小丽打来了电话,对方报的电话是“7654321”,王爷爷一看通讯录,靠:
    门牌 电话
    一号门 1234567 (这个是小明的)
    一号门 7654321 (注意:这个原来是小丽的,但是被小明改了)
    ......
    王爷爷不知道改了啊,于是就去找一号门的小明了,小明心里这个美啊,他以小丽父亲的口吻严厉的教训了那个男的和小丽之间不正当的男女关系,结果那个男的恭恭敬敬的挂了电话。当然小丽并不知道整个事情的发生...
    这里小明的行为叫做“ARP欺骗”(因为在实际的网络上是通过发送ARP数据包来实现的,所以叫做“ARP欺骗”),王爷爷的通讯录叫做“ARP表”
    这里要注意:王爷爷现在有两个通讯录了,一个是记录每个院子传达室电话的本本,叫做“路由表”,一个是现在说的记录院子里面详细信息的本本,叫做“ARP表”。
    有句命言是“人们总是在追求完美的,尽管永远也做不到”(请记住这句话,因为这是一个大名人--也就是我,说的)
    王 爷爷的制度中有一条是这么写的“每个月要重新检查一下门牌号和电话的对应本(也就是ARP表)”,这个动作叫做“刷新ARP表”,每个月的时间限制叫做 “刷新ARP表的周期”。这样小明为了让那个男的永远不能找到小丽,之后每个月都要偷偷改一次那个通讯录,不过这样也是不得不做的事啊!
    补充一点,小明是很聪明的,如果通讯录(ARP表)被改成了这样:
    门牌(MAC) 电话(IP)
    一号门 1234567 (这个是小明的)
    二号门 1234567 (注意:这个被小明改了,但是他一时头晕改错了)
    ......
    就会是计算机就会弹出一个对话框提示“出现重复的IP地址”,最终会导致王爷爷不知所措,于是通知一号门和二号门,你们的电话重复了。这样小丽就知道有人在破坏她的好事,这个现象叫做“骗局被揭穿了”
    小不点知道了小明偷听他和小暗的电话,于是就和小暗约定好了密码。小不点在家里把要说的加密了之后告诉小暗。土豆-〉星期三,地瓜-〉请客,笨蛋-〉小不点家。于是小不点告诉小暗:土豆笨蛋地瓜。小明听了???不懂。。。。郁闷了。。。这是加密。
    除 此之外,小丽也知道了小明改他家的电话号码了。于是王爷爷就登门一个一个把电话和门牌号记下来。并且藏起来不允许外人修改,只能自己有钥匙(密码)。这是 ip地址和MAC地址绑定。当有人改了电话号码的时候,就得找王爷爷改。麻烦是麻烦了,但是安全了。不过小明偷偷的把王爷爷的钥匙偷配了一把(盗窃密码成 功),于是他还可以修改。这样么,就这样了。



  • 【转】 白话TCP/IP协议

    2010-03-04 17:29:02


    这篇文章受到网上下载的一个PPT文档启发

    使用网络之前

    我有工资报表需要打印,可是我没有打印机!
    发挥土法炼钢的精神,通过U盘拷贝到另一计算机上!

    计算机网络的历史

    50年代:计算机网络初步形成,目的就是共享资源;
    60年代:美国国防部发明了ARPANET,TCP/IP协议出现;
    70年代中期:局域网发展迅速,中小企业也可以组建自己的网络;
    90年代:Internet飞速发展的时代,才有我们今天的网络

    什么是网络

    计算机网络是连接在一起的计算机的集合
    手段:通过通信设备和通信线路连接起来,并使用网络软件和协议进行管理
    目的:以实现资源共享为目的

    通信设备:集线器、交换机、路由器、ADSL Modem,包括程控交换机等
    通信线路:双绞线、电话线、光纤、无线电波等

    TCP/IP协议

    通信协议的一个比喻

    要完成的任务--通信:深圳的老总A要告诉北京的老总B:货已发出。
    A用中文写好信;把信交给秘书;秘书把信投进邮筒;邮局根据收信人地址选择好信件的传递路线;把信件打包后交给火车站;火车站负责把信件运输到北京;
    北京的火车站收到信件后,以后的步骤是什么?B怎么收到信息?

    分析上述例子(1)
    目的:通信
    是怎么完成的通信?
        每个人遵守一定的规则
        A按一定的格式写好信
        秘书在信封上填好地址
        邮局根据邮件的处理方法发送邮件
        铁路有自己的运作方式
    以上每个人协同工作,相互依赖,完成同一件事:通信

    分析上述例子(2)
        明确分工
        秘书只需要知道把信投到邮筒就行了
        邮递员不需要会开火车

    计算机通信协议(Protocol)
    目的:完成计算机通信(communicate)
    什么是协议:为了计算机能通信而制定的一组规则
    规则规定了不同设备应该如何协同工作以保证把数据传输到对方

    OSI模型
    描述了通信过程中不同设备的功能
    实际上也规定了不同设备之间如何协同
    由ISO(国际标准化组织)提出
    确定网络设备的标准

    分层
    分层通常是解决复杂问题的好方法
    分层意味着分工
    分层的3大优点:
        各层之间独立,一层变化不影响其他层
        易于实现和维护
        有利标准化:不同厂家的设备可以共存

     

    确定使用什么方式与对方联系电子邮件(pop3)还是普通信件 

    —— [ 应用层(Application) ] :为用户应用程序与网络间的接口

    信用中文还是英文写? 

    —— [ 表示层(Presentation) ] :对数据进行编码,数据压缩,数据的加密

    双方通信之前进行制定规则,何时开始、终止? 

    —— [ 会话层(Session) ] :允许用户在设备之间建立、维持和终止会话

    秘书发现对方没收到信,是否再发一封?

     —— [ 传输层(Transport)] :提供可靠(或者不可靠)的端到端服务。流量控制。

    信从什么线路送到北京? 

    —— [ 网络层(Network)] :定址:如何表示不同的计算机?例如:IP地址。选择最佳

    路径将信息从最合适的路径传送到接收端。   

    邮局会在信上盖上邮戳 

    —— [ 数据链路层(Data Link)] :帧的封装:将传输数据增加同步信息、校验信息及地址信息后封装成数据帧。  

    信是用火车拉还是汽车拉? 

    —— [ 物理层(Physical)] :负责0和1的传送,使用什么传输介质,0和1在线路上如何表示,线的接头是什么样的。

     转自:http://blog.csdn.net/Dreamcode/archive/2008/03/28/2225660.aspx

  • 【转】snmp好文一篇

    2010-03-04 17:11:15


    1.什么是网络管理?

    网络管理分为两类。第一类是网络应用程序、用户帐号(例如文件的使用)和存取权限(许可)的管理。它们都是与软件有关的网络管理问题。这里不作讨论。

    网 络管理的第二类是由构成网络的硬件所组成。这一类包括工作站、服务器、网卡、路由器、网桥和集线器等等。通常情况下这些设备都离你所在的地方很远。正是由 于这个原因,如果当设备有问题发生时网络管理员可以自动地被通知的话,那么一切事情都好办。但是你的路由器不会象你的用户那样,当有一个应用程序问题发生 时就可以打电话通知你,而当路由器拥挤时它并不能够通知你。

    为了解决这个问题,厂商们已经在一些设备中设立了网络管理的功能,这样你就可以远程地询问它们的状态,同样能够让它们在有一种特定类型的事件发生时能够向你发出警告。这些设备通常被称为"智能"设备。

    网络管理通常被分为四类:
    被管理节点(或设备) 即你想要监视的设备 
    代理 用来跟踪被管理设备状态的特殊软件或固件 (firmware) 
    网络管理工作站 与在不同的被管理节点中的代理 通信,并且显示这些代理状态的中心设备。 
    网络管理协议 被网络管理工作站和大理用来交换 信息的协议。 

    当设计和构造网络管理的基础结构时,你需要记住下列两条网络管理的原则:

    由于管理信息而带来的通信量不应明显的增加网络的通信量。 
    被管理设备上的协议代理不应明显得增加系统处理的额外开销,以致 于该设备的主要功能都被削弱了。 


    --------------------------------------------------------------------------------

     

    2.什么是SNMP? 

     


    简 单网络管理协议(SNMP)首先是由Internet工程任务组织(Internet Engineering Task Force)(IETF)的研 究小组为了解决Internet上的路由器管理问题而提出的。许多人认为 SNMP在IP上运行的原因是Internet运行的是TCP/IP协议,然而 事实并不是这样。 

    SNMP被设计成与协议无关,所以它可以在IP,IPX,AppleTalk,OSI以及其他用到的传输协议上被使用。

    SNMP是一系列协议组和规范(见下表),它们提供了一种从网络上的设备中收集网络管理信息的方法。SNMP也为设备向网络管理工作站报告问题和错误提供了一种方法。

    名字 说明 
    MIB 管理信息库 
    SMI 管理信息的结构和标识 
    SNMP 简单网络管理协议 

    从被管理设备中收集数据有两种方法:一种是只轮询(polling-only)的方法,另一种是基于中断(interrupt-based)的方法。

    如 果你只使用只轮询的方法,那么网络管理工作站总是在控制之下。而这种方法的缺陷在于信息的实时性,尤其是错误的实时性。你多久轮询一次,并且在轮询时按照 什么样的设备顺序呢?如果轮询间隔太小,那么将产生太多不必要的通信量。如果轮询间隔太大,并且在轮询时顺序不对,那么关于一些大的灾难性的事件的通知又 会太馒。这就违背了积极主动的网络管理目的。

    当有异常事件发生时,基于中断的方法可以立即通知网络管理工作站(在这里假设该设备还没有 崩溃,并且在被管理设备和管理工作站之间仍有一条可用的通信途径)。然而,这种方法也不是没有他的缺陷的,首先,产生错误或自陷需要系统资源。如果自陷必 须转发大量的信息,那么被管理设备可能不得不消耗更多的时间和系统资源来产生自陷,从而影响了它执行主要的功能(违背了网络管理的原则2)。

    而 且,如果几个同类型的自陷事件接连发生,那么大量网络带宽可能将被相同的信息所占用(违背了网络管理的原则1)。尤其是如果自陷是关于网络拥挤问题的时 候,事情就会变得特别糟糕。克服这一缺陷的一种方法就是对于被管理设备来说,应当设置关于什么时候报告问题的阈值(threshold)。但不幸的是这种 方法可能再一次违背了网络管理的原则2,因为设备必须消耗更多的时间和系统资源,来决定一个自陷是否应该被产生。

    结果,以上两种方法的 结合:面向自陷的轮询方法(trap-directed polling)可能是执行网络管理最为有效的方法了。一般来说,网络管理工作站轮询在被管理设 备中的代理来收集数据,并且在控制台上用数字或图形的表示方式来显示这些数据。这就允许网络管理员分析和管理设备以及网络通信量了。

    被管理设备中的代理可以在任何时候向网络管理工作站报告错误情况,例如预制定阈值越界程度等等。代理并不需要等到管理工作站为获得这些错误情况而轮询他的时候才会报告。这些错误情况就是众所周知的SNMP自陷(trap)。

    在这种结合的方法中,当一个设备产生了一个自陷时,你可以使用网络管理工作站来查询该设备(假设它仍然是可到达的),以获得更多的信息。


    --------------------------------------------------------------------------------

       


    3.什么是被管理设备? 

     


    你可能听说过许多关于“SNMP可管理设备”、“与SNMP兼容的设备”或者“被SNMP管理的设备”的说法。但是它们到底什么?它们与“智能设备”又是怎么区别的呢?

    简单地说,以上所有说法的意思都是“一个包含网络管理代理实现的网络设备”。这些话也意味着这种代理支持SNMP协议来进行信息交换。正如前面所提到的,一个智能设备可能并不需要使用或支持SNMP协议。那么什么是一个代理呢? 

    代理 
        管理代理(agent)是一种特殊的软件(或固件),它包含了关于一个特殊设备和/或该设备所处环境的信息。当一个代理被安装到一个设备上时,上述的设备就被列为“被管理的”。换句话说,代理就是一个数据库。

        数据库中所包含的数据随被安装设备的不同而不同。举例来说,在一个路由器上,代理将包含关于路由选择表、接收和发送包的总数等信息。而对于一个网桥来说,数据库可能包含关于转发包数目和过滤表等信息。

        代理是与网络管理控制台通信的软件或固件。在这个控制台的“链路”上可以执行以下任务:

    网络管理工作站可以从代理中获得关于设备的信息。 
    网络管理工作站可以修改、增加或者删除代理中的表项,例如在由代理所维护的数据库中的路由选择表表项。 
    网络管理工作站可以为一个特定的自陷设置阈值。 
    代理可以向网络管理工作站发送自陷。 
        请记住,在被管理设备中的代理并不是自愿提供信息的,除非当有一个阈值被超过的事件发生时。

         在一些偶然的情况下,在一个特定的设备上可能因为系统资源的缺乏,或者因为该设备不支持SNMP代理所需要的传输协议,而不能实现一个SNMP代理。这是 否就意味着你不能监视这个设备呢?答案并不是这样的,在这种情况下并不是完全没有办法的。你可以使用受托代理(proxy agent),它相当于外部设 备(foreign device)。

        受托代理并非在被管理的外部设备上运行,而是在另一个设备上运行。网络管理工作站首先与 受托代理联系,并且指出(通过某种方法)受托代理与外部设备的一致性。然后受托代理把它接收到的协议命令翻译成任何一种外部设备所支持的管理协议。在这种 情况下,受托代理就被称为应用程序网关(application gateway)。

        如果外部设备不支持任何管理协议,那么受 托代理必须使用一些被动的方法来监视这个设备。举例来说,一个令牌环网桥的受托代理可以监视它的性能,并且如果它检测到任何由网桥所报告的拥挤错误时,它 就会产生自陷。幸运的是,目前大多数网际互联设备类型都是支持SNMP可管理设备的,所以你可以很容易地使用一个SNMP可管理设备,例如集线器、网桥和 路由器。有一些厂商甚至还在他们的网卡上提供SNMP代理。 

    MIB 
        我们通常很少把在一个被管理设备中的数据库称为一个数据库。在SNMP术语中它通常被称为管理信息库(MIB)。

        一个MIB描述了包含在数据库中的对象或表项。每一个对象或表项都有以下四个属性:

    对象类型(Object Type) 
    语法(Syntax) 
    存取(Access) 
    状态(Status) 
        在SNMP规范之一的管理信息结构与标识(SMI;RFC 1155/1065)规范中定义了这些属性。SMI对于MIB来说就相当于模式对于数据库。SMI定义了每一个对象“看上去象什么”。 

    对象类型 
         这个属性定义了一个特定对象的名字,例如sysUpTime。它只不过是一个标记。在表示数据时,SMI使用了ASN.1 (Abstract Syntax Notation One)。对象必须被“标识”。对于互联网络管理MIB来说,用ASN.1记法来表示的标识符开头 如下:

            internet OBJECT IDENTIFIER : : = { iso org(3) dod(6) 1 }

    或者用一种简单的格式:

            1.3.6.1

        这是从ASN.1文档中抽取的。它为标识符定义了一个树形的格式。该树是由一个根及与之相连接的许多被标记的节点组成。每一个节点由一个非负整数值和尽可能简明的文字说明所标识。每一个节点可能也拥有同样被标记的子节点。

        当描述一个对象标识符(OBJECT INDENTIFIER)时,你可以使用几种格式,最简单的格式是列出由根开始到所讨论的对象遍历该树所找到的整数值。     从根一级开始,这里有三个节点(如图):

    ccitt(0) 
    iso(1) 
    joint-iso-ccitt(2) 
        其中每一个“分支”都被标记中所示的管理组织所管理。 

    语法 
        这个属性指定了数据类型,例如整数、8位组串数字(字符串;范围为0至255)、对象标识符(预先定义的数据类型别名)或NULL。NULL是留待的后使用的空位。 

    存取 
        存取表明了这个特定对象的存取级别。合法的值有:只读、读写、只写和不可存取。 

    状态 
        状态定义了这个对象的实现需要:必备的(被管理节点必须实现该对象);可选的(被管理对象可能实现该对象);或者已废弃的(被管理设备不需要再实现该对象)。


     转自:http://blog.csdn.net/Dreamcode/archive/2008/03/27/2223165.aspx

  • 【转】SNMP协议简介

    2010-03-04 17:05:18


    简单网络管理协议(SNMP:Simple Network Management Protocol)。简单网络管理协议就是我们经常提到的SNMP协议,它是由互联网工程任务组(IETF:Internet Engineering Task Force )定义的一套网络管理协议。该协议基于简单网关监视协议(SGMP:Simple Gateway Monitor Protocol)。利用SNMP,一个管理工作站可以远程管理所有支持这种协议的网络设备,包括监视网络状态、修改网络设备配置、接收网络事件警告等。

            SNMP是由一系列协议组和规范组成的,它们提供了一种从网络上的设备中收集网络管理信息的方法。 管理系统由管理工作站、被管理节点、网络管理协议建立起来。在管理工作站与被管节点交流过程中,使用统一的命令并且命令种类很少,使得实现变得非常简单。 通常,网络管理工作站监视节点是通过读取被管理节点上的数据实现的,同时管理工作站也能够通过向被管理节点写入数据来实现对它的控制。被管理节点产生一个特别的事件时,被管理节点可以向管理工作站发送一条简单的网络事件消息,这个过程称为发送一个trap,管理工作站和被管理节点之间通过网络管理协议进行通讯。

            SNMP的基本原理

            SNMP采用了Client/Server模型的特殊形式:代理/管理站模型。对网络的管理与维护是通过管理工作站与SNMP代理间的交互工作完成的。每个SNMP从代理负责回答SNMP管理工作站(主代理)关于MIB定义信息的各种查询。      SNMP代理和管理站通过SNMP协议中的标准消息进行通信,每个消息都是一个单独的数据报。SNMP使用UDP(用户数据报协议)作为第四层协议(传输协议),进行无连接操作。SNMP消息报文包含两个部分:SNMP报头和协议数据单元PDU。数据报结构如下图。

            版本标识符 | 公用区 | SNMP | PDU
          
            版本识别符:确保SNMP代理使用相同的协议,每个SNMP代理都直接抛弃与自己协议版本不同的数据报。 
            公用区:用于SNMP从代理对SNMP管理站进行认证;如果网络配置成要求验证时,SNMP从代理将对团体名和管理站的IP地址进行认证,如果失败,SNMP从代理将向管理站发送一个认证失败的Trap消息。

            协议数据单元(PDU):其中PDU指明了SNMP的消息类型及其相关参数。

            SNMP提供的基本服务
            在SNMP V1.0种定义了5种基本的操作。通过这些操作,管理系统就可以预备管理节点进行有效的通讯。他们是:

             1. get请求:从一个特定的变量读取数值。
             2. getResponse请求:从一个特定的变量表格中截取信息。
             3. getNext:请求下一个对象的值。
             4. set请求:用来修改或创建对象。
             5. trap:SNMP代理向SNMP管理站发送非请求消息,一般用于描述某一事件的发生。
             
             SNMP中的MIB
             管理信息数据库(MIB)是一个信息存储库,它包含了管理代理中的有关配置和性能的数据,有一个组织体系和公共结构,其中包含分属不同组的许多个数据对象。MIB是SNMP Agent诸存管理数据的格式。IETF规定的管理信息库MIB(Management Information Base),其中定义了可访问的网络设备及其属性,由对象识别符OID(Object Identifier)唯一指定。

            SNMP的简单性不仅仅是在于传输上使用UDP而不是TCP协议,而且在于SNMP协议有完整的数据结构和使用控制方法。它的方法是在管理工作站和节点上同时使用MIB来建立基本联系。管理工作站与被管理节点上拥有相同的MIB信息。
           
            MIB是一个树形结构,SNMP协议消息通过遍历MIB树形目录中的节点来访问网络中的设备。如下图所示, MIB为一树状结构.

           iso(1)
              |
         org(3)
           |
    dod(6)
         |
    internet(1)
     |                 |
    mgmt(2)  private(4)
         |
    mib(1)
         |
    system(1)

           MIB 树上的结对应于一个SNMP对象, 其识别号由根的号码加上途经的结的号码组成, 号码之间由'.'隔开. 例如SNMP对象 "System" 具有以下的识别号 "1.3.6.1.2.1.1". MIB现有两个版本, 先出现的是MIB-I (参考RFC1156), 后扩充为MIB-II (参考RFC1213).

    转自:http://blog.csdn.net/Dreamcode/archive/2008/03/27/2223126.aspx

  • 【转】最常用的网络命令精萃

    2010-01-27 13:57:53

    转自:

    http://blog.csdn.net/bladewing/archive/2004/07/13/40599.aspx

    最常用的网络命令精萃

    作者:佚名

    一、ping   


      它是用来检查网络是否通畅或者网络连接速度的命令。作为一个生活在网络上的管理员或者黑客来说,ping命令是第一个必须掌握的DOS命令,它所利用的原理是这样的:网络上的机器都有唯一确定的IP地址,我们给目标IP地址发送一个数据包,对方就要返回一个同样大小的数据包,根据返回的数据包我们可以确定目标主机的存在,可以初步判断目标主机的操作系统等。下面就来看看它的一些常用的操作。先看看帮助吧,在DOS窗口中键入:ping /? 回车,出现如图1。所示的帮助画面。在此,我们只掌握一些基本的很有用的参数就可以了(下同)。   

      -t 表示将不间断向目标IP发送数据包,直到我们强迫其停止。试想,如果你使用100M的宽带接入,而目标IP是56K的小猫,那么要不了多久,目标IP就因为承受不了这么多的数据而掉线,呵呵,一次攻击就这么简单的实现了。   

      -l 定义发送数据包的大小,默认为32字节,我们利用它可以最大定义到65500字节。结合上面介绍的-t参数一起使用,会有更好的效果哦。   

      -n 定义向目标IP发送数据包的次数,默认为3次。如果网络速度比较慢,3次对我们来说也浪费了不少时间,因为现在我们的目的仅仅是判断目标IP是否存在,那么就定义为一次吧。   

      说明一下,如果-t 参数和 -n参数一起使用,ping命令就以放在后面的参数为标准,比如“ping IP -t -n 3”,虽然使用了-t参数,但并不是一直ping下去,而是只ping 3次。另外,ping命令不一定非得ping IP,也可以直接ping主机域名,这样就可以得到主机的IP。   

      下面我们举个例子来说明一下具体用法。   

      这里time=2表示从发出数据包到接受到返回数据包所用的时间是2秒,从这里可以判断网络连接速度的大小 。从TTL的返回值可以初步判断被ping主机的操作系统,之所以说“初步判断”是因为这个值是可以修改的。这里TTL=32表示操作系统可能是win98。

      (小知识:如果TTL=128,则表示目标主机可能是Win2000;如果TTL=250,则目标主机可能是Unix)

      至于利用ping命令可以快速查找局域网故障,可以快速搜索最快的QQ服务器,可以对别人进行ping攻击……这些就靠大家自己发挥了。

    二、nbtstat   

      该命令使用TCP/IP上的NetBIOS显示协议统计和当前TCP/IP连接,使用这个命令你可以得到远程主机的NETBIOS信息,比如用户名、所属的工作组、网卡的MAC地址等。在此我们就有必要了解几个基本的参数。   

      -a 使用这个参数,只要你知道了远程主机的机器名称,就可以得到它的NETBIOS信息如图3(下同)。   

      -A 这个参数也可以得到远程主机的NETBIOS信息,但需要你知道它的IP。

      -n 列出本地机器的NETBIOS信息。   

      当得到了对方的IP或者机器名的时候,就可以使用nbtstat命令来进一步得到对方的信息了,这又增加了我们入侵的保险系数。   

    三、netstat

      这是一个用来查看网络状态的命令,操作简便功能强大。   

      -a 查看本地机器的所有开放端口,可以有效发现和预防木马,可以知道机器所开的服务等信息,如图4。   

      这里可以看出本地机器开放有FTP服务、Telnet服务、邮件服务、WEB服务等。用法:netstat -a IP。

      -r 列出当前的路由信息,告诉我们本地机器的网关、子网掩码等信息。用法:netstat -r IP。

    以下转自:http://blog.csdn.net/mi_mang/archive/2009/07/04/4318271.aspx

    1 、命令介绍

    显示活动的 TCP 连接、计算机侦听的端口、以太网统计信息、IP 路由表、IPv4 统计信息(对于 IP、ICMP、TCP 和 UDP 协议)以及 IPv6 统计信息(对于 IPv6、ICMPv6、通过 IPv6 的 TCP 以及通过 IPv6 的 UDP 协议)。使用时如果不带参数,netstat 显示活动的 TCP 连接。 


    2、命令参数

    netstat          -a    显示所有活动的 TCP 连接以及计算机侦听的 TCP 和 UDP 端口。

                     -e    显示以太网统计信息,如发送和接收的字节数、数据包数。该参数可以与 -s 结合使用。

                     -n    显示活动的 TCP 连接,不过,只以数字形式表现地址和端口号,却不尝试确定名称。

                     -o    显示活动的 TCP 连接并包括每个连接的进程 ID (PID)。

                     -p    显示 Protocol 所指定的协议的连接。在这种情况下,Protocol 可以是 tcp、udp、tcpv6 或 udpv6。如果该参数与 -s 一起使用按协议显示统计信息

                     -s    按协议显示统计信息

                      -r    显示 IP 路由表的内容

                      sec  每隔 Interval 秒重新显示一次选定的信息。


    3、使用举例

    要想显示以太网统计信息和所有协议的统计信息,请键入下列命令:  

    netstat -e -s   

    要想仅显示 TCP 和 UDP 协议的统计信息,请键入下列命令:  

    netstat -s -p tcp udp


    要想每 5 秒钟显示一次活动的 TCP 连接和进程 ID,请键入下列命令:    

    netstat -o 5  

     

    四、tracert

      跟踪路由信息,使用此命令可以查出数据从本地机器传输到目标主机所经过的所有途径,这对我们了解网络布局和结构很有帮助。   

      这里说明数据从本地机器传输到192.168.0.1的机器上,中间没有经过任何中转,说明这两台机器是在同一段局域网内。用法:tracert IP。

    五、net   

      这个命令是网络命令中最重要的一个,必须透彻掌握它的每一个子命令的用法,因为它的功能实在是太强大了,这简直就是微软为我们提供的最好的入侵工具。首先让我们来看一看它都有那些子命令,键入net /?回车。   

      在这里,我们重点掌握几个入侵常用的子命令。   

      net view   

      使用此命令查看远程主机的所以共享资源。命令格式为net view \\IP。   

      net use

      把远程主机的某个共享资源影射为本地盘符,图形界面方便使用,呵呵。命令格式为net use x: \\IP\sharename。上面一个表示把192.168.0.5IP的共享名为magic的目录影射为本地的Z盘。下面表示和192.168.0.7建立IPC$连接(net use \\IP\IPC$ "password" /user:"name")。   

      建立了IPC$连接后,呵呵,就可以上传文件了:copy nc.exe \\192.168.0.7\admin$,表示把本地目录下的nc.exe传到远程主机,结合后面要介绍到的其他DOS命令就可以实现入侵了。   

      net start

      使用它来启动远程主机上的服务。当你和远程主机建立连接后,如果发现它的什么服务没有启动,而你又想利用此服务怎么办?就使用这个命令来启动吧。用法:net start servername,如图9,成功启动了telnet服务。   

      net stop

      入侵后发现远程主机的某个服务碍手碍脚,怎么办?利用这个命令停掉就ok了,用法和net start同。   

      net user

      查看和帐户有关的情况,包括新建帐户、删除帐户、查看特定帐户、激活帐户、帐户禁用等。这对我们入侵是很有利的,最重要的,它为我们克隆帐户提供了前提。键入不带参数的net user,可以查看所有用户,包括已经禁用的。下面分别讲解。

      1,net user abcd 1234 /add,新建一个用户名为abcd,密码为1234的帐户,默认为user组成员。

      2,net user abcd /del,将用户名为abcd的用户删除。

      3,net user abcd /active:no,将用户名为abcd的用户禁用。

      4,net user abcd /active:yes,激活用户名为abcd的用户。

      5,net user abcd,查看用户名为abcd的用户的情况。   

      net localgroup

      查看所有和用户组有关的信息和进行相关操作。键入不带参数的net localgroup即列出当前所有的用户组。在入侵过程中,我们一般利用它来把某个帐户提升为administrator组帐户,这样我们利用这个帐户就可以控制整个远程主机了。用法:net localgroup groupname username /add。   

      现在我们把刚才新建的用户abcd加到administrator组里去了,这时候abcd用户已经是超级管理员了,呵呵,你可以再使用net user abcd来查看他的状态,和图10进行比较就可以看出来。但这样太明显了,网管一看用户情况就能漏出破绽,所以这种方法只能对付菜鸟网管,但我们还得知道。现在的手段都是利用其他工具和手段克隆一个让网管看不出来的超级管理员,这是后话。有兴趣的朋友可以参照《黑客防线》第30期上的《由浅入深解析隆帐户》一文。   

      net time

      这个命令可以查看远程主机当前的时间。如果你的目标只是进入到远程主机里面,那么也许就用不到这个命令了。但简单的入侵成功了,难道只是看看吗?我们需要进一步渗透。这就连远程主机当前的时间都需要知道,因为利用时间和其他手段(后面会讲到)可以实现某个命令和程序的定时启动,为我们进一步入侵打好基础。用法:net time \\IP

    六、at   

      这个命令的作用是安排在特定日期或时间执行某个特定的命令和程序(知道net time的重要了吧?)。当我们知道了远程主机的当前时间,就可以利用此命令让其在以后的某个时间(比如2分钟后)执行某个程序和命令。用法:at time command \\computer。   

      表示在6点55分时,让名称为a-01的计算机开启telnet服务(这里net start telnet即为开启telnet服务的命令)。   

    七、ftp   

      大家对这个命令应该比较熟悉了吧?网络上开放的ftp的主机很多,其中很大一部分是匿名的,也就是说任何人都可以登陆上去。现在如果你扫到了一台开放ftp服务的主机(一般都是开了21端口的机器),如果你还不会使用ftp的命令怎么办?下面就给出基本的ftp命令使用方法。

      首先在命令行键入ftp回车,出现ftp的提示符,这时候可以键入“help”来查看帮助(任何DOS命令都可以使用此方法查看其帮助)。   

      大家可能看到了,这么多命令该怎么用?其实也用不到那么多,掌握几个基本的就够了。  

      首先是登陆过程,这就要用到open了,直接在ftp的提示符下输入“open 主机IP ftp端口”回车即可,一般端口默认都是21,可以不写。接着就是输入合法的用户名和密码进行登陆了,这里以匿名ftp为例介绍。   

      用户名和密码都是ftp,密码是不显示的。当提示**** logged in时,就说明登陆成功。这里因为是匿名登陆,所以用户显示为Anonymous。
      
      接下来就要介绍具体命令的使用方法了。   

      dir 跟DOS命令一样,用于查看服务器的文件,直接敲上dir回车,就可以看到此ftp服务器上的文件。

      cd 进入某个文件夹。

      get 下载文件到本地机器。

      put 上传文件到远程服务器。这就要看远程ftp服务器是否给了你可写的权限了,如果可以,呵呵,该怎么 利用就不多说了,大家就自由发挥去吧。

      delete 删除远程ftp服务器上的文件。这也必须保证你有可写的权限。

      bye 退出当前连接。

      quit 同上。   

    八、telnet

      功能强大的远程登陆命令,几乎所有的入侵者都喜欢用它,屡试不爽。为什么?它操作简单,如同使用自己的机器一样,只要你熟悉DOS命令,在成功以administrator身份连接了远程机器后,就可以用它来干你想干的一切了。下面介绍一下使用方法,首先键入telnet回车,再键入help查看其帮助信息。   

      然后在提示符下键入open IP回车,这时就出现了登陆窗口,让你输入合法的用户名和密码,这里输入任何密码都是不显示的。   

      当输入用户名和密码都正确后就成功建立了telnet连接,这时候你就在远程主机上具有了和此用户一样的权限,利用DOS命令就可以实现你想干的事情了,如图19。这里我使用的超级管理员权限登陆的。   

      到这里为止,网络DOS命令的介绍就告一段落了,这里介绍的目的只是给菜鸟网管一个印象,让其知道熟悉和掌握网络DOS命令的重要性。其实和网络有关的DOS命令还远不止这些,这里只是抛砖引玉,希望能对广大菜鸟网管有所帮助。学好DOS对当好网管有很大的帮助,特别的熟练掌握了一些网络的DOS命令。

      另外大家应该清楚,任何人要想进入系统,必须得有一个合法的用户名和密码(输入法漏洞差不多绝迹了吧),哪怕你拿到帐户的只有一个很小的权限,你也可以利用它来达到最后的目的。所以坚决消灭空口令,给自己的帐户加上一个强壮的密码,是最好的防御弱口令入侵的方法。

      最后,由衷的说一句,培养良好的安全意识才是最重要的。

     

  • 【转】netstat -an 命令端口状态详解

    2010-01-27 13:32:33

    netstat -an命令能看到所有和本地计算机建立连接的IP,它包含四个部分:proto(连接方式)、local address(本地连接地址)、foreign address(和本地建立连接的地址)、state(当前端口状态)。通过这个命令的详细信息可以完全监控自己的计算机上的连接。
      netstat -an命令显示的state(当前端口状态)有以下几种状态:
    LISTEN:侦听来自远方的TCP端口的连接请求
    SYN-SENT:在发送连接请求后等待匹配的连接请求
    SYN-RECEIVED:在收到和发送一个连接请求后等待对方对连接请求的确认
    ESTABLISHED:代表一个打开的连接
    FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认
    FIN-WAIT-2:从远程TCP等待连接中断请求
    CLOSE-WAIT:等待从本地用户发来的连接中断请求
    CLOSING:等待远程TCP对连接中断的确认
    LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认
    TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认
    CLOSED:没有任何连接状态

  • 【转】计算机常用端口

    2010-01-26 10:49:18

     

    计算机常用端口
    HTTP:80:www服务。
    DHCP:服务器端的端口号是67
    DHCP:客户机端的端口号是68
    POP3:POP3仅仅是接收协议,POP3客户端使用SMTP向服务器发送邮件。POP3所用的端口号是110。
    SMTP:端口号是25。SMTP真正关心的不是邮件如何被传送,而只关心邮件是否能顺利到达目的地。SMTP具有健壮的邮件处理特性,这种特性允许邮件依据一定标准自动路由,SMTP具有当邮件地址不存在时立即通知用户的能力,并且具有在一定时间内将不可传输的邮件返回发送方的特点。

    Telnet
    :端口号是23Telnet是一种最老的Internet应用,起源于ARPNET。它的名字是电信网络协议(Telecommunication Network Protocol的缩写。
    FTP
    FTP使用的端口有202120端口用于数据传输,21端口用于控制信令的传输,控制信息和数据能够同时传输,这是FTP的特殊这处。FTP采用的是TCP连接。
    TFTP
    :端口号69,使用的是UDP的连接。
    DNS:53
    ,名称服务
    NetBIOS:137,138,139,
    其中137138UDP端口,当通过网上邻居传输文件时用这个端口。而139端口:通过这个端口进入的连接试图获得NetBIOS/SMB服务。这个协议被用于windows文件和打印机共享和SAMBA。还有WINS Regisrtation也用它。
    NNTP
    网络新闻传输协议:119
    SNMP
    (简单网络管理协议):161端口
    RPC
    (远程过程调用)服务:135端口
    QQ:
    使用8000(服务端)4000端口(客户端)
    21
    端口:21 端口主要用于FTPFile Transfer Protocol,文件传输协议)服务。
    23
    端口:23 端口主要用于Telnet(远程登录)服务,是Internet上普遍采用的登录和仿真程序。
    25
    端口:25 端口为SMTPSimple Mail Transfer Protocol,简单邮件传输协议)服务器所开放,主要用于发送邮件,如今绝大多数邮件服务器都使用该协议。
    53
    端口:53 端口为DNSDomain Name Server域名服务器服务器所开放,主要用于域名解析,DNS 服务在NT 系统中使用的最为广泛。
    67
    68 端口:6768 端口分别是为Bootp 服务的Bootstrap Protocol Server(引导程序协议服务端)和Bootstrap Protocol Client(引导程序协议客户端)开放的端口。
    69
    端口:TFTP Cisco 公司开发的一个简单文件传输协议,类似于FTP
    79
    端口:79 端口是为Finger 服务开放的,主要用于查询远程主机在线用户、操作系统类型以及是否缓冲区溢出等用户的详细信息。
    80
    端口:80 端口是为HTTPHyperText Transport Protocol,超文本传输协议)开放的,这是上网冲浪使用最多的协议,主要用于在WWWWorld Wide Web,万维网)服务上传输信息的协议。
    99
    端口:99 端口是用于一个名为“Metagram Relay”(亚对策延时)的服务
    该服务比较少见,一般是用不到的。
    109
    110 端口:109 端口是为POP2Post Office Protocol Version2,邮局协议2)服务开放的,110 端口是为POP3(邮件协议3)服务开放的,POP2POP3 都是主要用于接收邮件的。
    111
    端口:111 端口是SUN 公司的RPCRemote Procedure Call,远程过程调用)服务所开放的端口,主要用于分布式系统中不同计算机的内部进程通信,RPC 在多种网络服务中都是很重要的组件。
    113
    端口:113 端口主要用于Windows “Authentication Service”(验证服务)。
    119
    端口:119 端口是为“Network News Transfer Protocol”(网络新闻组传输协议,简称NNTP)开放的。
    135
    端口:135 端口主要用于使用RPCRemote Procedure Call,远程过程调用)协议并提供DCOM(分布式组件对象模型)服务。
    137
    端口:137 端口主要用于“NetBIOS Name Service”NetBIOS名称服务)。
    139
    端口:139 端口是为“NetBIOS Session Service”提供的,主要用于提供Windows 文件和打印机共享以及Unix 中的Samba 服务。
    143
    端口:143 端口主要是用于“Internet Message Access Protocol”v2Internet 消息访问协议,简称IMAP)。
    161
    端口:161 端口是用于“Simple Network Management Protocol”(简单网络管理协议,简称SNMP)。
    443
    端口:443 端口即网页浏览端口,主要是用于HTTPS 服务,是提供加密和通过安全端口传输的另一种HTTP
    554
    端口:554 端口默认情况下用于“Real Time Streaming Protocol”(实时流协议,简称RTSP)。
    1024
    端口:1024 端口一般不固定分配给某个服务,在英文中的解释是“Reserved”(保留)。
    1080
    端口:1080 端口是Socks 代理服务使用的端口,大家平时上网使用的WWW 服务使用的是HTTP 协议的代理服务。
    1755
    端口:1755 端口默认情况下用于“Microsoft Media Server”(微软媒体服务器,简称MMS)。
    3389
    端口:远程桌面
     
     
     

    网络层---数据包的包格式里面有个很重要的字段叫做协议号。比如在传输层如果是TCP连接,那么在网络层IP包里面的协议号就将会有个值是6,如果是UDP的话那个值就是17---传输层。

    传输层---通过接口关联(端口的字段叫做端口)---应用层。
    netstat –an 可以查看本机开放的端口号。
    代理服务器常用以下端口:
    1. HTTP协议代理服务器常用端口号:80/8080/3128/8081/9080
    2. SOCKS代理协议服务器常用端口号:1080
    3. FTP(文件传输)协议代理服务器常用端口号:21
    4. Telnet(远程登录)协议代理服务器常用端口:23
     
    HTTP服务器,默认的端口号为80/tcp(木马Executor开放此端口);
    HTTPSsecurely transferring web pages)服务器,默认的端口号为443/tcp 443/udp
    Telnet(不安全的文本传送),默认端口号为23/tcp(木马Tiny Telnet Server所开放的端口);
    FTP,默认的端口号为21/tcp(木马Doly TrojanForeInvisible FTPWebExWinCrashBlade Runner所开放的端口);
    TFTPTrivial File Transfer Protocol ),默认的端口号为69/udp
    SSH(安全登录)、SCP(文件传输)、端口重定向,默认的端口号为22/tcp
    SMTP Simple Mail Transfer Protocol (E-mail),默认的端口号为25/tcp(木马AntigenEmail Password SenderHaebu CocedaShtrilitz StealthWinPCWinSpy都开放这个端口);
    POP3 Post Office Protocol (E-mail) ,默认的端口号为110/tcp
    WebLogic,默认的端口号为7001
    Webshpere应用程序,默认的端口号为9080
    webshpere管理工具,默认的端口号为9090
    JBOSS,默认的端口号为8080
    TOMCAT,默认的端口号为8080
    WIN2003远程登陆,默认的端口号为3389
    Symantec AV/Filter for MSE ,默认端口号为 8081
    Oracle 数据库,默认的端口号为1521
    ORACLE EMCTL,默认的端口号为1158
    Oracle XDB XML 数据库),默认的端口号为8080
    Oracle XDB FTP服务,默认的端口号为2100
    MS SQL*SERVER数据库server,默认的端口号为1433/tcp 1433/udp
    MS SQL*SERVER数据库monitor,默认的端口号为1434/tcp 1434/udp
    QQ,默认的端口号为1080/udp

Open Toolbar