[ ÓÀÔ¶µÄUNIX::UNIX¼¼Êõ×ÊÁϵı¦¿â ]

Ê×Ò³ > °²È«¼¼Êõ > ³ÌÐò > ÕýÎÄ
ÓÃPerlʵÏָ߼¶Ô¶³Ì²Ù×÷ϵͳ̽²â
±¾Îijö×Ô:http://xfocus.org/ ×÷Õß:·­Ò룺stardust£¨»Ã¾õ£© (2001-09-09 09:05:00)

------------------------------------------------------------------ 
------[ Feb 03, 2001 - by f0bic - http://www.low-level.net ]------ 


"Half of the work that is done is this world, 
is to make things appear what they are not." 
                        -- Elias Root Beadle 



ÕªÒª 

Õâ¸öÎĵµ´ÓPERL±à³ÌµÄ½Ç¶ÈÌÖÂÛ²Ù×÷ϵͳ̽²âµÄÀíÂÛºÍʵ¼ù¡£ÉîÈëµÄÌÖÂÛÁË 
Ô¶³Ì²Ù×÷ϵͳ̽²âµÄ·½·¨ºÍ¸ÅÄ²¢ÓÃPERLʵÏÖ¡£ 



I. ½éÉÜ 

¼¸ÄêÀ´£¬Ðí¶à¹ØÓÚÈçºÎÈ·¶¨Ò»¸öÔ¶³ÌÖ÷»úÉÏÔËÐеIJÙ×÷ϵͳµÄ·½·¨ºÍ¼¼Êõ±» 
¹«²¼³öÀ´¡£ÒòΪÕâЩ²Ù×÷ϵͳ̽²â·½·¨ÒÀÀµÓÚÌØ¶¨µÄÒòËØ£¬¶øÕâЩÒòËØ²¢²» 
×ÜÊÇ´æÔڵģ¬ËùÒÔÕâЩ²Ù×÷ϵͳµÄ̽²â²¢²»Äܱ£Ö¤£±£°£°£¥µÄ׼ȷÐÔ¡£ 



II. »ù±¾µÄ²Ù×÷ϵͳ̽²â·½·¨ 

ÔÚÉæ¼°µ½¸ß¼¶µÄ²Ù×÷ϵͳ̽²â¸ÅÄî֮ǰ£¬ÎÒÒª¼òÒª½éÉÜһϼ¸ÖÖÆäËû¼¸ÖÖ̽ 
²âÔ¶³ÌÖ÷»ú²Ù×÷ϵͳµÄ·½·¨¡£ÕâЩ·½·¨¿ÉÄÜÊǺÜÀÏ£¬µ«ËüÃÇ¿ÉÒÔʹÎÒÃÇÍê³É 
̽²â¡£ 


   (1) ×¥È¡telnet±êʶ 

ÎÒÏëÕâºÜÈÝÒ×Àí½â¡£±ÈÈç˵ÄãÁ¬½Óµ½Ô¶³ÌÖ÷»úµÄÉÏtelnetd £¬¾Í¿ÉÒÔ¿´µ½µÇ 
¼µÄʱºòtelnet´ò³öÁËʲô±êʶ¡£¡¡:) 

   (2) ×¥È¡FTP±êʶ 

ºÍtelnetµÄ¸ÅÄîÒ»Ñù£¬Ö»ÒªÕë¶Ôftpd¶ø²»ÊÇtelnetd¡£ 

   (3) httpµÄhead·½·¨ 

Äã¿ÉÒÔͨ¹ý¼ì²éweb·þÎñÆ÷(httpd)µÄ·½·¨À´È·¶¨Ä¿±êÉÏÔËÐеIJÙ×÷ϵͳ¡£±È 
ÈçWebÊÇMicrosoft-IIS£¬ÄÇô²Ù×÷ϵͳ»ù±¾ÉϾÍÊÇWindowsNT/2kÁË¡£ 


ºÃÁË£¬ÎÒÏëÒѾ­»ù±¾ÉÏ×ܽáÁËÏÖ½ñµÄ¼¸ÖÖ»ù±¾µÄ²Ù×÷ϵͳµÄ̽²â·½·¨ÁË¡£ 



III. Ô¶³Ì²Ù×÷ϵͳ̽²âºÍ·½Ê½Â·¾¶×·×Ù¸ÅÄî 

ÓÐÐí¶àÖÖ¼¼ÊõÓÃÀ´Ì½²âÒ»¸öÖ÷»úµÄ²Ù×÷ϵͳ¡£Õâ¸öÎĵµÌÖÂÛÁËÒÔÏÂËÄÖÖ£º 

    * telnetd Ö¸ÎÆ£º 
¡¡¡¡¡¡ÒÀ¿¿telnet»á»°Ð­É̺ÍÑ¡Ïî¡£ 

    * identd Ö¸ÎÆ£º 
    ¡¡ÒÀ¿¿identd/auth (113)ÊÇ·ñ´ò¿ª¡£ 
     
    * TCP Ð­Òé¶ÑÖ¸ÎÆ£º 
    ¡¡ÒÀ¿¿Êý¾Ý°üÖеÄWindow£¬TTL£¬ToSºÍDFµÈ²ÎÊý¡£ 
     
    * Queso Ö¸ÎÆ: 
      ÒÀ¿¿Êý¾Ý°üÖеÄWindow£¬Seq£¬Ack_seqµÈ²ÎÊý¡£ 
      ÒÀ¿¿¸÷ÖÖ IP/TCP Í·±ê¼Ç¡£ 

    * ±»¶¯Ö¸ÎÆ£º 
      ÓëTCP Ð­Òé¶ÑÖ¸ÎÆºÜ½Ó½ü¡£ 
      ÒÀ¿¿Window£¬TTL£¬ToSºÍDFµÈ²ÎÊý¡£ 
      ÒÀ¿¿ÍøÂçÁ÷Á¿¡£ 
       
ÔÚÒÔÏµļ¸½ÚÖÐÎÒ½«ÉîÈëµÄÌÖÂÛÉÏÃæÌáµ½µÄ¼¸ÖÖ·½·¨¡£ 


һЩÊõÓ 

  * Window£ºTCP°üÖеĴ°¿ÚÖµ£¬ÔÚδÊÕµ½È·ÈϵÄÇé¿öϰüÖÐËùÄÜ·¢Ë͵Ä×î´ó 
    Êý¾ÝÁ¿¡£ 
     
  * TTL£º´æ»îʱ¼ä£¬Ò»¸ö°üÔÚ±»¶ªÆú֮ǰËùÄÜͨ¹ýµÄ×î´ó½ÚµãÊý¡£ 
   
  * ToS£º·þÎñµÄÀàÐÍ 

  * DF£º²»·ÖƬ±ê¼Çλ 
     
  * MSS£º×î´óµÄ¶Î´óС 
   
   
ÕâЩÒòËØ¿ÉÒÔ±»ÓÃÀ´¾ö¶¨Ò»¸öÔ¶³Ì»úÆ÷ÉÏÔËÐÐÁËʲô²Ù×÷ϵͳ¡£ÒÀ¿¿ËùÓÐÒÔ 
ÉÏÕâЩ±ê¼ÇµÄ×éºÏ£¬ÓëÒ»¸ö±ê¼ÇÊý¾Ý¿â½øÐбȶԾͿÉÒԲ²â³ö²Ù×÷ϵͳ¡£Ï 
ÃæÊÇÒ»¸öÈëÕ¾Á¬½ÓµÄtcpdumpƬ¶Ï£º 

00:44:09.194998 eth0 < 203.9.66.52.www > my.ip.com.domain: 
S 2006693595:2006693595(0) ack 1 win 9112 <mss 536> (DF) 
(ttl 232, id 25119) 

ÎÒÃǺöÂÔ°üÖеÄһЩÆäËûÐÅÏ¢£¬¿ÉÒԵõ½ÏÂÃæµÄ¶«Î÷£º 

+-> É豸¡¡¡¡¡¡                 +-> Ä¿µÄµØÖ·      ¡¡¡¡¡¡ +-> ²»·ÖƬλ 
|                             |                      | 
eth0 < 203.9.66.52.www > my.ip.com.domain: win 9112 (DF) (ttl 232) 
               |                                 |        | 
               +-> Ô´µØÖ·¡¡¡¡¡¡¡¡                  |        +-> ´æ»îʱ¼äÖµ 
                                                 | 
                                                 +-> TCP ´°¿ÚÖµ 
   


Tcpdump ÊÕ¼¯Á˰üÖеÄÒÔÏÂÐÅÏ¢£º 

+++++++++++++++++++++++++++++++++++++++++++++ 
+ Ä¿µÄµØÖ·   : my.ip.com                    + 
+ Ä¿µÄ¶Ë¿Ú   : domain (53)                  + 
+ Ô´µØÖ·     : 203.9.66.52 (www.sun.com.au) + 
+ Ô´¶Ë¿Ú     : www (80)                     + 
+ ´°¿ÚÖµ     : 9112 (0x2398)                + 
+ ´æ»îʱ¼äÖµ : 232                          + 
+ ·þÎñÀàÐÍÖµ : 0                            + 
+ ²»·ÖƬλ   : ON                           + 
+ ×î´óƬ¶ÏÖµ : 536                          + 
+++++++++++++++++++++++++++++++++++++++++++++ 


´Ó´°¿ÚÖµ¿´¿ÉÄÜÊÇÒ»¸öSolaris»úÆ÷¡£´æ»îʱ¼äÖµºÍ·þÎñÀàÐÍÖµ¿´Ò²·ûºÏSolaris 
ϵͳµÄÌØÕ÷¡£SolarisϵͳµÄĬÈÏ´æ»îʱ¼äÖµÊÇ£²£µ£µ£¬ÔÚÊý¾Ý°üÑØËüµÄ·¾¶µ½´ï 
Ä¿±êµØÖ·µÄ¹ý³ÌÖУ¬¾­¹ýÒ»¶¨ÊýÁ¿µÄ½Úµã£¬´æ»îʱ¼äÖµ¿ÉÄÜ»á¼õµ½£²£³£²¡£ 


Ò»µãÓйش°¿ÚÖµµÄС˵Ã÷£º 

Ò»°ãÀ´Ëµ£¬Ò»¸ö¸ßµÄ´°¿ÚÖµÒâζ×ÅÊÇÒ»¸ö£Õ£Î£É£Ø»úÆ÷£¬¶øÒ»¸öµÍµÄ´°¿ÚÖµ 
ÔòºÜ¿ÉÄÜÊÇÒ»¸öwindows»úÆ÷£¬Â·ÓÉÆ÷£¬½»»»»úµÈ.... 


ÏÂÃæµÄtraceroute֤ʵÁËÎÒÃÇ´æ»îʱ¼äÖµ½Ó½ü255µÄ²Â²â£º 


1  my.ip.com (127.0.0.1)  148.010 ms  138.609 ms  118.812 ms 
2  ??.kpnbelgium.be (194.119.225.185)  129.111 ms  138.566 ms  118.877 ms 
3  ??.kpnbelgium.be (194.119.228.161)  119.008 ms  119.300 ms  128.546 ms   
... 
... 
20  fddi0-0.chw1.sydney.telstra.net (139.130.36.227)  509.930 ms  519.879 ms   
509.941 ms 
21  sunmi1.lnk.telstra.net (139.130.37.142)  538.911 ms !X  509.879 ms !X   
549.903 ms !X 


½Úµã21ÊÇÎÒÃǽø³öinternetµÄ×îºó½Úµã£¬ÄǸö !X ÐźÅÒâ˼ÊÇͨѶ³öÓÚ¹ÜÀí 
Ä¿µÄ±»½ûÖ¹µÄÒâ˼¡£ 


ÎÒÃǵĴæ»îʱ¼äÖµ : 232 
½ÚµãÊý          :  21 
               + --- 
×Ü´æ»îʱ¼äÖµ     : 253 

µ½´ïSolarisϵͳĬÈϵĴæ»îʱ¼äÖµ£²£µ£µ£¬ÉÙÁËÁ½¸ö½Úµã£¬ËùÒÔÎÒÃÇÖªµÀÁË 
ÔÚ½Úµã21ºó»¹ÓÐÁ½¸ö½Úµã¡£µÚÒ»¸öΪλÓÚÄÚÍøµÄÍø¼Ê»¥ÁªÉ豸£¬µÚ¶þ¸ö¾ÍÊÇ 
Ä¿±êÖ÷»ú(203.9.66.52)£¬ËüÓÐSolarisϵͳµÄ´æ»îʱ¼äÖµ£²£µ£µ¡£ÏÖÔÚÎÒÃÇ 
¿ÉÒÔ˵£¨ÒÔÏ൱µÄ¿Ï¶¨³ÌÐòÉÏ£©Ëµ203.9.66.52ÊÇÒ»¸öSolaris»úÆ÷¡£ 

Ô¶³ÌÖ÷»úµÄ·¾¶×·×Ù¶Ô²Ù×÷ϵͳµÄÖ¸ÎÆÀ´ËµÊÇÒ»¸öºÜÖØÒªµÄÎÊÌâ¡£Ò»¸öÊý¾Ý 
°üËù×ß¹ýµÄ·¾¶¿ÉÃ÷ÏԵؾö¶¨²Ù×÷ÏµÍ³Ö¸ÎÆµÄÆ¥Åä¡£ËùÒÔ£¬¶ÔÕâЩ´æ»îʱ¼ä 
ÉÏÇø±ð×öЩ»º³åÓкܴóÓô¦¡£ 



IV. ÓÃPerlʵÏÖÔ¶³ÌϵͳµÄ̽²âµÄ·½·¨ 



1. Telnetd »á»°Ð­ÉÌ(TSN)ºÍTelnetÑ¡Ïî¡£ 

ÕâÏî¼¼ÊõÉæ¼°µ½Ô¶³ÌϵͳÉÏÔËÐеÄtelnetd£¬ÔÊÐíÄãÈ¥Á¬½Ó¡£µ±ÓëtelnetdµÄ 
socketÁ¬½Ó³õʼ»¯Íê³Éºó£¬ÎÒÃÇÖ´ÐÐsysread()²Ù×÷À´ÊÕ¼¯telnet»á»°µÄЭÉÌ 
Ö¸ÎÆÐÅÏ¢¡£Õâ¸öÖ¸ÎÆ¿´ÆðÀ´»áÊÇÕâÑùµÄ£º 


Linux <= 2.2.16 : ÿý^Xÿ?ÿ?ÿ? 


ΪÁËʹÓÃtelnetÊØ»¤½ø³ÌÀ´È·¶¨²Ù×÷ϵͳ£¬ÎÒÃÇÐèÒªÖªµÀÔÚtelnet.hÖж¨Òå 
µÄTELOPT£¨TelnetÑ¡ÏµÄ˳Ðò¡£³ýÁ˸ö±ðÀý´¦£¬Ã¿¸ö²Ù×÷ϵͳÓÐËü×Ô¼ºµÄ 
˳Ðò¡£ 

Ò»µ©ÎÒÃǵõ½ÎÒÃǵÄÖ¸ÎÆÐÅÏ¢£¬ÎÒÃDZØÐëÊ×ÏȰÑËüת»»ÎªÊ®½øÖƵÄÊý£¨£±£­ 
£²£µ£µ£©£¬È»ºó¸÷×ԵذÑÊ®½øÖÆÖµºÍËüÏàÓ¦µÄTELOPTÖµÏëÆ¥Åä¡£ 


Ascii Öµ : ÿý^Xÿ?ÿ?ÿ? 
Ê®½øÖÆÖµ : 255 253 24 255 253 32 255 253 35 255 253 39 
Telopts Öµ : IAC DO  TELOPT_TTYPE IAC DO TELOPT_LINEMODE IAC DO TELOPT_XDISPLOC IAC DO 

TELOPT_NEW_ENVIRON 


ËäÈ»ÕâЩTELOPTÖµ¿ÉÒÔÔÚ /usr/include/arpa/telnet.h ÖÐÕÒµ½£¬µ«ÎÒÒ²°Ñ 
ËüÃǷŵ½ÁËÏÂÃæ£¬ÕâÑùÈç¹ûÄãÏë×öһЩ telnetdÖ¸ÎÆ¼ì²éµÄʱºò¿ÉÒÔÓõ½£º 


  /* telnet protocol definitions */ 

255     IAC         /* interpret as command: */ 
254    DONT         /* you are not to use option */ 
253    DO         /* please, you use option */ 
252    WONT        /* I won't use option */ 
251    WILL        /* I will use option */ 
250    SB         /* interpret as subnegotiation */ 
249    GA         /* you may reverse the line */ 
248    EL         /* erase the current line */ 
247    EC         /* erase the current character */ 
246    AYT        /* are you there */ 
245    AO        /* abort output--but let prog finish */ 
244    IP        /* interrupt process--permanently */ 
243    BREAK         /* break */ 
242    DM        /* data mark--for connect. cleaning */ 
241    NOP        /* nop */ 
240    SE        /* end sub negotiation */ 
239    EOR        /* end of record (transparent mode) */ 
238    ABORT        /* Abort process */ 
237    SUSP        /* Suspend process */ 
236    xEOF        /* End of file: EOF is already used... */ 


  /* telnet options */ 

  0    TELOPT_BINARY        /* 8-bit data path */ 
  1     TELOPT_ECHO        /* echo */ 
  2     TELOPT_RCP        /* prepare to reconnect */ 
  3    TELOPT_SGA          /* suppress go ahead */ 
  4    TELOPT_NAMS        /* approximate message size */ 
  5    TELOPT_STATUS        /* give status */ 
  6    TELOPT_TM         /* timing mark */ 
  7    TELOPT_RCTE        /* remote controlled transmission and echo */ 
  8    TELOPT_NAOL        /* negotiate about output line width */ 
  9    TELOPT_NAOP        /* negotiate about output page size */ 
10    TELOPT_NAOCRD        /* negotiate about CR disposition */ 
11    TELOPT_NAOHTS        /* negotiate about horizontal tabstops */ 
12    TELOPT_NAOHTD        /* negotiate about horizontal tab disposition */ 
13    TELOPT_NAOFFD         /* negotiate about formfeed disposition */ 
14    TELOPT_NAOVTS         /* negotiate about vertical tab stops */ 
15    TELOPT_NAOVTD        /* negotiate about vertical tab disposition */ 
16    TELOPT_NAOLFD         /* negotiate about output LF disposition */ 
17    TELOPT_XASCII        /* extended ascii character set */ 
18    TELOPT_LOGOUT         /* force logout */ 
19    TELOPT_BM         /* byte macro */ 
20    TELOPT_DET         /* data entry terminal */ 
21    TELOPT_SUPDUP        /* supdup protocol */ 
22    TELOPT_SUPDUPOUTPUT    /* supdup output */ 
23    TELOPT_SNDLOC         /* send location */ 
24    TELOPT_TTYPE        /* terminal type */ 
25    TELOPT_EOR         /* end of record */ 
26    TELOPT_TUID         /* TACACS user identification */ 
27    TELOPT_OUTMRK        /* output marking */ 
28    TELOPT_TTYLOC        /* terminal location number */ 
29    TELOPT_3270REGIME    /* 3270 regime */ 
30    TELOPT_X3PAD         /* X.3 PAD */ 
31    TELOPT_NAWS        /* window size */ 
32    TELOPT_TSPEED        /* terminal speed */ 
33    TELOPT_LFLOW         /* remote flow control */ 
34    TELOPT_LINEMODE        /* Linemode option */ 
35    TELOPT_XDISPLOC        /* X Display location */ 
36    TELOPT_OLD_ENVIRON    /* Old - Environmental variables */ 
37    TELOPT_AUTHENTICATION     /* Authenticate */ 
38    TELOPT_ENCRYPT         /* Encryption option */ 
39    TELOPT_NEW_ENVIRON    /* New - Environmental variables */ 
255    TELOPT_EXOPL        /* extended options list */ 


µ±¶Ôtelnetd ½øÐÐÖ¸ÎÆÌ½²âµÄʱºò£¬Ó¦¸Ã¼ÇסÕâЩ¼ì²â·Ç³£ÒÀÀµÓÚÔÚÖ÷»úÉÏ 
ĬÈϵÄtelnetd°²×°·½Ê½¡£Èç¹ûÄã²»ÊÇÔÚLinux»úÆ÷ÉÏÔËÐÐin.telnetd£¬ÄÇô 
ÕâÖÖ·½·¨¿ÉÄÜ»áʹÄã¾õµÃÔËÐÐÁ˱ðµÄ²Ù×÷ϵͳ¶ø²»ÊÇʵ¼ÊµÄÔËÐеġ£ 

ÕâÊÇÎÒtelnetdÖ¸ÎÆÎļþµÄÒ»²¿·Ý£º 


    # daemon, daemon version, os, os version, architecture, fingerprint 

    # 3Com SuperStack_II Switch 
    ,,3Com,,SuperStack_II Switch,ÿý^C, 

    # HP-UX B.10.20 
    ,,HP-UX,B.10.20,HP 9000,ÿ?, 

    # Linux 2.2.9 
    ,,Linux,2.2.9,x86,ÿý^Xÿ?ÿ?ÿ?, 

        # Cobalt Linux 3.0 
    ,,Cobalt Linux,3.0,mips,ÿý^Xÿ?ÿ?ÿ?, 
       

ÔÚÓÐЩʱºò£¬ÓÃÕâÖÖÖ¸ÎÆÌ½²â·½·¨ÎÒÃÇ¿ÉÄÜÅöÉÏÎÊÌ⣬¼¸¸ö²Ù×÷ϵͳ¿ÉÒÔÓР
ÏàͬÀàÐ͵ÄÖ¸ÎÆ£¬»áʹ²Ù×÷ϵͳµÄÇø·Ö±äµÃÀ§ÄÑ¡£µ±È»£¬ÓÐÎÊÌâ¾Í»áÓнâ¾ö 
µÄ·½·¨¡£ 

³ýÁËÖ»ÊǶÔtelnetdÓÃsysread()ÊÕ¼¯ÐÅÏ¢£¬ÎÒÃÇ¿ÉÒÔ·¢ËÍtelnetÑ¡Ïî¸øÄ¿±ê 
Ö÷»ú£¬ÊÕ¼¯ËüµÄ»ØÓ¦£¬ÓëÒ»¸öÖ¸ÎÆÊý¾Ý¿â½øÐбȶԡ£Í¨¹ý·¢ËÍÖîÈ磺 
IAC/DO/DONT/WILL/WONT µÄÃüÁÎÒÃǾͻá¶Ôÿ¸ö²Ù×÷ϵͳÈçºÎ¶ÔÃüÁî×÷³ö 
·´Ó¦ÓÐÒ»¸öÇå³þµÄÈÏʶ£¬Òò¶ø¶Ô¿ÉÄܵIJÙ×÷ϵͳÓÐÒ»¸ö±È½Ï׼ȷµÄ²Â²â¡£ 


½øÐÐTSNÖ¸ÎÆÌ½²âµÄÒ»¸öʾÀý´úÂ룺 

--cut-- 


        #!/usr/bin/perl 
        # 
        # TSN fingerprint example (by f0bic) 
        # usage: ./tsn <host> (telnetd-port) 
        # It is also possible to check for the DONT's 
        # instead of for the DO's. 
         
        use Socket; 
        $h=$ARGV[0]; 
        $p="23" unless $ARGV[1]; 
        socket(S, PF_INET, SOCK_STREAM, 6); 
        $iaddr=inet_aton($h);$paddr=sockaddr_in($p,$iaddr); 
        if(connect(S, $paddr)) { 
          sysread(S, $fprint, 200); # gathering telnetd fingerprint 
          print "\n[$h - connected]\n\nfingerprint: $fprint\n"; 
          @ords = split(//, $fprint);print "ordinal: "; 
      foreach $tval (@ords){print ord($tval);print " ";} # ordinal 
      print "\n\n"; 
        } else { 
        print "$host: cant connect!\n\n"; 
        } 
     

--cut-- 

Ò»µ©ÄãÓÃtsn.plµÃµ½ÁËÖ¸ÎÆÐÅÏ¢£¬Äã¾Í¿ÉÒÔÓëÒ»¸öÊý¾Ý¿â½øÐбȶԿ´¿´ÊDz» 
ÊÇÓгɹ¦µÄÆ¥Åä¡£ 


--- 
Óŵ㣺¿ì£¬²»ÐèÒª³¬¼¶Óû§È¨ÏÞ 
ȱµã£º²»Ì«¿É¿¿£¬ÈÝÒ×±»¼Ç¼ 
--- 


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
Telnet»á»°Ð­ÉÌÖ¸ÎÆ¹¤¾ß£º 

1. Telnetfp 

Author: palmers / teso 
Download: http://teso.scene.at/releases/telnetfp_0.1.2.tar.gz 

2. Prod-1.0 

Author: f0bic / low-level 
Download: http://www.low-level.net/f0bic/releases/prod-1.0/ 
Info: this is a perl implementation of the telnetd fingerprint 
      technique. 

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 



2. Identd Ö¸ÎÆÌ½²â 

ÕâÖÖÖ¸ÎÆÌ½²âÐèÒªÔ¶³ÌÖ÷»úÔËÐÐidentd·þÎñ¶øÇÒÎÒÃÇ¿ÉÒÔÁ¬½ÓËü¡£Í¨¹ýÓëÔ¶ 
³ÌÖ÷»úÉϵÄÊØ»¤½ø³Ì½¨Á¢Á¬½Ó£¬ÎÒÃÇ¿ÉÒÔÊÕ¼¯¹ØÓÚËüµÄ°æ±¾ÐÅÏ¢£¬Í¨¹ýÓëÒ» 
¸öÖ¸ÎÆÐÅÏ¢ÎļþÖеÄidentdµÄÀàÐÍ£¬°æ±¾ºÍ±àÒëÈÕÆÚµÈÐÅÏ¢µÄ±È¶Ô¾Í¿ÉÒÔ¶Ô 
²Ù×÷ϵͳ½øÐв²⡣ÏÂÃæÊÇÒ»¸öÀý×Ó£¬ÔÚÀïÃæ¶ÔÔ¶³Ì»úÆ÷µÄidentd·þÎñÆ÷×ö 
ÁËÒ»¸öÁ¬½Ó£º 


   ::(ninja)-([f0bic]--[/sys])$ telnet www.chemie.fu-berlin.de 113 
   Trying 160.45.22.11... 
   Connected to ester.chemie.fu-berlin.de (160.45.22.11). 
   Escape character is '^]'. 
   VERSION 
   0 , 0 : X-VERSION : pidentd 3.0.7 for IRIX64 6.5 (Sep 15 1999 11:21:21)     


²ÎÕÕRFC 1413£¬Ò»¸öidentdµÄ»ØÓ¦µÄÓï·¨ÊÇÕâÑùµÄ£º 


   <port-on-server> , <port-on-client> : <resp-type> : <add-info> 


ÔÚÎÒÃǵÄÀý×ÓÀïÎÒÃÇÖ»ÊDzéѯ°æ±¾£¬ËùÒÔÏÔʾµÄ·þÎñÆ÷Óë¿Í»§¶ËµÄ¶Ë¿Ú¶¼Îª 
0¡£·µ»ØµÄÀàÐÍÊÇX-VERSION£¬¸½¼ÓµÄÐÅÏ¢ÊÇpidentd 3.0.7 for IRIX64 6.5 
(Sep 15 1999 11:21:21)¡£Õâ¸æËßÎÒÃÇÔ¶³ÌµÄÊØ»¤½ø³ÌÊÇpidentd°æ±¾ÊÇ3.0.7 
ÔÚIRIX64 6.5ÉÏÔËÐУ¬ÔÚSep 15 1999 11:21:21±àÒë¡£´ó¶àÊýidentdµÄ»ØÓ¦ 
ÐÅÏ¢²»ÏóIRIXÄÇÑùÏÔʾÄÇô¶àÐÅÏ¢¡£ÏÂÃæµÄidentÊÇÒ»¸öFreeBSD 4.2-stable 
µÄ£º 


   0 , 0 : X-VERSION : 2.8.5 (Compiled: 11:18:59 Oct 23 2000) 


ÔÚÉÏÃæµÄÀý×ÓÀÎÒÃDz»ÄÜÖ±½ÓÈ·¶¨³öÔ¶³Ì»úÆ÷ÉÏÔËÐеÄÊÇʲôϵͳ¡£È»¶ø 
ÎÒÃÇÒ²²»ÐèÒªÄÇô¶àÐÅÏ¢£¬Ò²¿ÉÒÔͨ¹ý±È¶Ô°æ±¾ºÍ±àÒëÈÕÆÚÀ´È·¶¨³ö 
FreeBSD 4.2-stableµÄ¡£ 


--- 
Óŵ㣺¿ì£¬²»ÐèÒª³¬¼¶Óû§È¨ÏÞ¡£ 
ȱµã£º²»Ì«¿É¿¿£¬ÈÝÒ×±»¼Ç¼£¬ÔËÐÐÐèÒªÈÏÖ¤ 
--- 


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
Identd ²Ù×÷ÏµÍ³Ö¸ÎÆ¹¤¾ß£º 

ldistfp 

Author scut / teso 
Download: http://teso.scene.at/releases/ldistfp-0.1.2.tar.gz 


identfp 

Author: f0bic / lowlevel -- dethy / synnergy 
Download: http://www.synnergy.net/Archives/Utilities/dethy/identfp.tar.gz 
Info: this is a perl implementation of the identd fingerprint 
      technique. 

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 



3. »ùÓÚTCPЭÒéÕ»µÄÖ¸ÎÆÍÆ²â                                                                   

   

Õâ¸ö¼¼ÊõÉæ¼°Êý¾Ý°üµÄ´¦Àí£¬¸ü¿É¿¿¡£ÒòΪÎÒÃÇÐèÒª¹¹ÔìÊý¾Ý°ü£¬ËùÒÔÐèÒª 
³¬¼¶Óû§È¨ÏÞ¡£ÎÒÃDZØÐëÓõ½SOCK_RAW (»òÕß Net::RawIP)£¬ÕâÖÖ¼¼ÊõÊÇÏó 
ÏÂÃæÃèÊöµÄÕâÑù¹¤×÷µÄ£º 



+---------------+              SYN                +-------------------+ 
|               | ------------------------------> |                   | 
|     Source    |                                 |    Destination    | 
|               | <------------------------------ |                   | 
+---------------+            SYN|ACK              +-------------------+ 
                               | 
                               | 
                               | 
                    +----------------------+ 
                    | Packet Information:  | 
                    |----------------------| 
                    |                      | 
                    | Source: <src-addr>   | 
                    | Src-Port: <src-port> | 
                    | Dest.: <dst-addr>    | 
                    | Dst-Port: <dst-port> | 
                    |                      | 
                    |----------------------| 
                    |                      | 
                    | Window: <windowsize> | 
                    | TTL: <TTL value>     | 
                    | ToS: <ToS value>     | 
                    | DF: <ON or OFF>      | 
                    | MSS: <MSS value>     | 
                    |                      | 
                    +----------------------+ 

¾ÍÏóÄãÉÏÃæ¿´µ½µÄͼʾÄÇÑù£¬ÎÒÃÇÊÕµ½ÁËÒ»¸öSYN|ACK»ØÓ¦£¬Ëü°µÊ¾¶Ë¿Ú´¦ 
ÓÚ¼àÌý״̬¡£Èç¹û¶Ë¿Ú²»ÊÇ´¦ÓÚ¼àÌý״̬£¬ÎÒÃǽ«ÊÕµ½Ò»¸öRST|ACK»ØÓ¦¡£ 

µ±ÎÒÃÇÊÕµ½Ò»¸öSYN|ACK»ØÓ¦£¬ÔÚ¿ªÊ¼ÊÕ¼¯²Ù×÷ϵͳµÄÖ¸ÎÆÐÅϢǰ¾ÍÁ¬Ðø·¢ 
ÉúÁ˺ܶàÊÂÇ飺 

        +---------+ 
        | SYN|ACK | 
        +---------+ 
            | 
            |      +-------------------+ 
             ----> | <1> ÊÕ¼¯ÐÅÏ¢       | 
                   +-------------------+                 
                                |                               
                                |    +--------------------+ 
                                ---> | <2> ÖµÆ¥ÅäÂð£¿ÊÇ»ò·ñ | 
                                     +--------------------+ 
                                                 | 
                                                 | 
                                ------------------------------- 
                                |                             | 
                                v                             v 
                   +------------------------+     +------------------------+           
                   |     ÊÇ£º¼ÌÐøÆ¥Åä         |     | ·ñ£º²»ÄÜʶ±ðµÄÖ¸ÎÆÐÅÏ¢    | 
                   +------------------------+     +------------------------+ 
                                | 
                                | 
                                v 
                      +-----------------------+ 
                      | <3> Ö÷»ú·¾¶×·×ÙÒÀ¾É    | 
                      |     Æ¥Å䣿ÊÇ»ò·ñ        | 
                      +-----------------------+ 
                                |   
                                |    +---------------------+ 
                                |--> | ·ñ£º²»ÄÜʶ±ðµÄÖ¸ÎÆÐÅÏ¢ | 
                                |    +---------------------+ 
                                | 
                                |    +---------------------+ 
                                |--> | ÊÇ£º¼ø±ðϵͳ          | 
                                     +------------------- -+ 



    <1> ÐÅÏ¢ÊÕ¼¯ 
             
        ÒòΪÎÒÃÇÐèÒªÊÕ¼¯Window, TTL, DFµÄÖµ£¬ËùÒÔÎÒÃÇÒªÏȽ¨Á¢Ò»¸ö½üËÆÆ¥ÅäµÄÖ¸ÎÆ 
        Êý¾Ý¿â¡£Õâ¸öÖ¸ÎÆÊý¾Ý¿âÓÉȱʡwindowsizes, ttlÖµ, tosÖµ, ºÍDF(´ò¿ª»ò¹Ø±Õ) 
        ¡£ÎªÁËÊÊÓ¦ÕâÖÖ¸ñʽ£¬Òª½¨Á¢Ò»¸öÄܾ«È·ÆÀ¹ÀTCP StackÖ¸ÎÆÊÇ/·ñµÄÊ÷½á¹¹Í¼±í¡£ 

        TSFÊý¾ÝÎļþµÄÀý×Ó£º 
   
            # os,version,architecture,window,ttl,tos,df 
            # DF - 1 for ON / 0 for OFF 

            AIX,4.2,,65535,64,0,1 
            AIX,3.0,,16384,64,0,1 
            Cisco IOS,11.3,Cisco Router,4128,255,16,1 
            Solaris,,x86,9112,255,0,1 
            Solaris,8,sparc,24656,64,0,1 
   

        <2> TCP Stack ÖµÆ¥Åä 

        ÎÒÃÇÊÕ¼¯ÁËÕâЩֵÒÔºó£¬Òª°ÑÕâЩֵºÍÊý¾Ý¿âÒÑÖªµÄÖ¸ÎÆ½øÐбȽÏÊÇ·ñÆ¥Åä¡£TTL 
        ²¢²»ÊÇÒ»¸ö³£Öµ£¬ËüÒÀÀµÓÚ°ü´ÓÔ´Ö÷»úµ½Ä¿µÄÖ÷»ú¾­¹ýµÄ½ÚµãÊý¡£Òò´Ë£¬ÎÒÃǽ«½Ó 
        ÊÕÕâ¸öÆ¥Åä²¢ÇÒÁôÏÂTTLÆ¥ÅäÖ÷»ú·¾¶×·×Ù¼ì²é¡£ 

        ÎÒÃǽ«ÔÙÓÃwww.sun.com.auÀ´×öʾ·¶£º£© 
             
            # ´Ówww.sun.com.au½ÓÊÕÀ´µÄ°üÐÅÏ¢ 

            Window: 9112 / TTL: 232 / ToS: 0 / DF: ON 

            # Window, ToS, DF ¶¼ºÍSolaris²Ù×÷ϵͳÏàËÆ£¬ÁíÒ»·½ÃæTTLֵȴÒÀ¾É²»¿ÉÐÅ£¬ 
            # ÒòΪ²»ÊÇÕýÈ·µÄ255¡£ÕâÊÇÖ÷»ú·¾¶×·×ÙµÄÖյ㡣 
               

        <3> Ö÷»ú·¾¶×·×Ù (HPP) 

        ×·×Ù°ü´©Ô½µÄ·¾¶£¬ÎÒÃÇ¿ÉÒÔÈ·¶¨´ó¸ÅÕýÈ·µÄTTLÖµ²¢ÇҲ²â´ó¸Å²Ù×÷ϵͳ¡£ 

        µ±´¦ÀíTTLÖµµÄʱºòÓÐÒ»¸ö¾­Ñ飬´ÓÊý¾Ý¿âÈ¡TTLµÄÖµ²¢ÇÒÈÃËüλÓÚËüºÍ֮ǰ 
        µÄTTLÖµ¼Ó1¡£ 


           +------------------------------------+ 
           | TTL Value       |   TTL good match | 
           |------------------------------------| 
           |   32            |          0 -  32 | 
           |   64            |         33 -  64 | 
           |  128            |         65 - 128 | 
           |  255            |        129 - 255 | 
           +------------------------------------+ 


       Èç¹ûÎÒÃǵÄTTLÖµÔÚÉÏÃæµÄ±íÀÎÒÃǸø³öÏÂÁÐÍÆ²â£º 

       °üµÄTTLÖµ232λÓÚTTLÆ¥ÅäÖµ129£­255£¬ËùÒÔÎÒÃÇ¿ÉÒÔ¼ÙÉèTTLÔÚÄ¿±ê»úÆ÷Àï¿ÉÄÜÊÇ255£¬ 
       ¸øÎÒÃÇÒ»¸öÃ÷È·Æ¥Å䣺 


                x86 Solaris Operating System (Solaris,,x86,9112,255,0,1) 


       Êµ¼ÊÉÏ£¬TTLµÄ255Öµ²¢²»×ÜÊÇ´Ó129À´µÄ£¬ÒòΪÄÇÓÐ126¸ö½Úµã£¬¿´ÆðÀ´²»¿ÉÐУº£© µ«ÊÇÕâ 
       È´×ÜÊÇÒ»¸öÕýÈ·Æ¥ÅäµÄºÃ¾­Ñé¡£ 


ÏÂÃæÊÇһЩTSFµÄ·¶Àý´úÂ룬ÎÒûÓÐÌṩÕû¸ösock_rawÁ¬½Ó£¬Ö»ÊDzÉÖ¸ÎÆ²¿·Ö£¬¿ÉÒÔÔÚ°üÀïÃæ·¢ÏÖËü¡£Èç 
¹ûÄãÏ£ÍûÖªµÀÔõÑùÓÃPerlдSOCK_RAWÁ¬½Ó£¬ÎÒÇ¿ÁÒÍÆ¼öÄãÏÂÔØNet::RawIP£¨ÄãÒ»¶¨ÐèÒªËü£©È»ºó¿´ËüµÄ 
"man"¡£ 


    #!/usr/bin/perl 

    use Net::RawIP; 
     
        # here's where the SOCK_RAW connection goes. 
        # you can either use Socket w/ SOCK_RAW or use Net::RawIP. 
        # 
        # You can set whatever flags you want depending on which type 
        # of scan you want to perform. Just edit the syntax:) 
        # 
        # $packet->set({ ip => { saddr => $src, daddr => $daddr}, 
        #                tcp => { source => $sport, dest => $dport, syn => 1, psh => 1 } }); 

         
        # 


        sub fingerprint_it { 
             
            $packet->bset(substr($_[2],$offset)); 
            my ($tos, $ttl, $saddr, $desaddr, $soport, $deport, $windowsize) = 
            $packet->get( {ip => [qw(tos ttl saddr daddr)], 
                           tcp => [qw(source dest window)] 
                           });                                 
            if($windowsize) { # yay! we've got a window!!! 
              if($windowsize eq "9112") { # windowsize matching 
                 if(($ttl <= "255") && ($ttl >= "129")) { # HPP TTL matching 
                     $os="Solaris"; 
                 } 
              } 
              # here's where you can add some more OS matches 
              # ... 
              # ... 
              else { 
               print "\n\n Unknown Fingerprint\n\n"; 
               exit(0); 
              } 
            } 
            print "\n\n-- Operating System Guess: $os\n\n"; 
        } 
         

Äã¿ÉÒÔ°ÑËùÓеÄWindow, TTL, ToS, DFµÄÖµ¶ÁÈëµ½Êý×飬°Ñ´úÂë±äµÄ¸ü¼òÁ·¡¢Ò×¶®¡£¾ÍÏóÓÃ"if"½á¹¹ 
ÏÔʾ²É¼¯Ö¸ÎƵŤ×÷¡£ 


--- 
Óŵ㣺¿ì£¬±ÈTSNÖ¸ÎÆ¸ü׼ȷ 
ȱµã£ºÐèÒª³¬¼¶Óû§È¨ÏÞ 
--- 


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
»ùÓÚTCP StackÖ¸ÎÆµÄ¹¤¾ß: 

1. nmap 
×÷Õß: Fyodor 
ÏÂÔØ: http://www.insecure.org/nmap 

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 

   

4. »ùÓÚ¶à±ê¼ÇTCP StackÖ¸ÎÆ (Queso ·½·¨). 

±È½Ï»ùÓÚTCP StackÖ¸ÎÆ£¬QuesoÒÀ¿¿7´Î¼ì²é¶ø²»ÊÇÒ»´Î¡£µ±²ÉQuesoÖ¸ÎÆÊ±£¬½«´ÓÔ´Ö÷»ú·¢ËÍ7¸ö²»Í¬ 
±êÖ¾µÄ°üµ½Ä¿±êÖ÷»ú¡£ÏÂÃæÊÇQuesoÖ¸ÎÆÉ¨ÃèÀàÐ͵ĸÅÄîͼ£º 


   +----------------+ 
   | QueSO Concepts | 
   +-----------------------------------------------------+ 
   | SEND           | INFO                               | 
   |-----------------------------------------------------| 
   |                |                                    | 
   | SYN            |     Determine State of Port        | 
   |                |                                    | 
   | SYN+ACK        |     SYN|ACK test                   | 
   |                |                                    | 
   | FIN            |     FIN test                       | 
   |                |                                    | 
   | FIN+ACK        |     FIN|ACK test                   | 
   |                |                                    | 
   | SYN+FIN        |     SYN|FIN test                   | 
   |                |                                    | 
   | PSH            |     PSH test                       | 
   |                |                                    | 
   | SYN+XXX+YYY    |     SYN|XXX|YYY test               | 
   |                |                                    | 
   +-----------------------------------------------------+ 
                                           
   

   ²â¶¨¶Ë¿Ú״̬ 

   Ê×ÏÈ£¬Ò»¸öSYN°ü·¢ËÍÈ¥²â¶¨¶Ë¿ÚÊÇ·ñ´¦ÓÚ¼àÌý״̬¡£Èç¹ûÊÇ£¬ÎÒÃǽ«ÊÕµ½SYN|ACK£¬·ñÔò£¬ÎÒÃǽ« 
   ÊÕµ½RST|ACK»Ø´ð¡£³ýÁ˻شðÍ⣬7¸ö¼ì²éµÄÿ¸ö·½·¨¶¼½«²â¶¨seqnum, acknum, windowÊÇ·ñÔÚ 
   °üÍ·³öÏÖ¡£ 

   
   Í·Î±Ôì 


   ÎªÁËËõС´ó·¶Î§¿ÉÄܵIJÙ×÷ϵͳ£¬Ò»¸ö±»·¢Ë͵½ÍøÉϵÄQueso°ü(²»¹ÜÊÇSYN, SYN|ACK, FIN,...) 
   °üº¬ÁËαÔìµÄIPºÍTCPÍ·ÐÅÏ¢£¬¶øÇÒ¸½¼ÓÐÅÏ¢Àï×°ÈëÁ½¸ö²»³£ÓõÄTCP±êÖ¾(XXXºÍYYY)¡£TCP²»³£Óà
   µÄ±êÖ¾£¬XXXºÍYYY·Ö±ðʹÓÃÔÚÀý×ÓÀͨ³£²»ÒªÐ޸İüµÄ״̬²¢ÇÒ°²È«µÄºÍÆäËüÍ·µÄÖµ±£³ÖЭͬ¡£ 

   ÏÂÃæÊÇαÔìµÄIPºÍTCPÍ·µÄ±í£¬Á¬Í¬ËüµÄαÔìÖµ¡£Õâ¸ö±íµÄ°üº¬ÐÅÏ¢ÔÚquesoÔ¶³Ìϵͳ¼ì²â¹¤¾ßµÄ 
   "tcpip.c"ÀﶨÒå¡£Äã¿ÉÄÜÐèÒªÐÞ¸ÄËüÃǵÄÖµÀ´Ê¹ËûÃÇ·ûºÏÒªÇó£¬ÕâÈ¡¾öÓÚÄãÓÃʲôÀàÐ͵ÄÖ¸ÎÆÎļþ¡£ 

   
   +-------------------+ 
   | Forged IP Header  | 
   |------------------------------------------+ 
   | header length     |   5                  | 
   | ip version        |   4 (IPv4)           | 
   | tos               |   0                  | 
   | total length      |   40                 | 
   | offset            |   0                  | 
   | id                |   31337 + <src-port> | 
   | ttl               |   255                |                               
   | source            |   <src-addr>         | 
   | destination       |   <dest-addr>        | 
   | ip checksum       |   variable           | 
   | protocol          |   tcp                | 
   +------------------------------------------+ 

   
   +-------------------+ 
   | Forged TCP Header | 
   |------------------------------------------+ 
   | source port       |   <src-port>         | 
   | destination port  |   <dest-port>        | 
   | seq               |   variable           | 
   | ack               |   0                  | 
   | ( x2_offset       |   0x50 (80) )        | 
   | x2 (unused)       |   0 unless x2_offset | 
   | offset            |   5 unless x2_offset | 
   | flags             |   variable           | 
   | tcp checksum      |   variable           | 
   | window            |   0x1234 (4660) &n (http://www.fanqiang.com)
    ½øÈ롾UNIXÂÛ̳¡¿

Ïà¹ØÎÄÕÂ
 

¡ï  ·®Ç¿ÖÆ×÷ »¶Ó­·ÖÏí  ¡ï