在网络技术中,端口(Port)有好几种意思。集线器、交换机、路由器的端口指的是连接其他网络设备的接口,如RJ-45端口、Serial端口等。我们这里所指的端口不是指物理意义上的端口,而是特指TCP/IP协议中的端口,是逻辑意义上的端口。 

  那么TCP/IP协议中的端口指的是什么呢?如果把IP地址比作一间房子 ,端口就是出入这间房子的门。真正的房子只有几个门,但是一个IP地址的端口可以有65536个之多!端口是通过端口号来标记的,端口号只有整数,范围是从0 到65535。 

  端口有什么用呢?我们知道,一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等,这些服务完全可以通过1个IP地址来实现。那么,主机是怎样区分不同的网络服务呢?显然不能只靠IP地址,因为IP 地址与网络服务的关系是一对多的关系。实际上是通过“IP地址+端口号”来区分不同的服务的。 

  端口可分为3大类:

  1) 公认端口(Well Known Ports):从0到1023,它们紧密绑定于一些服务。通常这些端口的通讯明确表明了某种服 务的协议。例如:80端口实际上总是HTTP通讯。 

  2) 注册端口(Registered Ports):从1024到49151。它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口,这些端口同样用于许多其它目的。例如:许多系统处理动态端口从1024左右开始。 

  3) 动态和/或私有端口(Dynamic and/or Private Ports):从49152到65535。理论上,不应为服务分配这些端口。实际上,机器通常从1024起分配动态端口。但也有例外:SUN的RPC端口从32768开始。 

  本节讲述通常TCP/UDP端口扫描在防火墙记录中的信息。记住:并不存在所谓ICMP端口。如果你对解读ICMP数据感兴趣,请参看本文的其它部分。 
   
  0 

  通常用于分析操作系统。这一方法能够工作是因为在一些系统中“0”是无效端口,当你试 图使用一种通常的闭合端口连接它时将产生不同的结果。一种典型的扫描:使用IP地址为 0.0.0.0,设置ACK位并在以太网层广播。 

  1 tcpmux 

  这显示有人在寻找SGIIrix机器。Irix是实现tcpmux的主要提供者,缺省情况下tcpmux在这种系统中被打开。Iris机器在发布时含有几个缺省的无密码的帐户,如lp,guest, uucp, nuucp, demos, tutor, diag, EZsetup, OutOfBox, 和4Dgifts。许多管理员安装后忘记删除这些帐户。因此Hacker们在Internet上搜索tcpmux 并利用这些帐户。 
   
  7Echo 

  你能看到许多人们搜索Fraggle放大器时,发送到x.x.x.0和x.x.x.255的信息。常见的一种DoS攻击是echo循环(echo-loop),攻击者伪造从一个机器发送到另一个UDP数据包,而两个机器分别以它们最快的方式回应这些数据包。(参见Chargen) 另一种东西是由DoubleClick在词端口建立的TCP连接。有一种产品叫做“Resonate Global Dispatch”,它与DNS的这一端口连接以确定最近的路由。Harvest/squid cache将从3130端口发送UDP echo:“如果将cache的source_ping on选项打开,它将对原始主机的UDP echo端口回应一个HIT reply。”这将会产生许多这类数据包。
   
  11 sysstat 

  这是一种UNIX服务,它会列出机器上所有正在运行的进程以及是什么启动了这些进程。这为入侵者提供了许多信息而威胁机器的安全,如暴露已知某些弱点或帐户的程序。这与UNIX系统中“ps”命令的结果相似再说一遍:ICMP没有端口,ICMP port 11通常是ICMP type=11 

  19 chargen 

  这是一种仅仅发送字符的服务。UDP版本将会在收到UDP包后回应含有垃圾字符的包。TCP连接时,会发送含有垃圾字符的数据流知道连接关闭。Hacker利用IP欺骗可以发动DoS攻击。伪造两 个chargen服务器之间的UDP包。由于服务器企图回应两个服务器之间的无限的往返数据通讯一个chargen和echo将导致服务器过载。同样fraggle DoS攻击向目标地址的这个端口广播一个带有伪造受害者IP的数据包,受害者为了回应这些数据而过载。

  21 ftp 

  最常见的攻击者用于寻找打开“anonymous”的ftp服务器的方法。这些服务器带有可读写的目录。Hackers或Crackers利用这些服务器作为传送warez (私有程序) 和pr0n(故意拼错词而避免被搜索引擎分类)的节点。 
   
  22 ssh 

  PcAnywhere建立TCP和这一端口的连接可能是为了寻找ssh。这一服务有许多弱点。如果配置成特定的模式,许多使用RSAREF库的版本有不少漏洞。(建议在其它端口运行ssh)还应该注意的是ssh工具包带有一个称为make-ssh-known-hosts的程序。它会扫描整个 
域的ssh主机。你有时会被使用这一程序的人无意中扫描到。UDP(而不是TCP)与另一端的5632端口相连意味着存在搜索pcAnywhere的扫描。5632 (十六进制的0x1600)位交换后是0x0016(使进制的22)。 

  23 Telnet 

  入侵者在搜索远程登陆UNIX的服务。大多数情况下入侵者扫描这一端口是为了找到机器运行的操作系统。此外使用其它技术,入侵者会找到密码。 
   
  25 smtp 

  攻击者(spammer)寻找SMTP服务器是为了传递他们的spam。入侵者的帐户总被关闭,他们需要拨号连接到高带宽的e-mail服务器上,将简单的信息传递到不同的地址。SMTP服务器(尤其是sendmail)是进入系统的最常用方法之一,因为它们必须完整的暴露于Internet且邮件的路由是复杂的(暴露+复杂=弱点)。 

  53 DNS 

  Hacker或crackers可能是试图进行区域传递(TCP),欺骗DNS(UDP)或隐藏其它通讯。因此防火墙常常过滤或记录53端口。 需要注意的是你常会看到53端口做为UDP源端口。不稳定的防火墙通常允许这种通讯并假设这是对DNS查询的回复。Hacker常使用这种方法穿透防火墙。 

  67和68 Bootp和DHCP 

  UDP上的Bootp/DHCP:通过DSL和cable-modem的防火墙常会看见大量发送到广播地址255.255.255.255的数据。这些机器在向DHCP服务器请求一个地址分配。Hacker常进入它们分配一个地址把自己作为局部路由器而发起大量的“中间人”(man-in-middle)攻击。客户端向68端口(bootps)广播请求配置,服务器向67端口(bootpc)广播回应请求。这种回应使用广播是因为客户端还不知道可以发送的IP地址。 
   
  69 TFTP(UDP) 

  许多服务器与bootp一起提供这项服务,便于从系统下载启动代码。但是它们常常错误配置而从系统提供任何文件,如密码文件。它们也可用于向系统写入文件。 
   
  79 finger Hacker 

  用于获得用户信息,查询操作系统,探测已知的缓冲区溢出错误,回应从自己机器到其它机器finger扫描。 

  98 linuxconf 这个程序提供linux 

  boxen的简单管理。通过整合的HTTP服务器在98端口提供基于Web界面的服务。它已发现有许多安全问题。一些版本setuidroot,信任局域网,在/tmp下建立Internet可访问的文件,LANG环境变量有缓冲区溢出。 此外因为它包含整合的服务器,许多典型的HTTP漏洞可能存在(缓冲区溢出,历遍目录等) 

  109 POP2 

  并不象POP3那样有名,但许多服务器同时提供两种服务(向后兼容)。在同一个服务器上POP3的漏洞在POP2中同样存在。 
   
  110 POP3 

  用于客户端访问服务器端的邮件服务。POP3服务有许多公认的弱点。关于用户名和密码交 换缓冲区溢出的弱点至少有20个(这意味着Hacker可以在真正登陆前进入系统)。成功登陆后还有其它缓冲区溢出错误。 

  111 sunrpc portmap rpcbind Sun RPC 

  PortMapper/RPCBIND。访问portmapper是扫描系统查看允许哪些RPC服务的最早的一步。常 见RPC服务有:rpc.mountd, NFS, rpc.statd, rpc.csmd, rpc.ttybd, amd等。入侵者发现了允许的RPC服务将转向提供 服务的特定端口测试漏洞。记住一定要记录线路中的daemon, IDS, 或sniffer,你可以发现入侵者正使用什么程序访问以便发现到底发生了什么。 
   
  113 Ident auth 

  这是一个许多机器上运行的协议,用于鉴别TCP连接的用户。使用标准的这种服务可以获得许多机器的信息(会被Hacker利用)。但是它可作为许多服务的记录器,尤其是FTP, POP, IMAP, SMTP和IRC等服务。通常如果有许多客户通过防火墙访问这些服务,你将会看到许多这个端口的连接请求。记住,如果你阻断这个端口客户端会感觉到在防火墙另一边与e-mail服务器的缓慢连接。许多防火墙支持在TCP连接的阻断过程中发回RST,着将回停止这一缓慢的连接。

  119 NNTP news 

  新闻组传输协议,承载USENET通讯。当你链接到诸如:news://comp.security.firewalls/. 的地址时通常使用这个端口。这个端口的连接企图通常是人们在寻找USENET服务器。多数ISP限制只有他们的客户才能访问他们的新闻组服务器。打开新闻组服务器将允许发/读任何人的帖子,访问被限制的新闻组服务器,匿名发帖或发送spam。 
   
  135 oc-serv MS RPC end-point mapper Microsoft 

  在这个端口运行DCE RPC end- point mapper为它的DCOM服务。这与UNIX 111端口的功能很相似。使用DCOM和/或RPC的服务利用机器上的end-point mapper注册它们的位置。远端客户连接到机器时,它们查询end-point mapper找到服务的位置。同样Hacker扫描机器的这个端口是为了找到诸如:这个机器上运 行Exchange Server吗?是什么版本? 这个端口除了被用来查询服务(如使用epdump)还可以被用于直接攻击。有一些DoS攻 击直接针对这个端口。 
   
  137 NetBIOS name service nbtstat (UDP) 

  这是防火墙管理员最常见的信息,请仔细阅读文章后面的NetBIOS一节 

  139 NetBIOS File and Print Sharing 

  通过这个端口进入的连接试图获得NetBIOS/SMB服务。这个协议被用于Windows“文件和打印机共享”和SAMBA。在Internet上共享自己的硬盘是可能是最常见的问题。 大量针对这一端口始于1999,后来逐渐变少。2000年又有回升。一些VBS(IE5 VisualBasic 
s cripting)开始将它们自己拷贝到这个端口,试图在这个端口繁殖。 
   
  143 IMAP 

  和上面POP3的安全问题一样,许多IMAP服务器有缓冲区溢出漏洞运行登陆过程中进入。记住:一种Linux蠕虫(admw0rm)会通过这个端口繁殖,因此许多这个端口的扫描来自不知情的已被感染的用户。当RadHat在他们的Linux发布版本中默认允许IMAP后,这些漏洞变得流行起来。Morris蠕虫以后这还是第一次广泛传播的蠕虫。这一端口还被用于IMAP2,但并不流行。 已有一些报道发现有些0到143端口的攻击源于脚本。    
  161 SNMP(UDP) 

  入侵者常探测的端口。SNMP允许远程管理设备。所有配置和运行信息都储存在数据库中,通过SNMP客获得这些信息。许多管理员错误配置将它们暴露于Internet。Crackers将试图使用缺省的密码“public”“private”访问系统。他们可能会试验所有可能的组合。 SNMP包可能会被错误的指向你的网络。Windows机器常会因为错误配置将HP JetDirect remote management软件使用SNMP。HP OBJECT IDENTIFIER将收到SNMP包。新版的Win98使用SNMP解析域名,你会看见这种包在子网内广播 
(cable modem, DSL)查询sysName和其它信息。    

  162 SNMP trap 

  可能是由于错误配置    

  177 xdmcp 

  许多Hacker通过它访问X-Windows控制台,它同时需要打开6000端口。 
   
  513 

  rwho 可能是从使用cable modem或DSL登陆到的子网中的UNIX机器发出的广播。这些人为Hacker进入他们的系统提供 了很有趣的信息。 
   
  553 CORBA IIOP (UDP) 

  如果你使用cable modem或DSL VLAN,你将会看到这个端口的广播。CORBA是一种面向对象的RPC(remote procedure call)系统。Hacker会利用这些信息进入系统。 
   
  600 Pcserver backdoor 

  请查看1524端口一些玩s cript的孩子认为他们通过修改ingreslock和pcserver文件已经完全攻破了系统-- Alan J. Rosenthal. 
   
  635 mountd 

  Linux的mountd Bug。这是人们扫描的一个流行的Bug。大多数对这个端口的扫描是基于UDP的,但基于TCP 的mountd有所增加(mountd同时运行于两个端口)。记住,mountd可运行于任何端口(到底在哪个端口,需要在端口111做portmap查询),只是Linux默认为635端口,就象NFS通常运行于2049端口。    

  1024 

  许多人问这个端口是干什么的。它是动态端口的开始。许多程序并不在乎用哪个端口连接网络,它们请求操作系统为它们分配“下一个闲置端口”。基于这一点分配从端口1024开始。这意味着第一个向系统请求分配动态端口的程序将被分配端口1024。为了验证这一点,你可以重启机器,打开Telnet,再打开一个窗口运行“natstat -a”,你将会看到Telnet被分配1024端口。请求的程序越多,动态端口也越多。操作系统分配的端口将逐渐变大。再来一遍,当你浏览Web页时用“netstat”查看,每个Web页需要一个新 
端口。 

  ?ersion 0.4.1, June 20, 2000 
http://www.robertgraham.com/pubs/firewall-seen.html 
    Copyright 1998-2000 by Robert Graham 
(mailto:firewall-seen1@robertgraham.com. 
  All rights reserved. This document may only be reproduced (whole or 
in part) for non-commercial purposes. All reproductions must 
contain this copyright notice and must not be altered, except by 
permission of the author. 
  1025 参见1024 
  1026 参见1024  

  1080 SOCKS    

  这一协议以管道方式穿过防火墙,允许防火墙后面的许多人通过一个IP地址访问Internet。理论上它应该只允许内部的通信向外达到Internet。但是由于错误的配置,它会允许Hacker/Cracker的位于防火墙外部的攻击穿过防火墙。或者简单地回应位于Internet上的计算机,从而掩饰他们对你的直接攻击。WinGate是一种常见的Windows个人防火墙,常会发生上述的错误配置。在加入IRC聊天室时常会看到这种情况。    
  1114 SQL    

  系统本身很少扫描这个端口,但常常是sscan脚本的一部分。    

  1243 Sub-7木马(TCP)    

  参见Subseven部分。     

  1524 ingreslock后门    

  许多攻击脚本将安装一个后门Sh*ll 于这个端口(尤其是那些针对Sun系统中Sendmail和RPC服务漏洞的脚本,如statd,ttdbserver和cmsd)。如果你刚刚安装了你的防火墙就看到在这个端口上的连接企图,很可能是上述原因。你可以试试Telnet到你的机器上的这个端口,看看它是否会给你一个Sh*ll 。连接到600/pcserver也存在这个问题。 

  2049 NFS    

  NFS程序常运行于这个端口。通常需要访问portmapper查询这个服务运行于哪个端口,但是大部分情况是安装后NFS杏谡飧龆丝冢?acker/Cracker因而可以闭开portmapper直接测试这个端口。     

  3128 squid    

  这是Squid HTTP代理服务器的默认端口。攻击者扫描这个端口是为了搜寻一个代理服务器而匿名访问Internet。你也会看到搜索其它代理服务器的端口:8000/8001/8080/8888。扫描这一端口的另一原因是:用户正在进入聊天室。其它用户(或服务器本身)也会检验这个端口以确定用户的机器是否支持代理。请查看5.3节。 

  5632 pcAnywere    

  你会看到很多这个端口的扫描,这依赖于你所在的位置。当用户打开pcAnywere时,它会自动扫描局域网C类网以寻找可能得代理(译者:指agent而不是proxy)。Hacker/cracker也会寻找开放这种服务的机器,所以应该查看这种扫描的源地址。一些搜寻pcAnywere的扫描常包含端口22的UDP数据包。参见拨号扫描。     

  6776 Sub-7 artifact    

  这个端口是从Sub-7主端口分离出来的用于传送数据的端口。例如当控制者通过电话线控制另一台机器,而被控机器挂断时你将会看到这种情况。因此当另一人以此IP拨入时,他们将会看到持续的,在这个端口的连接企图。(译者:即看到防火墙报告这一端口的连接企图时,并不表示你已被Sub-7控制。)     

  6970 RealAudio    

  RealAudio客户将从服务器的6970-7170的UDP端口接收音频数据流。这是由TCP7070端口外向控制连接设置的。    

  13223 PowWow    

  PowWow 是Tribal Voice的聊天程序。它允许用户在此端口打开私人聊天的连接。这一程序对于建立连接非常具有“进攻性”。它会“驻扎”在这一TCP端口等待回应。这造成类似心跳间隔的连接企图。如果你是一个拨号用户,从另一个聊天者手中“继承”了IP地址这种情况就会发生:好象很多不同的人在测试这一端口。这一协议使用“OPNG”作为其连接企图的前四个字节。     

  17027 Conducent    

  这是一个外向连接。这是由于公司内部有人安装了带有Conducent "adbot" 的共享软件。Conducent "adbot"是为共享软件显示广告服务的。使用这种服务的一种流行的软件是Pkware。有人试验:阻断这一外向连接不会有任何问题,但是封掉IP地址本身将会导致adbots持续在每秒内试图连接多次而导致连接过载: 

  机器会不断试图解析DNS名─ads.conducent.com,即IP地址216.33.210.40 ;

216.33.199.77 
;216.33.199.80 
;216.33.199.81;216.33.210.41。(译者:不知NetAnts使用的Radiate是否也有这种现象)    

  27374 Sub-7木马(TCP)    

  参见Subseven部分。    

  30100 NetSphere木马(TCP)    

  通常这一端口的扫描是为了寻找中了NetSphere木马。    

  31337 Back Orifice “elite”    

  Hacker中31337读做“elite”/ei’li:t/(译者:法语,译为中坚力量,精华。即 3=E, 1=L, 7=T)。因此许多后门程序运行于这一端口。其中最有名的是Back Orifice。曾经一段时间内这是Internet上最常见的扫描。现在它的流行越来越少,其它的 木马程序越来越流行。

  31789 Hack-a-tack    

  这一端口的UDP通讯通常是由于"Hack-a-tack"远程访问木马(RAT, Remote Access Trojan)。这种木马包含内置的31790端口扫描器,因此任何31789端口到317890端口的连 接意味着已经有这种入侵。(31789端口是控制连接,317890端口是文件传输连接)

  32770~32900 RPC服务    

  Sun Solaris的RPC服务在这一范围内。详细的说:早期版本的Solaris(2.5.1之前)将 portmapper置于这一范围内,即使低端口被防火墙封闭仍然允许Hacker/cracker访问这一端口。 扫描这一范围内的端口不是为了寻找portmapper,就是为了寻找可被攻击的已知的RPC服务。    
  33434~33600 traceroute    

  如果你看到这一端口范围内的UDP数据包(且只在此范围之内)则可能是由于traceroute。参见traceroute部分。     

  41508 Inoculan    

  早期版本的Inoculan会在子网内产生大量的UDP通讯用于识别彼此。参见 http//www.circlemud.org/~jelson/software/udpsend.html 
[urhttp://www.ccd.bnl.gov/nss/tips/inoculan/index.html[/url   

  端口1~1024是保留端口,所以它们几乎不会是源端口。但有一些例外,例如来自NAT机器的连接。 常看见紧接着1024的端口,它们是系统分配给那些并不在乎使用哪个端口连接的应用程序的“动态端口”。 Server Client 服务描述 
  1-5/tcp 动态 FTP 1-5端口意味着sscan脚本 
  20/tcp 动态 FTP FTP服务器传送文件的端口 
  53 动态 FTP DNS从这个端口发送UDP回应。你也可能看见源/目标端口的TCP连接。 
  123 动态 S/NTP 简单网络时间协议(S/NTP)服务器运行的端口。它们也会发送到这个端口的广播。 
  27910~27961/udp 动态 Quake Quake或Quake引擎驱动的游戏在这一端口运行其服务器。因此来自这一端口范围的UDP包或发送至这一端口范围的UDP包通常是游戏。 
  61000以上 动态 FTP 61000以上的端口可能来自Linux NAT服务器(IP Masquerade) 

  常见端口详解及部分攻击策略 

  0 

  通常用于分析操作系统。这一方法能够工作是因为在一些系统中“0”是无效端口,当你试图使用一种通常的闭合端口连接它时将产生不同的结果。一种典型的扫描:使用IP地址为0.0.0.0,设置ACK位并在以太网层广播。 

  1 tcpmux 这显示有人在寻找SGI Irix机器。Irix是实现tcpmux的主要提供者,缺省情况下tcpmux在这种系统中被打开。 

  Iris机器在发布时含有几个缺省的无密码的帐户,如lp, guest, uucp, nuucp, demos, tutor, diag, EZsetup, OutOfBox, 和4Dgifts。许多管理员安装后忘记删除这些帐户。因此Hacker们在Internet上搜索tcpmux并利用这些帐户。 

  7 Echo 你能看到许多人们搜索Fraggle放大器时,发送到x.x.x.0和x.x.x.255的信息。

  常见的一种DoS攻击是echo循环(echo-loop),攻击者伪造从一个机器发送到另一个机器的UDP数据包,而两个机器分别以它们最快的方式回应这些数据包。(参见Chargen) 

  另一种东西是由DoubleClick在词端口建立的TCP连接。有一种产品叫做“Resonate Global Dispatch”,它与DNS的这一端口连接以确定最近的路由。 

  Harvest/squid cache将从3130端口发送UDP echo:“如果将cache的source_ping on选项打开,它将对原始主机的UDP echo端口回应一个HIT reply。”这将会产生许多这类数据包。 

  11 sysstat 这是一种UNIX服务,它会列出机器上所有正在运行的进程以及是什么启动了这些进程。这为入侵者提供了许多信息而威胁机器的安全,如暴露已知某些弱点或帐户的程序。这与UNIX系统中“ps”命令的结果相似 

  再说一遍:ICMP没有端口,ICMP port 11通常是ICMP type=11 

  19 chargen 这是一种仅仅发送字符的服务。UDP版本将会在收到UDP包后回应含有垃圾字符的包。TCP连接时,会发送含有垃圾字符的数据流知道连接关闭。Hacker利用IP欺骗可以发动DoS攻击。伪造两个chargen服务器之间的UDP包。由于服务器企图回应两个服务器之间的无限的往返数据通讯一个chargen和echo将导致服务器过载。同样fraggle DoS攻击向目标地址的这个端口广播一个带有伪造受害者IP的数据包,受害者为了回应这些数据而过载。 

  21 ftp 最常见的攻击者用于寻找打开“anonymous”的ftp服务器的方法。这些服务器带有可读写的目录。Hackers或Crackers利用这些服务器作为传送warez (私有程序) 和pr0n(故意拼错词而避免被搜索引擎分类)的节点。 

  22 ssh PcAnywhere建立TCP和这一端口的连接可能是为了寻找ssh。这一服务有许多弱点。如果配置成特定的模式,许多使用RSAREF库的版本有不少漏洞。(建议在其它端口运行ssh) 

  还应该注意的是ssh工具包带有一个称为make-ssh-known-hosts的程序。它会扫描整个域的ssh主机。你有时会被使用这一程序的人无意中扫描到。 

  UDP(而不是TCP)与另一端的5632端口相连意味着存在搜索pcAnywhere的扫描。5632(十六进制的0x1600)位交换后是0x0016(使进制的22)。 

  23 Telnet 入侵者在搜索远程登陆UNIX的服务。大多数情况下入侵者扫描这一端口是为了找到机器运行的操作系统。此外使用其它技术,入侵者会找到密码。 

  25 smtp 攻击者(spammer)寻找SMTP服务器是为了传递他们的spam。入侵者的帐户总被关闭,他们需要拨号连接到高带宽的e-mail服务器上,将简单的信息传递到不同的地址。SMTP服务器(尤其是sendmail)是进入系统的最常用方法之一,因为它们必须完整的暴露于Internet且邮件的路由是复杂的(暴露+复杂=弱点)。 

  53 DNS Hacker或crackers可能是试图进行区域传递(TCP),欺骗DNS(UDP)或隐藏其它通讯。因此防火墙常常过滤或记录53端口。 

  需要注意的是你常会看到53端口做为UDP源端口。不稳定的防火墙通常允许这种通讯并假设这是对DNS查询的回复。Hacker常使用这种方法穿透防火墙。 

  67和68 Bootp和DHCP UDP上的Bootp/DHCP:通过DSL和cable-modem的防火墙常会看见大量发送到广播地址255.255.255.255的数据。这些机器在向DHCP服务器请求一个地址分配。Hacker常进入它们分配一个地址把自己作为局部路由器而发起大量的“中间人”(man-in-middle)攻击。客户端向68端口(bootps)广播请求配置,服务器向67端口(bootpc)广播回应请求。

  这种回应使用广播是因为客户端还不知道可以发送的IP地址。

  69 TFTP(UDP) 许多服务器与bootp一起提供这项服务,便于从系统下载启动代码。但是它们常常错误配置而从系统提供任何文件,如密码文件。它们也可用于向系统写入文件。 

  79 finger Hacker用于获得用户信息,查询操作系统,探测已知的缓冲区溢出错误,回应从自己机器到其它机器finger扫描。 

  98 linuxconf 这个程序提供linux boxen的简单管理。通过整合的HTTP服务器在98端口提供基于Web界面的服务。它已发现有许多安全问题。一些版本setuid root,信任局域网,在/tmp下建立Internet可访问的文件,LANG环境变量有缓冲区溢出。此外因为它包含整合的服务器,许多典型的HTTP漏洞可能存在(缓冲区溢出,历遍目录等) 

  109 POP2 并不象POP3那样有名,但许多服务器同时提供两种服务(向后兼容)。在同一个服务器上POP3的漏洞在POP2中同样存在。 

  110 POP3 用于客户端访问服务器端的邮件服务。POP3服务有许多公认的弱点。关于用户名和密码交换缓冲区溢出的弱点至少有20个(这意味着Hacker可以在真正登陆前进入系统)。成功登陆后还有其它缓冲区溢出错误。 

  111 sunrpc portmap rpcbind Sun RPC PortMapper/RPCBIND。访问portmapper是扫描系统查看允许哪些RPC服务的最早的一步。

  常见RPC服务有:rpc.mountd, NFS, rpc.statd, rpc.csmd, rpc.ttybd, amd等。入侵者发现了允许的RPC服务将转向提供服务的特定端口测试漏洞。 

  记住一定要记录线路中的daemon, IDS, 或sniffer,你可以发现入侵者正使用什么程序访问以便发现到底发生了什么。

  113 Ident auth 这是一个许多机器上运行的协议,用于鉴别TCP连接的用户。使用标准的这种服务可以获得许多机器的信息(会被Hacker利用)。但是它可作为许多服务的记录器,尤其是FTP, POP, IMAP, SMTP和IRC等服务。通常如果有许多客户通过防火墙访问这些服务,你将会看到许多这个端口的连接请求。记住,如果你阻断这个端口客户端会感觉到在防火墙另一边与e-mail服务器的缓慢连接。许多防火墙支持在TCP连接的阻断过程中发回RST,着将回停止这一缓慢的连接。 

  119 NNTP news 新闻组传输协议,承载USENET通讯。当你链接到诸如:news://comp.security.firewalls/. 的地址时通常使用这个端口。这个端口的连接企图通常是人们在寻找USENET服务器。多数ISP限制只有他们的客户才能访问他们的新闻组服务器。打开新闻组服务器将允许发/读任何人的帖子,访问被限制的新闻组服务器,匿名发帖或发送spam。 

  135 oc-serv MS RPC end-point mapper Microsoft在这个端口运行DCE RPC end-point mapper为它的DCOM服务。这与UNIX 111端口的功能很相似。使用DCOM和/或RPC的服务利用机器上的end-point mapper注册它们的位置。远端客户连接到机器时,它们查询end-point mapper找到服务的位置。同样Hacker扫描机器的这个端口是为了找到诸如:这个机器上运行Exchange Server吗? 

  是什么版本? 

  这个端口除了被用来查询服务(如使用epdump)还可以被用于直接攻击。有一些DoS攻击直接针对这个端口。 

  137 NetBIOS name service nbtstat (UDP) 这是防火墙管理员最常见的信息,请仔细阅读文章后面的NetBIOS一节

  139 NetBIOS File and Print Sharing 通过这个端口进入的连接试图获得NetBIOS/SMB服务。这个协议被用于Windows“文件和打印机共享”和SAMBA。在Internet上共享自己的硬盘是可能是最常见的问题。 

  大量针对这一端口始于1999,后来逐渐变少。2000年又有回升。一些VBS(IE5 VisualBasic s cripting)开始将它们自己拷贝到这个端口,试图在这个端口繁殖。 

  143 IMAP 和上面POP3的安全问题一样,许多IMAP服务器有缓冲区溢出漏洞运行登陆过程中进入。记住:一种Linux蠕虫(admw0rm)会通过这个端口繁殖,因此许多这个端口的扫描来自不知情的已被感染的用户。当RadHat在他们的Linux发布版本中默认允许IMAP后,这些漏洞变得流行起来。Morris蠕虫以后这还是第一次广泛传播的蠕虫。 

  这一端口还被用于IMAP2,但并不流行。 

  已有一些报道发现有些0到143端口的攻击源于脚本。 

  161 SNMP(UDP) 入侵者常探测的端口。SNMP允许远程管理设备。所有配置和运行信息都储存在数据库中,通过SNMP客获得这些信息。许多管理员错误配置将它们暴露于Internet。Crackers将试图使用缺省的密码“public”“private”访问系统。他们可能会试验所有可能的组合。 

  SNMP包可能会被错误的指向你的网络。Windows机器常会因为错误配置将HP JetDirect remote management软件使用SNMP。HP OBJECT IDENTIFIER将收到SNMP包。新版的Win98使用SNMP解析域名,你会看见这种包在子网内广播(cable modem, DSL)查询sysName和其它信息。 

  69 TFTP(UDP) 许多服务器与bootp一起提供这项服务,便于从系统下载启动代码。但是它们常常错误配置而从系统提供任何文件,如密码文件。它们也可用于向系统写入文件。 

  79 finger Hacker用于获得用户信息,查询操作系统,探测已知的缓冲区溢出错误,回应从自己机器到其它机器finger扫描。 

  98 linuxconf 这个程序提供linux boxen的简单管理。通过整合的HTTP服务器在98端口提供基于Web界面的服务。它已发现有许多安全问题。一些版本setuid root,信任局域网,在/tmp下建立Internet可访问的文件,LANG环境变量有缓冲区溢出。此外因为它包含整合的服务器,许多典型的HTTP漏洞可能存在(缓冲区溢出,历遍目录等) 

  109 POP2 并不象POP3那样有名,但许多服务器同时提供两种服务(向后兼容)。在同一个服务器上POP3的漏洞在POP2中同样存在。 

  110 POP3 用于客户端访问服务器端的邮件服务。POP3服务有许多公认的弱点。关于用户名和密码交换缓冲区溢出的弱点至少有20个(这意味着Hacker可以在真正登陆前进入系统)。成功登陆后还有其它缓冲区溢出错误。 

  111 sunrpc portmap rpcbind Sun RPC PortMapper/RPCBIND。访问portmapper是扫描系统查看允许哪些RPC服务的最早的一步。

  常见RPC服务有:rpc.mountd, NFS, rpc.statd, rpc.csmd, rpc.ttybd, amd等。入侵者发现了允许的RPC服务将转向提供服务的特定端口测试漏洞。 

  记住一定要记录线路中的daemon, IDS, 或sniffer,你可以发现入侵者正使用什么程序访问以便发现到底发生了什么。

  113 Ident auth 这是一个许多机器上运行的协议,用于鉴别TCP连接的用户。使用标准的这种服务可以获得许多机器的信息(会被Hacker利用)。但是它可作为许多服务的记录器,尤其是FTP, POP, IMAP, SMTP和IRC等服务。通常如果有许多客户通过防火墙访问这些服务,你将会看到许多这个端口的连接请求。记住,如果你阻断这个端口客户端会感觉到在防火墙另一边与e-mail服务器的缓慢连接。许多防火墙支持在TCP连接的阻断过程中发回RST,着将回停止这一缓慢的连接。 

  119 NNTP news 新闻组传输协议,承载USENET通讯。当你链接到诸如:news://comp.security.firewalls/. 的地址时通常使用这个端口。这个端口的连接企图通常是人们在寻找USENET服务器。多数ISP限制只有他们的客户才能访问他们的新闻组服务器。打开新闻组服务器将允许发/读任何人的帖子,访问被限制的新闻组服务器,匿名发帖或发送spam。 

  135 oc-serv MS RPC end-point mapper Microsoft在这个端口运行DCE RPC end-point mapper为它的DCOM服务。这与UNIX 111端口的功能很相似。使用DCOM和/或RPC的服务利用机器上的end-point mapper注册它们的位置。远端客户连接到机器时,它们查询end-point mapper找到服务的位置。同样Hacker扫描机器的这个端口是为了找到诸如:这个机器上运行Exchange Server吗? 

  是什么版本? 

  这个端口除了被用来查询服务(如使用epdump)还可以被用于直接攻击。有一些DoS攻击直接针对这个端口。 

  137 NetBIOS name service nbtstat (UDP) 这是防火墙管理员最常见的信息,请仔细阅读文章后面的NetBIOS一节

  139 NetBIOS File and Print Sharing 通过这个端口进入的连接试图获得NetBIOS/SMB服务。这个协议被用于Windows“文件和打印机共享”和SAMBA。在Internet上共享自己的硬盘是可能是最常见的问题。 

  大量针对这一端口始于1999,后来逐渐变少。2000年又有回升。一些VBS(IE5 VisualBasic s cripting)开始将它们自己拷贝到这个端口,试图在这个端口繁殖。 

  143 IMAP 和上面POP3的安全问题一样,许多IMAP服务器有缓冲区溢出漏洞运行登陆过程中进入。记住:一种Linux蠕虫(admw0rm)会通过这个端口繁殖,因此许多这个端口的扫描来自不知情的已被感染的用户。当RadHat在他们的Linux发布版本中默认允许IMAP后,这些漏洞变得流行起来。Morris蠕虫以后这还是第一次广泛传播的蠕虫。 

  这一端口还被用于IMAP2,但并不流行。 

  已有一些报道发现有些0到143端口的攻击源于脚本。 

  161 SNMP(UDP) 入侵者常探测的端口。SNMP允许远程管理设备。所有配置和运行信息都储存在数据库中,通过SNMP客获得这些信息。许多管理员错误配置将它们暴露于Internet。Crackers将试图使用缺省的密码“public”“private”访问系统。他们可能会试验所有可能的组合。 

  SNMP包可能会被错误的指向你的网络。Windows机器常会因为错误配置将HP JetDirect remote management软件使用SNMP。HP OBJECT IDENTIFIER将收到SNMP包。新版的Win98使用SNMP解析域名,你会看见这种包在子网内广播(cable modem, DSL)查询sysName和其它信息。 

  162 SNMP trap 可能是由于错误配置 

  177 xdmcp 许多Hacker通过它访问X-Windows控制台, 它同时需要打开6000端口。 

  513 rwho 可能是从使用cable modem或DSL登陆到的子网中的UNIX机器发出的广播。这些人为Hacker进入他们的系统提供了很有趣的信息。 

  553 CORBA 

  IIOP (UDP) 如果你使用cable modem或DSL VLAN,你将会看到这个端口的广播。CORBA是一种面向对象的RPC(remote procedure call)系统。Hacker会利用这些信息进入系统。 

  600 Pcserver backdoor 请查看1524端口 

  一些玩s cript的孩子认为他们通过修改ingreslock和pcserver文件已经完全攻破了系统-- Alan J. Rosenthal. 

  635 mountd Linux的mountd Bug。这是人们扫描的一个流行的Bug。大多数对这个端口的扫描是基于UDP的,但基于TCP的mountd有所增加(mountd同时运行于两个端口)。记住,mountd可运行于任何端口(到底在哪个端口,需要在端口111做portmap查询),只是Linux默认为635端口,就象NFS通常运行于2049端口。 

  1024 许多人问这个端口是干什么的。它是动态端口的开始。许多程序并不在乎用哪个端口连接网络,它们请求操作系统为它们分配“下一个闲置端口”。基于这一点分配从端口1024开始。这意味着第一个向系统请求分配动态端口的程序将被分配端口1024。为了验证这一点,你可以重启机器,打开Telnet,再打开一个窗口运行“natstat -a”,你将会看到Telnet被分配1024端口。请求的程序越多,动态端口也越多。操作系统分配的端口将逐渐变大。再来一遍,当你浏览Web页时用“netstat”查看,每个Web页需要一个新端口。 

  1025 参见1024 

  1026 参见1024 

  1080 SOCKS 

  这一协议以管道方式穿过防火墙,允许防火墙后面的许多人通过一个IP地址访问Internet。理论上它应该只允许内部的通信向外达到Internet。但是由于错误的配置,它会允许Hacker/Cracker的位于防火墙外部的攻击穿过防火墙。或者简单地回应位于Internet上的计算机,从而掩饰他们对你的直接攻击。WinGate是一种常见的Windows个人防火墙,常会发生上述的错误配置。在加入IRC聊天室时常会看到这种情况。 

  1114 SQL 

  系统本身很少扫描这个端口,但常常是sscan脚本的一部分。 

  1243 Sub-7木马(TCP) 

  参见Subseven部分。 

  1524 ingreslock后门 

  许多攻击脚本将安装一个后门Shell于这个端口(尤其是那些针对Sun系统中Sendmail和RPC服务漏洞的脚本,如statd,ttdbserver和cmsd)。如果你刚刚安装了你的防火墙就看到在这个端口上的连接企图,很可能是上述原因。你可以试试Telnet到你的机器上的这个端口,看看它是否会给你一个Shell。连接到600/pcserver也存在这个问题。 

  2049 NFS 

  NFS程序常运行于这个端口。通常需要访问portmapper查询这个服务运行于哪个端口,但是大部分情况是安装后NFS运行于这个端口,Hacker/Cracker因而可以闭开portmapper直接测试这个端口。 

  3128 squid 

  这是Squid HTTP代理服务器的默认端口。攻击者扫描这个端口是为了搜寻一个代理服务器而匿名访问Internet。你也会看到搜索其它代理服务器的端口:8000/8001/8080/8888。扫描这一端口的另一原因是:用户正在进入聊天室。其它用户(或服务器本身)也会检验这个端口以确定用户的机器是否支持代理。请查看5.3节。 

  5632 pcAnywere 

  你会看到很多这个端口的扫描,这依赖于你所在的位置。当用户打开pcAnywere时,它会自动扫描局域网C类网以寻找可能得代理(译者:指agent而不是proxy)。Hacker/cracker也会寻找开放这种服务的机器,所以应该查看这种扫描的源地址。

  一些搜寻pcAnywere的扫描常包含端口22的UDP数据包。参见拨号扫描。 

  6776 Sub-7 artifact 

  这个端口是从Sub-7主端口分离出来的用于传送数据的端口。例如当控制者通过电话线控制另一台机器,而被控机器挂断时你将会看到这种情况。因此当另一人以此IP拨入时,他们将会看到持续的,在这个端口的连接企图。(译者:即看到防火墙报告这一端口的连接企图时,并不表示你已被Sub-7控制。) 

  6970 RealAudio 

  RealAudio客户将从服务器的6970-7170的UDP端口接收音频数据流。这是由TCP7070端口外向控制连接设置的。 

  13223 PowWow 

  PowWow 是Tribal Voice的聊天程序。它允许用户在此端口打开私人聊天的连接。这一程序对于建立连接非常具有“进攻性”。它会“驻扎”在这一TCP端口等待回应。这造成类似心跳间隔的连接企图。如果你是一个拨号用户,从另一个聊天者手中“继承”了IP地址这种情况就会发生:好象很多不同的人在测试这一端口。这一协议使用“OPNG”作为其连接企图的前四个字节。 

  17027 Conducent 

  这是一个外向连接。这是由于公司内部有人安装了带有Conducent "adbot" 的共享软件。Conducent "adbot"是为共享软件显示广告服务的。使用这种服务的一种流行的软件是Pkware。有人试验:阻断这一外向连接不会有任何问题,但是封掉IP地址本身将会导致adbots持续在每秒内试图连接多次而导致连接过载:机器会不断试图解析DNS名—ads.conducent.com,即IP地址216.33.210.40 ;216.33.199.77 ;216.33.199.80 ;216.33.199.81;216.33.210.41。(译者:不知NetAnts使 
用的Radiate是否也有这种现象) 

  27374 Sub-7木马(TCP) 

  参见Subseven部分。 

  30100 NetSphere木马(TCP) 

  通常这一端口的扫描是为了寻找中了NetSphere木马。 

  31337 Back Orifice “elite” 

  Hacker中31337读做“elite”/ei’li:t/(译者:法语,译为中坚力量,精华。即3=E, 1=L, 7=T)。因此许多后门程序运行于这一端口。其中最有名的是Back Orifice。曾经一段时间内这是Internet上最常见的扫描。现在它的流行越来越少,其它的木马程序越来越流行。 

  31789 Hack-a-tack 

  这一端口的UDP通讯通常是由于"Hack-a-tack"远程访问木马(RAT, Remote Access Trojan)。这种木马包含内置的31790端口扫描器,因此任何31789端口到317890端口的连接意味着已经有这种入侵。(31789端口是控制连接,317890端口是文件传输连接) 

  32770~32900 RPC服务 

  Sun Solaris的RPC服务在这一范围内。详细的说:早期版本的Solaris(2.5.1之前)将portmapper置于这一范围内,即使低端口被防火墙封闭仍然允许Hacker/cracker访问这一端口。扫描这一范围内的端口不是为了寻找portmapper,就是为了寻找可被攻击的已知的RPC服务。

  33434~33600 traceroute 

  如果你看到这一端口范围内的UDP数据包(且只在此范围之内)则可能是由于traceroute。参见traceroute部分。 

  41508 Inoculan 

  早期版本的Inoculan会在子网内产生大量的UDP通讯用于识别彼此。

本日志由 flyinweb 于 2009-06-17 22:59:25 发表到 技术文摘 中,目前已经被浏览 126 次,评论 0 次;

作者添加了以下标签: 端口攻击

近来,网络上的SQL Injection 漏洞利用攻击,JS脚本,HTML脚本攻击似乎逾演逾烈。陆续的很多站点都被此类攻击所困扰,并非像主机漏洞那样可以当即修复,来自于WEB的攻击方式使我们在防范或者是修复上都带来了很大的不便。HOOO...... 一个站长最大的痛苦莫过于此。自己的密码如何如何强壮却始终被攻击者得到,但如何才能做到真正意义上的安全呢?第一,别把密码和你的生活联系起来;第二,Supermaster的PWD最好只有你自己知道;第三,绝对要完善好你的网站程序。然而怎样才能完善,这将是我们此文的最终目的。 

  安全防护,如何做到安全防护?想要防护就要知道对方是如何进行攻击。有很多文章都在写如何攻下某站点,其实其攻击的途径也不过是以下几种: 

1. 简单的脚本攻击 

  此类攻击应该属于无聊捣乱吧。比如****:alert(); </table>等等,由于程序上过滤的不严密,使攻击者既得不到什么可用的,但又使的他可以进行捣乱的目的。以目前很多站点的免费服务,或者是自身站点的程序上也是有过滤不严密的问题。 

2. 危险的脚本攻击 

  这类脚本攻击已经过度到可以窃取管理员或者是其他用户信息的程度上了。比如大家都知道的cookies窃取,利用脚本对客户端进行本地的写操作等等。 

3. Sql Injection 漏洞攻击 

  可以说,这个攻击方式是从动网论坛和BBSXP开始的。利用SQL特殊字符过滤的不严密,而对数据库进行跨表查询的攻击。比如: 

http://127.0.0.1/forum/showuser.asp?id=999 and 1=1 
http://127.0.0.1/forum/showuser.asp?id=999 and 1=2 
http://127.0.0.1/forum/showuser.asp?id=999 and 0<>(select count(*) from admin) 
http://127.0.0.1/forum/showuser.asp?id=999'; declare @a sysname set @a='xp_'+'cmdshell' exec @a 'dir c:\'---&aid=9 

  得到了管理员的密码也就意味着已经控制的整站,虽然不一定能得到主机的权限,但也为这一步做了很大的铺垫。类似的SQL Injection攻击的方式方法很多,对不同的文件过滤不严密所采取的查询方式也不同。所以说想做好一个完整的字符过滤程序不下一凡功夫是不可能的。 

4. 远程注入攻击 

  某站点的所谓的过滤只是在提交表格页上进行简单的JS过滤。对于一般的用户来说,你大可不必防范;对早有预谋的攻击者来说,这样的过滤似乎根本没作用。我们常说的POST攻击就是其中一例。通过远程提交非法的信息以达到攻击目的。 

  通过上面的攻击方法的介绍,我们大致的了解了攻击者的攻击途径,下面我们就开始重点的介绍,如何有效的防范脚本攻击!

  让我们还是从最简单的开始: 

防范脚本攻击 

  JS脚本 和HTML脚本攻击的防范其实很简单:server.HTMLEncode(Str)完事。当然你还不要大叫,怎么可能?你让我把全站类似<%=uid%>都加过滤我还不累死?为了方便的过滤,我们只需要将HTML脚本和JS脚本中的几个关键字符过滤掉就可以了:程序体(1)如下: 
以下是过滤函数 

  1. <%   
  2. function CHK(fqyString)   
  3.       fqyString = replace(fqyString, ">", ">")   
  4.       fqyString = replace(fqyString, "<", "<")   
  5.       fqyString = replace(fqyString, "&#", "&")   
  6.       fqyString = Replace(fqyString, CHR(32), "  ")   
  7.       fqyString = Replace(fqyString, CHR(9), " ")   
  8.       fqyString = Replace(fqyString, CHR(34), """)   
  9.       fqyString = Replace(fqyString, CHR(39), "'")   
  10.       fqyString = Replace(fqyString, CHR(13), "")   
  11.       fqyString = Replace(fqyString, CHR(10) & CHR(10), "</P><P> ")   
  12.       fqyString = Replace(fqyString, CHR(10), "<BR> ")   
  13.       CHK = fqyString   
  14. end function   
  15. %> 

 
'以下是应用实例 

  1. <%=CHK(Username)%>   
  2.  
  3. Username=CHK(replace(request("username"),"'"""))   


  使用Include把函数写在公有页面上,这样效率是最好的。 

程序体(1) 

  另外,值得我们注意的是,很多站点在用户注册,或者是用户资料修改的页面上也缺少脚本的过滤,或者是只在其中之一进行过滤,注册进入后修改资料仍然可以进行脚本攻击。对用户提交的数据进行检测和过滤,程序体(2) 如下: 

  1.  '以下是过滤函数   
  2. If Instr(request("username"),"=")>0 or   
  3. Instr(request("username"),"%")>0 or   
  4. Instr(request("username"),chr(32))>0 or   
  5. Instr(request("username"),"?")>0 or   
  6. Instr(request("username"),"&")>0 or   
  7. Instr(request("username"),";")>0 or   
  8. Instr(request("username"),",")>0 or   
  9. Instr(request("username"),"'")>0 or   
  10. Instr(request("username"),"?")>0 or   
  11. Instr(request("username"),chr(34))>0 or   
  12. Instr(request("username"),chr(9))>0 or   
  13. Instr(request("username"),"")>0 or   
  14. Instr(request("username"),"$")>0 or   
  15. Instr(request("username"),">")>0 or   
  16. Instr(request("username"),"<")>0 or   
  17. Instr(request("username"),"""")>0 then   
  18. response.write "朋友,你的提交用户名含有非法字符,请更改,谢谢合作 <a href='****:window.history.go(-1);'>返回</a>"   
  19. response.end   
  20. end if  


程序体(2) 

  为了提供工作效率我们再将过滤内容程序化,这样对多个参数的过滤效率将有很大程度上的提高:如 程序体(3) 


  1. '以下为程序主体   
  2.  
  3. dim Bword(18)   
  4. Bword(0)="?"   
  5. Bword(1)=";"   
  6. Bword(2)=">"   
  7. Bword(3)="<"   
  8. Bword(4)="-"   
  9. Bword(5)="'"   
  10. Bword(6)=""""   
  11. Bword(7)="&"   
  12. Bword(8)="%"   
  13. Bword(9)="$"   
  14. Bword(10)="'"   
  15. Bword(11)=":"   
  16. Bword(12)="|"   
  17. Bword(13)="("   
  18. Bword(14)=")"   
  19. Bword(15)="--"   
  20. Bword(16)=" chr(9)"   
  21. Bword(17)=" chr(34)"   
  22. Bword(18)=" chr(32)"   
  23. errc=false   
  24. ‘以下是应用实例部分   
  25. for i= 0 to ubound(Bword)   
  26.       if instr(FQYs,Bword(i))<>0 then   
  27.             errc=true   
  28.       end if   
  29. next   
  30. if errc then   
  31.       response.write "<script language=""****"">"   
  32.       response.write "parent.alert('很抱歉!您的操作违法了);"   
  33.       response.write "history,back();"   
  34.       response.write "</script>"   
  35.       response.end   
  36. end if   

  有了上面的过滤函数您可以在任何需要过滤的地方应用过滤函数直接使用就可以了。这就使我们的修复工作大大的简化了。 

  另外,我想在这里再次多提醒一下,一些站点的UBB在进行小的表情图标转化时也会出现过滤问题,由于很隐蔽所以不容易发现: 

  如: 

  我们标签内的文字进行修改, 

  不知道各位看懂没,前一个单引号用来中和程序提供的左引号,第二个单引号用来中和闭合的右引号,这样程序输出就为: 

  1. <img src='img/0001.gif' onerror=****:alert(); alt=''>  


  如果图片不存在,那么将激活onerror标签执行脚本程序。对于已经过滤了单引号的站点在这里用双引号一样可以完成。对于过滤了****字段的,只用alert()也完全可以。所以说要过滤就要过滤完全,别给攻击者留下一丝机会。 

防范SQL Injection 漏洞攻击 

  可以这样说,这里似乎是整篇文章的重点了.SQL Injection 漏洞攻击的的多样化也使得我们在程序防护上不得不想的更多一些。面对SQL Injection 的强大"攻势",我们到底该过滤哪些? 

  一些常用的危险字符有 
  ' 数据库字段判别封闭 
  -- 某些数据库注释标志 
  # 某些数据库注释标志 
  " 可能导致程序出错 
  \ 跨越目录 
  3221143836nicode编码的特征字符 
  $ 可能用于变量标注 
  / 和\ 一样 
  NULL 小心"空"录入的危险,可能导致数据库或系统处理报错,利用报错构造溢出. 
  空格和'一起,构造sql injeciton 
  ? = & 如果存在二次参数传递,可能改写querystr。 

  (1) 从最一般的.SQL Injection 漏洞攻击来看:用户名和密码上的过滤问题,如: 

  提交:用户名为:'or''=' 用户密码为:'or''=' 

  从程序出发,我们完全可以得出,数据库在执行以下操作 

  Sql=" SELECT * FROM lUsers WHERE Username=''or''='' and Password = ''or''=''" 

  这样一来,这样,SQL 服务器将返回 lUsers 表格中的所有记录,而 ASP 脚本将会因此而误认为攻击者的输入符合 lUsers 表格中的第一条记录,从而允许攻击者以该用户的名义登入网站。对此类注入的防范似乎简单的很: 

  利用以下程序就可以实现,程序体(4) 

  1.   strUsername = Replace(Request.Form("Username"), "''", "''''")   
  2.   strPassword = Replace(Request.Form("Password"), "''", "''''")  


程序体(4) 

  (2)杜绝SQL 注入式攻击的第一步就是采用各种安全手段监控来自 ASP request 对象 (Reques、Request.QueryString、Request.Form、Request.Cookies和 Request.ServerVariables) 的用户输入,以确保 SQL 指令的可靠性。具体的安全手段根据你的 DBMS 而异。 

  SQL 注入式攻击可能引起的危害取决于该网站的软件环境和配置。当 Web 服务器以操作员(dbo)的身份访问数据库时,利用SQL注入式攻击就可能删除所有表格、创建新表格,等等。当服务器以超级用户 (sa) 的身份访问数据库时,利用SQL注入式攻击就可能控制整个 SQL 服务器;在某些配置下攻击者甚至可以自行创建用户帐号以完全操纵数据库所在的 Windows 服务器。 

  如: 

http://127.0.0.1/forum/showuser.asp?id=999';declare @a sysname set @a='xp_'+ 'cmdshell' exec @a 'dir c:\'--&aid=9 

http://127.0.0.1/forum/showuser.asp?id=999'; declare @a sysname set @a='xp'+ '_cm'+'dshell' exec @a 'dir c:\'--&aid=9 

  甚至可以执行像:net user fqy fqy /add 这样的指令.当然这就需要你当前的运行身份必须是Sa,或者你攻击的只是一台虚拟主机,我劝你还是就此打住. 

  对于一些整机使用的站点来说防止通过80端口攻击而直接拿到整机管理权限,这一点就变得至关重要了。对xp_cmdshell 的过滤就成为首要,很多站点的程序都是用GET或者是GET与POST混合来提交数据的,对于此,我们给出一种防止GET进行SQL注入的程序:如程序体(5) 

  1. fqys=request.servervariables("query_string")   
  2. dim nothis(18)   
  3. nothis(0)="net user"   
  4. nothis(1)="xp_cmdshell"   
  5. nothis(2)="/add"   
  6. nothis(3)="exec%20master.dbo.xp_cmdshell"   
  7. nothis(4)="net localgroup administrators"   
  8. nothis(5)="select"   
  9. nothis(6)="count"   
  10. nothis(7)="asc"   
  11. nothis(8)="char"   
  12. nothis(9)="mid"   
  13. nothis(10)="'"   
  14. nothis(11)=":" 
  15. nothis(12)="""" 
  16. nothis(13)="insert"   
  17. nothis(14)="delete"   
  18. nothis(15)="drop"   
  19. nothis(16)="truncate"   
  20. nothis(17)="from"   
  21. nothis(18)="%"   
  22. errc=false   
  23.  
  24. for i= 0 to ubound(nothis)   
  25.       if instr(FQYs,nothis(i))<>0 then   
  26.             errc=true   
  27.  
  28.       end if   
  29. next   
  30. if errc then   
  31.       response.write "<script language=""****"">"   
  32.       response.write "parent.alert('很抱歉!你正在试图攻击本服务器或者想取得本服务器最高管理权!将直接转向首页..');"   
  33.       response.write "self.location.href='default.asp';"   
  34.       response.write "</script>"   
  35.       response.end   
  36. end if 

 
   程序体(5) 

  我要做点声明的是:以上的程序只是对GET方式提交的数据进行的过滤,千万不要盲目套用。 

  像其他一些来自 ASP request 对象 (Reques、Request.QueryString、Request.Form、Request.Cookies和 Request.ServerVariables) 的用户输入的攻击方法的方法,大致都集中在脚本期望的输入变量是数字变量 (ID) 上,当然我们不能只看数字变量,比如: 

http://127.0.0.1/systembbs/showtopic.asp?tid=99&name=abc' and left(userpassword,1)='a 

http://127.0.0.1/systembbs/addtopic.asp?tid=99&name=abc' and userpassword='or''=' 

  另外,如何单一的防止类似这样的注入错误? 

http://127.0.0.1/systembbs/addtopic.asp?tid=99' ;delete forum_forum;--&page=3

  1. ......addtopic.asp?action=add......   
  2.  
  3. ......addtopic.asp?action=delect......   
  4.  
  5. Action1=trim(Request.QueryString())   
  6. if left(action1,7)<>"action=" then '限定querystring必须为 action=   
  7. error(err01)'错误处理   
  8. else   
  9. action=Request.querystring("action")'取得querystring的值   
  10. end if   
  11. select case action'对querystring进行处理   
  12. case "add"   
  13. .....   
  14. case "delete"   
  15. ......   
  16. case else '如果querystring没有这个值则进行错误处理   
  17. error(err02)   
  18. end select 


  防范程序: 程序体(6) 

程序体(6) 

  出现这样的攻击,使我们的站长们不得不又再次头痛,这里我可以给出大家一个解决最好办法,一般的来说,用户名长度字符数不会超过15个字符,大都为14字符。那么我们从长度出发,来进行过滤:如程序体(7) 

  1. Name=replace(name,"'""")   
  2.  
  3. If len(name)>16 then   
  4.  
  5. Response.write " 你要做什么?"   
  6.  
  7. Response.end   
  8.  
  9. End if  



程序体(7) 

  为什么我们这里以及过滤了单引号,怎么还要再次取一个长度限制呢?不多说了,看看4ngel的文章先<<饶过'限制继续射入>> .别问我怎么转数字格式,我不会,嘿嘿...^_^! 

  还继续回到我们的主题," 脚本期望的输入变量是数字变量 (ID)".怎样进行注入防范,天呐,方法太多了,最直接的就是判断是否是数字整型,还有一些比较个性的验证办法,我们一一介绍一下 如:程序体(8) 

  一,判断数字是否是整型 

  1. p_lngID = CLng(Request("ID"))  



  二 ,取字长 这一点我相信一般的数据长度不会大于8位所以: 

  1. If len(ID)>8 then   
  2.     response.write "bedpost"   
  3.     response end   
  4. end if 


  三,我认为这是一种比较冒险的办法,就是再进行一次数据库的查询,如果数据库表内没有相同的值与之相同那么返回错误. 
  1. sql = "SELECT NAME FROM Category where ID="&ID  
  2. set temp=conn.Execute(SQL)   
  3. if temp.bof or temp.eof then   
  4. response.Redirect("index.asp")  
  5. else   
  6. cat_name=temp("name")   
  7. end if   
  8. set temp=nothing   
  9. '上面的是数据ID 的检测,下面则是正式的查询  
  10. sql = "SELECT ID T_ID, NAME FROM Category where ID="&ID&" ORDER BY xh asc" 
  11. rs.open sql,conn,1,1  



  四,我自己常用的数据过滤脚本

  1. id=replace(id,"'""")   
  2. If len( request("id"))>8 then ‘ 为什么取长度上面程序中已经说明   
  3. response.write "<script language=""****"">"   
  4. response.write "parent.alert('老大,你说吧,你想干什么?..');"   
  5. response.write "history.back();"   
  6. response.write "</script>"   
  7. response.end   
  8. else   
  9. If request("id")<>"" then ‘取不为空则是为了防止一些程序页中会出现空值情况,如果不在这里做判断,程序会校验出错.   
  10. If IsNumeric(request("id"))=False then ' response.write "<script language=""****"">"   
  11. response.write "parent.alert('错误的数据编号类型\n\n请返回校验');"   
  12. response.write "history.back();"   
  13. response.write "</script>"   
  14. response.end   
  15. end if   
  16. end if   
  17. end if 



 
程序体(8) 

  由于我个人的编程习惯,我喜欢将所有的数据检验程序全部保留到整站的公用程序中,比如:conn.asp啦,只需要写一次就可以修复全站的问题. 

  说到这里,我提一点关于攻击的问题,就是跑用户密码或者是用户名,一般常用的就是 

....../show.asp?id=1 and 0<>(select count(*) from admin where id=3 and left(username,1)='a') 

  这样去一个一个尝试,当然我们不能在这里提什么Perl程序去跑密码,程序是别人写,要自己知道原理.这里我只是想给个比较方便的办法就是取ASC码范围.这个要比单独跑要快很多.不论是是字母,数字,汉字,特殊字符,他们总会有对应的ASC码,用以下办法: 

....../show.asp?id=1 and 0<>(select count(*) from admin where id=3 and asc(right(left(username e,3),1)) between 1 and 10000) 剩下的就随你了,一般的从97到122就可以啦,字母嘛,很快D.呵呵,有人想用mid 函数当然也是不错 asc(mid(username,2,1)) between 1 and 10000 也成. 

  如何更加有效的防止SQL注入攻击?我们将在下面的文章中具体提到! 

防范远程注入攻击 

  这类攻击在以前应该是比较常见的攻击方式,比如POST攻击,攻击者可以随便的改变要提交的数据值已达到攻击目的.又如:COOKIES 的伪造,这一点更值得引起程序编写者或站长的注意,不要使用COOKIES来做为用户验证的方式,否则你和把钥匙留给贼是同一个道理. 

  比如: 

  1. If trim(Request. cookies ("uname"))="fqy" and Request.cookies("upwd")="fqy#e3i5.com" then   
  2.  
  3. ........more.........   
  4.  
  5. End if  


  我想各位站长或者是喜好写程序的朋友千万别出这类错误,真的是不可饶恕.伪造COOKIES 都多少年了,你还用这样的就不能怪别人跑你的密码.涉及到用户密码或者是用户登陆时,你最好使用session 它才是最安全的.如果要使用COOKIES就在你的COOKIES上多加一个信息,SessionID,它的随机值是64位的,要猜解它,不可能.例: 

  1. if not (rs.BOF or rs.eof) then   
  2.  
  3. login="true"   
  4.  
  5. Session("username"&sessionID) = Username   
  6.  
  7. Session("password"& sessionID) = Password   
  8.  
  9. 'Response.cookies("username")= Username   
  10.  
  11. 'Response.cookies("Password")= Password  



  下面我们来谈谈如何防范远程注入攻击,一般的攻击都是将单表提交文件拖到本地,将Form ACTION="chk.asp" 指向你服务器中处理数据的文件即可.如果你全部的数据过滤都在单表页上,那么恭喜你,你将已经被脚本攻击了. 

  怎么才能制止这样的远程攻击?好办,请看代码如下: 程序体(9) 

  1. <%   
  2. server_v1=Cstr(Request.ServerVariables("HTTP_REFERER"))   
  3. server_v2=Cstr(Request.ServerVariables("SERVER_NAME"))   
  4. if mid(server_v1,8,len(server_v2))<>server_v2 then   
  5.     response.write "<br><br><center><table border=1 cellpadding=20 bordercolor=black bgcolor=#EEEEEE width=450>"   
  6.     response.write "<tr><td style=font:9pt Verdana>"   
  7.     response.write "你提交的路径有误,禁止从站点外部提交数据请不要乱该参数!"   
  8.     response.write "</td></tr></table></center>"   
  9.     response.end   
  10. end if   
  11. %>  



  '个人感觉上面的代码过滤不是很好,有一些外部提交竟然还能堂堂正正的进来,于是再写一个. 
  '这个是过滤效果很好,建议使用. 

  1. if instr(request.servervariables("http_referer"),"http://"&request.servervariables("host") )<1 then   
  2.   response.write "处理 URL 时服务器上出错 "   
  3.   response.end   
  4. end if  


程序体(9) 

  本以为这样就万事大吉了,在表格页上加一些限制,比如maxlength啦,等等..但天公就是那么不作美,你越怕什么他越来什么.你别忘了,攻击者可以突破sql注入攻击时输入框长度的限制.写一个SOCKET程序改变HTTP_REFERER?我不会。网上发表了这样一篇文章:

------------len.reg----------------- 

  1. Windows Registry Editor Version 5.00   
  2.  
  3. [HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\扩展(&E)]   
  4. @="C:\Documents and Settings\Administrator\桌面\len.htm"   
  5. "contexts"=dword:00000004  

-----------end---------------------- 

-----------len.htm------------------ 
  1. <script language=vbs>   
  2. set srcevent = external.menuarguments.event   
  3. set doc=external.menuarguments.document   
  4. set ele=doc.elementfrompoint( srcevent.clientx, srcevent.clienty )   
  5. if ele.type ="text" or ele.type="password" then   
  6. ele.maxlength=200   
  7. ele.size=200   
  8. end if  
  9. </script>  

----------end----------------------- 


  用法:先把len.reg导入注册表(注意文件路径) 
  然后把len.htm拷到注册表中指定的地方. 
  打开网页,光标放在要改变长度的输入框上点右键,看多了一个叫扩展的选项了吧 
  单击搞定! 后记:同样的也就可以对付那些限制输入内容的脚本了. 

  怎么办?我们的限制被饶过了,所有的努力都白费了?不,举起你de键盘,说不。让我们继续回到脚本字符的过滤吧,他们所进行的注入无非就是进行脚本攻击。我们把所有的精力全都用到ACTION以后的页面吧,在chk.asp页中,我们将非法的字符全部过滤掉,结果如何?我们只在前面虚晃一枪,叫他们去改注册表吧,当他们改完才会发现,他们所做的都是那么的徒劳。

程序体(8) 

  由于我个人的编程习惯,我喜欢将所有的数据检验程序全部保留到整站的公用程序中,比如:conn.asp啦,只需要写一次就可以修复全站的问题. 

  说到这里,我提一点关于攻击的问题,就是跑用户密码或者是用户名,一般常用的就是 

  1. ....../show.asp?id=1 and 0<>(select count(*) from admin where id=3 and left(username,1)='a')   


  这样去一个一个尝试,当然我们不能在这里提什么Perl程序去跑密码,程序是别人写,要自己知道原理.这里我只是想给个比较方便的办法就是取ASC码范围.这个要比单独跑要快很多.不论是是字母,数字,汉字,特殊字符,他们总会有对应的ASC码,用以下办法: 

  1. ....../show.asp?id=1 and 0<>(select count(*) from admin where id=3 and asc(right(left(username   
  2. e,3),1)) between 1 and 10000)  

剩下的就随你了,一般的从97到122就可以啦,字母嘛,很快D.呵呵,有人想用mid 函数当然也是不错 asc(mid(username,2,1)) between 1 and 10000 也成. 

  如何更加有效的防止SQL注入攻击?我们将在下面的文章中具体提到! 

防范远程注入攻击 

  这类攻击在以前应该是比较常见的攻击方式,比如POST攻击,攻击者可以随便的改变要提交的数据值已达到攻击目的.又如:COOKIES 的伪造,这一点更值得引起程序编写者或站长的注意,不要使用COOKIES来做为用户验证的方式,否则你和把钥匙留给贼是同一个道理. 

  比如: 

  1. If trim(Request. cookies ("uname"))="fqy" and Request.cookies("upwd")="fqy#e3i5.com" then   
  2. ........more.........   
  3. End if 

 
  我想各位站长或者是喜好写程序的朋友千万别出这类错误,真的是不可饶恕.伪造COOKIES 都多少年了,你还用这样的就不能怪别人跑你的密码.涉及到用户密码或者是用户登陆时,你最好使用session 它才是最安全的.如果要使用COOKIES就在你的COOKIES上多加一个信息,SessionID,它的随机值是64位的,要猜解它,不可能.例: 

  1. if not (rs.BOF or rs.eof) then   
  2. login="true"   
  3. Session("username"&sessionID) = Username   
  4. Session("password"& sessionID) = Password   
  5. 'Response.cookies("username")= Username   
  6. 'Response.cookies("Password")= Password  



  下面我们来谈谈如何防范远程注入攻击,一般的攻击都是将单表提交文件拖到本地,将Form ACTION="chk.asp" 指向你服务器中处理数据的文件即可.如果你全部的数据过滤都在单表页上,那么恭喜你,你将已经被脚本攻击了. 

  怎么才能制止这样的远程攻击?好办,请看代码如下: 程序体(9) 

  1. <%   
  2. server_v1=Cstr(Request.ServerVariables("HTTP_REFERER"))   
  3. server_v2=Cstr(Request.ServerVariables("SERVER_NAME"))   
  4. if mid(server_v1,8,len(server_v2))<>server_v2 then   
  5.       response.write "<br><br><center><table border=1 cellpadding=20 bordercolor=black bgcolor=#EEEEEE width=450>"   
  6.      response.write "<tr><td style=font:9pt Verdana>"   
  7.      response.write "你提交的路径有误,禁止从站点外部提交数据请不要乱该参数!"   
  8.      response.write "</td></tr></table></center>"   
  9.      response.end   
  10. end if   
  11. %>   
  12.  
  13. '个人感觉上面的代码过滤不是很好,有一些外部提交竟然还能堂堂正正的进来,于是再写一个. 这个是过滤效果很好,建议使用.   
  14.  
  15.   if instr(request.servervariables("http_referer"),"http://"&request.servervariables("host") )<1 then   
  16.  
  17.   response.write "处理 URL 时服务器上出错。<br>如果您是在用任何手段攻击服务器,那你应该庆幸,你的所有操作已经被服务器记录,我们会第一时间通知公安局与国家安全部门来调查你的IP. "   
  18.  
  19.   response.end   
  20.  
  21.   end if  



程序体(9) 

  本以为这样就万事大吉了,在表格页上加一些限制,比如maxlength啦,等等..但天公就是那么不作美,你越怕什么他越来什么.你别忘了,攻击者可以突破sql注入攻击时输入框长度的限制.写一个SOCKET程序改变HTTP_REFERER?我不会。网上发表了这样一篇文章: 

------------len.reg----------------- 
  1. Windows Registry Editor Version 5.00   
  2.  
  3.  
  4. [HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\扩展(&E)]@="C:\Documents and Settings\Administrator\桌面\len.htm" "contexts"=dword:00000004  

-----------end---------------------- 
-----------len.htm------------------ 
  1. <script language=vbs>   
  2. set srcevent = external.menuarguments.event   
  3. set doc=external.menuarguments.document   
  4. set ele=doc.elementfrompoint( srcevent.clientx, srcevent.clienty )   
  5. if ele.type ="text" or ele.type="password" then   
  6. ele.maxlength=200   
  7. ele.size=200   
  8. end if   
  9. </script>  

----------end----------------------- 

  用法:先把len.reg导入注册表(注意文件路径) 

  然后把len.htm拷到注册表中指定的地方. 

  打开网页,光标放在要改变长度的输入框上点右键,看多了一个叫扩展的选项了吧 

  单击搞定! 后记:同样的也就可以对付那些限制输入内容的脚本了. 

  怎么办?我们的限制被饶过了,所有的努力都白费了?不,举起你de键盘,说不。让我们继续回到脚本字符的过滤吧,他们所进行的注入无非就是进行脚本攻击。我们把所有的精力全都用到ACTION以后的页面吧,在chk.asp页中,我们将非法的字符全部过滤掉,结果如何?我们只在前面虚晃一枪,叫他们去改注册表吧,当他们改完才会发现,他们所做的都是那么的徒劳。

ASP木马 

  已经讲到这里了,再提醒各位论坛站长一句,小心你们的文件上传:为什么论坛程序被攻破后主机也随之被攻击者占据。原因就在......对!ASP木马!一个绝对可恶的东西。病毒么?非也.把个文件随便放到你论坛的程序中,您老找去吧。不吐血才怪哦。如何才能防止ASP木马被上传到服务器呢?方法很简单,如果你的论坛支持文件上传,请设定好你要上传的文件格式,我不赞成使用可更改的文件格式,直接从程序上锁定,只有图象文件格式,和压缩文件就完全可以,多给自己留点方便也就多给攻击者留点方便。怎么判断格式,我这里收集了一个,也改出了一个,大家可以看一下: 程序体(10) 
  1. '判断文件类型是否合格   
  2. Private Function CheckFileExt (fileEXT)   
  3.     dim Forumupload  
  4.     Forumupload="gif,jpg,bmp,jpeg"   
  5.     Forumupload=split(Forumupload,",")   
  6.     for i=0 to ubound(Forumupload)   
  7.         if lcase(fileEXT)=lcase(trim(Forumupload(i))) then   
  8.             CheckFileExt=true   
  9.             exit Function   
  10.         else   
  11.             CheckFileExt=false   
  12.         end if   
  13.     next   
  14. End Function   
  15.  
  16. '验证文件内容的合法性   
  17. set MyFile = server.CreateObject ("Scripting.FileSystemObject")   
  18. set MyText = MyFile.OpenTextFile (sFile, 1) ' 读取文本文件   
  19. sTextAll = lcase(MyText.ReadAll): MyText.close   
  20.  
  21. '判断用户文件中的危险操作   
  22.  
  23. sStr ="8|.getfolder|.createfolder|.deletefolder|.createdirectory|.deletedirectory"   
  24. sStr = sStr & "|.saveas|wscript.shell|script.encode" 
  25. sNoString = split(sStr,"|")   
  26. for i = 1 to sNoString(0)   
  27.     if instr(sTextAll, sNoString(i)) <> 0 then   
  28.         sFile = Upl.Path & sFileSave: fs.DeleteFile sFile   
  29.         Response.write "<center><br><big>"& sFileSave &"文件中含有与操作目录等有关的命令"&_   
  30.         "<br><font color=red>"& mid(sNoString(i),2) &"</font>,为了安全原因,<b>不能上传。<b>"&_   
  31.         "</big></center></html>"   
  32.         Response.end   
  33.     end if   
  34. next 


程序体(10) 

  把他们加到你的上传程序里做一次验证,那么你的上传程序安全性将会大大提高. 

  什么?你还不放心?拿出杀手锏,请你的虚拟主机服务商来帮忙吧。登陆到服务器,将PROG ID 中的"shell.application"项和"shell.application.1"项改名或删除。再将"WSCRIPT.SHELL"项和"WSCRIPT.SHELL.1"这两项都要改名或删除。呵呵,我可大胆的说,国内可能近半以上的虚拟主机都没改过。只能庆幸你们的用户很合作,否则......我删,我删,我删删删...... 

小结 

  如何更好的达到防范SQL Injection的攻击?这里我个人给推荐几个办法,第一,免费程序不要真的就免费用,既然你可以共享原码,那么攻击者一样可以分析代码。如果有能力的站长最好还是更改一下数据库表名,字段名,只修改关键的admin, username, password就可以了,比如forum_upasswd 这样的字段名谁能猜到?如果你猜到了,最好赶快去买彩票吧,特等奖不是你还会有谁呢?另外,一般站点的关键就在于管理员的密码,很好的保护好你的管理员密码那是至关重要的,至少10位的数字字母组合。另外加上现在大多数站点程序都会使用MD5来加密用户密码,加上你密码的强壮性,那样你站点的安全性就大大的提高了。即使出现了SQL Injection漏洞,攻击者也不可能马上拿下你的站点。

本日志由 flyinweb 于 2009-06-17 22:19:53 发表到 技术文摘 中,目前已经被浏览 128 次,评论 0 次;

作者添加了以下标签: 脚本攻击防范

      通过本篇内容的学习,你可以全面掌握双绞线网线和细同轴电缆网线的制作方法。特别是双绞线网线的制作,因为这类网络目前应用最广,还要注意不同用途的双绞线网线制作方法(如直连线线和交叉线)。

一、双绞线网线的制作

  双绞线网线的制作其实非常简单,就是把双绞线的4对8芯网线按一定规则插入到水晶头中,所以这类网线的制作所需材料仅需双绞线和水晶头;所需工具也较简单,通常仅需一把专用压线钳即可,这在上一篇已作详细介绍,在此就不再赘述了。双绞线网线的制作其实就是网线水晶头的制作。

  这类网线制作的难点就是不同用途的网线跳线规则不一样,下面先来看最基本的直通五类线(不用跳线)的制作方法,其它类型网线的制作方法类似,不同的只是跳线方法不一样而已。

1. 直通RJ-45接头的制作

  为了方便读者理解,下面以Step-By-Step方式一步步向大家介绍这类网线的制作方法,后面的章节及内容也尽量按这一方式进行。

  第1步:用双绞线网线钳(当然也可以用其它剪线工具)把五类双绞线的一端剪齐(最好先剪一段符合布线长度要求的网线),然后把剪齐的一端插入到网线钳用于剥线的缺口中,注意网线不能弯,直插进去,直到顶住网线钳后面的挡位,稍微握紧压线钳慢慢旋转一圈(无需担心会损坏网线里面芯线的包皮,因为剥线的两刀片之间留有一定距离,这距离通常就是里面4对芯线的直径),让刀口划开双绞线的保护胶皮,拔下胶皮。如图1所示。当然也可使用专门的剥线工具来剥皮线。

  【小提示】网线钳挡位离剥线刀口长度通常恰好为水晶头长度,这样可以有效避免剥线过长或过短。剥线过长一则不美观,另一方面因网线不能被水晶头卡住,容易松动;剥线过短,因有包皮存在,太厚,不能完全插到水晶头底部,造成水晶头插针不能与网线芯线完好接触,当然也不能制作成功了。


按此在新窗口打开图片
图1

  第2步:剥除外包皮后即可见到双绞线网线的4对8条芯线,并且可以看到每对的颜色都不同。每对缠绕的两根芯线是由一种染有相应颜色的芯线加上一条只染有少许相应颜色的白色相间芯线组成。四条全色芯线的颜色为:棕色、橙色、绿色、蓝色。

  先把4对芯线一字并排排列,然后再把每对芯线分开(此时注意不跨线排列,也就是说每对芯线都相邻排列),并按统一的排列顺序(如左边统一为主颜色芯线,右边统一为相应颜色的花白芯线)排列。注意每条芯线都要拉直,并且要相互分开并列排列,不能重叠。然后用网线钳垂直于芯线排列方向剪齐(不要剪太长,只需剪齐即可),如图2所示。自左至右编号的顺序我们定为“1.2.3.4.5.6.7.8”。


按此在新窗口打开图片
图2


  第3步:左手水平握住水晶头(塑料扣的一面朝下,开口朝右),然后把剪齐、并列排列的8条芯线对准水晶头开口并排插入水晶头中,注意一定要使各条芯线都插到水晶头的底部,不能弯曲(因为水晶头是透明的,所以可以从水晶头有卡位的一面可以清楚地看到每条芯线所插入的位置)。

  第4步:确认所有芯线都插到水晶头底部后,即可将插入网线的水晶头直接放入网线钳压线缺口中,如图3所示。因缺口结构与水晶头结构一样,一定要正确放入才能使后面压下网线钳手柄时所压位置正确。水晶头放好后即可压下网线钳手柄,一定要使劲,使水晶头的插针都能插入到网线芯线之中,与之接触良好。然后再用手轻轻拉一下网线与水晶头,看是否压紧,最好多压一次,最重要的是要注意所压位置一定要正确。


按此在新窗口打开图片
图3

  至此,这个RJ-45头就压接好了。按照相同的方法制作双绞线的另一端水晶头,要注意的是芯线排列顺序一定要与另一端的顺序完全一样,这样整条网线的制作就算完成了。

  两端都做好水晶头后即可用网线测试仪进行测试,如果测试仪上8个指示灯都依次为绿色闪过,证明网线制作成功。如果出现任何一个灯为红灯或黄灯,都证明存在断路或者接触不良现象,此时最好先对两端水晶头再用网线钳压一次,再测,如果故障依旧,再检查一下两端芯线的排列顺序是否一样,如果不一样,随剪掉一端重新按另一端芯线排列顺序制做水晶头。如果芯线顺序一样,但测试仪在重夺后仍显示红色灯或黄色灯,则表明其中肯定存在对应芯线接触不好。此时没办法了,只好先剪掉一端按另一端芯线顺序重做一个水晶头了,再测,如果故障消失,则不必重做另一端水晶头,否则还得把原来的另一端水晶头也剪掉重做。直到测试全为绿色指示灯闪过为止。

  如图4所示的是一条两端都制作好水晶头的网线,当然这是一条由专业公司用机器制作的双绞线网线。


按此在新窗口打开图片
图4

二、网线的跳线规则

  以上我们所介绍的是最简单的直通网线制作方法,这类网线通常只用于从集线器(交换机)、墙上信息模块到工作站的连接,并且并不是一种最理想的制作方法。主要原因是这种网线制作没有考虑到相互芯线之间串扰,在高速网络(如100Mbps以上网络)中影响更大。为此IEEE标准委员会制定了几种特定用途的跳线方法,下面分别介绍。

  双绞线在网络中的接线标准有以下几种:

  (1)一一对应接法。即双绞线的两端芯线要一一对应,即如果一端的第1脚为绿色,另一端的第1脚也必须为绿色的芯线,这样做出来的双绞线通常称之为“直连线”。但要注意的是4个芯线对通常不分开,即芯线对的两条芯线通常为相邻排列。这种网线一般是用在集线器或交换机与计算机之间的连接。

  (2)1-3、2-6交叉接法。虽然双绞线有4对8条芯线,但实际上在网络中只用到了其中的4条,即水晶头的第1、第2和第3、第6脚,它们分别起着收、发信号的作用。这种交叉网线的芯线排列规则是:网线一端的第1脚连另一端的第3脚,网线一端的第2脚连另一头的第6脚,其他脚一一对应即可。这种排列做出来的通常称之为“交叉线”,水晶头的针脚排编号规则如图5所示。


按此在新窗口打开图片
图5

  例如,当线的一端从左到右的芯线顺序依次为:白绿、绿、白橙、蓝、白蓝、橙、白棕、棕时,另一端从左到右的芯线顺序则应当依次为:白橙、橙、白绿、蓝、白蓝、绿、白棕、棕。当线的一端从左到右的芯线顺序依次为:白橙、橙、白绿、蓝、白蓝、绿、白棕、棕时,另一端从左到右的芯线顺序则应当依次为:白绿、绿、白橙、蓝、白蓝、橙、白棕、棕。这种网线一般用在集线器(交换机)的级连、服务器与集线器(交换机)的连接、对等网计算机的直接连接等情况下。


  (3)100M接法。这是一种最常用的网线制作规则。所谓100M接法,是指它能满足100M带宽的通讯速率。它的接法虽然也是一一对应,但每一脚的颜色是固定的,具体是:第1脚——橙白、第2脚——橙色、第3脚——绿白、第4脚——蓝色、第5脚——蓝白、第6脚——绿色、第7脚——棕白、第8脚——棕色,从中可以看出,网线的4对芯线并不全都是相邻排列,第3脚、第4脚、第5脚和第6脚包括2对芯线,但是顺序已错乱。其实这种跳线规则与下面将要介绍的信息模块端接方式B是完全一样的,当然我们也可以按信息模块端接方式A来重新排列芯线顺序,那就是:第1脚——绿白、第2脚——绿色、第3脚——橙白、第4脚——蓝色、第5脚——蓝白、第6脚——橙色、第7脚——棕白、第8脚——棕色。只不过所选方式要与下面所介绍的信息模块端接方式一致,否则所做的网线很可能就不通了。

  这种接线方法也是应用于集线器(交换机)与工作站计算机之间的连接,也就是“直连线”所应用的范围。

三、信息模块的跳线规则

  上面介绍了双绞线网线的跳线规则,因为在企业网络中通常不是直接拿网线的水晶头插到集线器或交换机上,而是先把来自集线器或交换机的网线与信息模块连在一起埋在墙上,所以这就涉及到信息模块芯线排列顺序问题,也即跳线规则。

  交换机或集线器到网络模块之间的网线接线方法是按市线EIA/TIA 568标准进行,但因其有A、 B两种端接方式(IBM公司的产品通常用端接方式A,AAT&T公司的产品通常用端接方式B,端接方式的主要区别在下述的T568A模块和T568B模块的内部固定联线方式)。两种端接方式所对应的接线顺序如下表1所示: 

  虽然从集线器或交换机到工作站的网线可以是不经任何跳线的直连线,但为了保证网络的高性能,最好同一网络采取同一种端接方式,包括信息模块和网线水晶头。水晶头和信息模块各引脚的对应顺序如图6的左、右图所示。因为在信息模块各线槽中都有相应的颜色标注,只需要选择相应的端接方式,然后按模块上的颜色标注把相应的芯线卡入相应的线槽中即可,不必去记表1所示的颜色顺序。


按此在新窗口打开图片
图6

  【说明】图7中的1、2、3、4、5、6、7、8顺序不是随便定的,它是在把水晶头有金属弹片的一面向上,塑料扣片向下,插入RJ-45座的一头向外,从左到右依次为1、2、3、4、5、6、7、8脚。而信息模块的引脚顺序如图6右图有明确的标注,在此就不再另叙了。

四、信息模块的制作

  了解了以上信息模块的跳线规则后,我们就可以利用在上一篇所介绍的材料和打线工具制作信息模块了。具体的制作步骤如下:

  第1步:用剥线工具在离双绞线一端130mm长度左右把双绞线的外包皮剥去。如图7所示。

图7

  第2步:如果有信息模块打线保护装置,则可将信息模块嵌入在保护装置上,如图8所示。

按此在新窗口打开图片
图8

  第3步:把剥开的4对双绞线芯线分开,但为了便于区分,此时最好不要拆开各芯线线对,只是在卡相应芯线时才拆开。按照信息模块上所指示的芯线颜色线序,两手平拉上一小段对应的芯线,稍稍用力将导线一一置入相应的线槽内,如图9所示。

按此在新窗口打开图片
图9

  第4步:全部芯线都嵌入好后即可用打线钳再一根根把芯线进一步压入线槽中(也可在第3步操作中完成一根即用打线钳压入一根,但效率低些),确保接触良好,如图10所示。然后剪掉模块外多余的线。

按此在新窗口打开图片
图10

  【小提示】通常情况下,信息模块上会同时标记有TIA 568-A和TIA 568-B两种芯线颜色线序,应当根据布线设计时的规定,与其他连接和设备采用相同的线序。

  第5步:将信息模块的塑料防尘片沿缺口穿入双绞线,并固定于信息模块上,如图11所示,压紧后即可完成模块的制作全过程。然后再把制作好的信息模块放入信息插座中。


按此在新窗口打开图片
图11

  信息模块制作好后当然也可以测试一下连接是否良好,此时可用万用表进行测量。把万用表的档位打在x10的电阻档,把万用珠的一个表针与网线的另一端相应芯线接触,另一万用表笔接触信息模块上卡入相应颜色芯线的卡线槽边缘(注意不是接触芯线),如果阻值很小,则证明信息模块连接良好,否则再用打线钳压一下相应芯线,直到通畅为止。


五、细同轴电缆网线的制作

  在20台以内的小型局域网中,目前还有一部分企业网络仍采用细同轴电缆连接,所以在此有必要对这种网线的制作进行详细介绍。具体步骤如下:

  第1步:用同轴电缆专用剥线钳将细缆外皮剥除,露出芯线长约3mm,白色保护层约4mm,屏蔽层约8mm,如图12所示。

按此在新窗口打开图片
图12

  第2步,将探针套入网线的芯线上,一直要插到底,然后再把套上探针的芯线插入到同轴电缆专用压线钳中间的探针小圆孔中,压紧,使探针与网线芯线紧连,如图13所示。


按此在新窗口打开图片
图13

  第3步:将BNC连接器金属套环套入压好镀金探针的细同轴电缆,然后再将网线连接探针的一端从BNC接头小的一端插入(也要插到底),如图14所示。


按此在新窗口打开图片
图14

  第4步:把套在网线的金属套环推到网线与BNC连接器连接处,再把网线钳的六角缺口卡在确定好的套环位置上,紧握网线钳手柄,紧压,使网线与BNC连接器通过BNC金属套环紧紧连接起来,如图15所示。压好后的金属套环呈六角形。


按此在新窗口打开图片
图15

  至此,细缆的一端制作完成,然后,接照上面的步骤制作另一端的BNC接头。

  细缆制作完毕以后,应当使用上述的网线测试仪进行连通性测试。如果没有网线测试仪,也可以普通的万用电表进行测试,测量时需将万用表挡位打在x10电阻档,只要用表笔的两端分别接触探针或者连接器内壁,如果电阻很小,证明网线的制作是成功的。如果任一方测试阻值较大(表针不摆动或者摆动非常小),证明网线制作不成功,连接阻抗过高,需重新制作。

  好了,双绞线网线和同轴电缆网线的制作方法就介绍至此,相信各位已经掌握了相应的制作方法。后面的几篇中将要介绍网络组建的下一个重要方面,即网卡的有关方面,包括网卡的基础知识及配置,在这其中将涉及网络组建的最重要方面,即通信协议的选择与配置、IP地址的分配等各方面,请各位留意!

本日志由 flyinweb 于 2009-06-17 22:04:50 发表到 网络文摘 中,目前已经被浏览 155 次,评论 0 次;

作者添加了以下标签: 制作网线

ASP.Net种使用C#, 向CoreDB.myBBS表中插入记录值(Title, Content)【文章的标题和内容】,由于Content, Title中可能包含单引号,直接使用sql的insert命令会报错,对此有两种处理方法,一种将单引号替换成两个单引号,第2种方法是使用存储过程。

表myBBS的格式定义如下:

  1. CREATE TABLE [dbo].[myBBS] (  
  2.  [ID] [bigint] IDENTITY (1, 1) NOT NULL ,  
  3.  [Title] [char] (160) COLLATE Chinese_PRC_CI_AS NULL ,  
  4.  [Author] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,  
  5.  [Date_of_Created] [datetime] NULL ,  
  6.  [Abstract] [char] (480) COLLATE Chinese_PRC_CI_AS NULL ,  
  7.  [Content] [ntext] COLLATE Chinese_PRC_CI_AS NOT NULL   
  8. ON [PRIMARY] TEXTIMAGE_ON [PRIMARY


1、将单引号用两个单引号替换:
   
  1. SqlConnection coreDB=new SqlConnection();  
  2.    coreDB.ConnectionString= "workstation id=\"GQA-ERIC-LV\";packet size=4096;integrated security=SSPI;" +  
  3.     "data source=\"gqa-eric-lv\";persist security info=False;initial catalog=CoreDB";  
  4.      
  5.    //单引号用"''"替换,以插入'到SQL Server中;  
  6.    string Title=TextBox1.Text.Replace("'","''");  
  7.    string Content=TextBox2.Text.Replace("'","''");  
  8.    if(Title.Trim()==""||Content.Trim()=="")return;  
  9.    string insertCMD =@"insert into myBBS (Title,Content) Values('"+ Title +  "','"  +Content+"')";  
  10.  
  11.    SqlCommand myCommand = new SqlCommand(insertCMD,coreDB);  
  12.    coreDB.Open();  
  13.    SqlDataReader myReader = myCommand.ExecuteReader();  
  14.    myReader.Close();  
  15.    coreDB.Close(); 

2、使用存储过程来插入

1) 创建存储过程:
  1. Create proc InsertMyBBSProc(@Title char(160), @Author char(20), @Content ntext)  
  2. AS   
  3. Insert into myBBS(Title,Author,Content) Values(@Title, @Author, @Content) 


2) 查询分析器中测试存储过程:

  1. declare @title char(160)  
  2. declare @author char(20)  
  3. declare @content char(600)  
  4. set @title='test title 3' 
  5. set @author='david euler 3' 
  6. set @content='it is the content 3' 
  7. exec InsertMyBBSProc @title, @author, @content 


3) C#中通过SqlCommand执行存储过程:

  1. SqlConnection coreDB=new SqlConnection();  
  2.    coreDB.ConnectionString= "workstation id=\"GQA-ERIC-LV\";packet size=4096;integrated security=SSPI;" +  
  3.     "data source=\"gqa-eric-lv\";persist security info=False;initial catalog=CoreDB";  
  4.                  
  5.    string Title=TextBox1.Text;  
  6.    string Content=TextBox2.Text;  
  7.  
  8.    if(Title.Trim()==""||Content.Trim()=="")return;  
  9.      
  10.    //InsertMyBBSProc是向MyBBS中插入数据的Procedure:  
  11.    SqlCommand insertCMD = new SqlCommand("InsertMyBBSProc",coreDB);  
  12.  
  13.    insertCMD.CommandType=CommandType.StoredProcedure;//命令类型为存储过程;下面定义参数对象:  
  14.    SqlParameter prm1=new SqlParameter("@Title",  SqlDbType.Char,160);  
  15.    SqlParameter prm2=new SqlParameter("@Author", SqlDbType.Char,20);  
  16.    SqlParameter prm3=new SqlParameter("@Content",SqlDbType.NText,1073741823);  
  17.    prm1.Direction=ParameterDirection.Input;  
  18.    prm2.Direction=ParameterDirection.Input;  
  19.    prm3.Direction=ParameterDirection.Input;  
  20.    //为insertCMD添加SQL参数:  
  21.    insertCMD.Parameters.Add(prm1);  
  22.    insertCMD.Parameters.Add(prm2);  
  23.    insertCMD.Parameters.Add(prm3);  
  24.    //为SQL参数赋值:  
  25.    prm1.Value=Title;  
  26.    prm2.Value="David Euler";  
  27.    prm3.Value=Content;  
  28.  
  29.    coreDB.Open();  
  30.    int recordsAffected=insertCMD.ExecuteNonQuery();  
  31.    if(recordsAffected==1)Response.Write("<script>alert('""插入成功" +"');</script>");  
  32.    coreDB.Close(); 


转贴:http://dev.csdn.net/article/51/51067.shtm

本日志由 flyinweb 于 2009-06-17 21:53:45 发表到 DotNet专栏 中,目前已经被浏览 121 次,评论 0 次;

作者添加了以下标签: C#插入记录单引号

概要
本文介绍如何 telnet 到运行简单邮件传输协议 (SMTP) 服务的计算机上的端口 25,以解决 SMTP 通信问题。默认情况下,SMTP 侦听端口 25。

您可以根据您遇到的问题类型选用以下适当的疑难解答步骤。例如,如果您在两台 Microsoft Exchange 2000 Server 服务器之间通过 SMTP 发送邮件时遇到问题,则可以通过在发送服务器上使用 Telnet 连接到目标服务器上的端口 25 来测试 SMTP 连接。或者,如果您在接收来自 Internet 的 SMTP 邮件时遇到问题,则可以按照本文中列出的步骤,测试驻留在 Internet 上但不在您的网络上的主机与您的 SMTP 服务器的连接。

更多信息
Microsoft 产品线中有 SMTP 的多个不同变体。Microsoft Windows 产品线的 SMTP 服务包含在 Internet 信息服务 (IIS) 中,而在 Microsoft Windows NT Server 4.0 中,SMTP 服务包含在 Option Pack 中。在较新版本的 Windows 中,IIS 已被集成到操作系统中,并且您可以使用“控制面板”中的“添加或删除程序”添加 IIS。此外,Exchange 2000 和 Microsoft Exchange Server 2003 都使用 IIS 中的现有 SMTP 服务及其他功能。Microsoft Exchange Server 版本 4.0、5.0 和 5.5 均包含它们自己的 SMTP 版本,所采用的形式为 Internet Mail Connector (IMC) 或 Internet Mail Service (IMS)。

注意:在 Exchange 5.0 及更高版本中,Internet Mail Connector (IMC) 被重命名为 Internet Mail Service。

在启动 Telnet 会话之前,必须具有要将此测试邮件发送到的目标用户的完整 SMTP 电子邮件地址。该电子邮件地址必须采用以下格式: 
User@Site.Domain.com

您也可以具有运行 SMTP 服务的服务器计算机的完全限定域名 (FQDN) 或 IP 地址(例如,10.120.159.1)。如果服务器在您的组织中,您可能已经拥有这些信息。如果服务器是外部服务器,查找这些信息最简单的方法是使用 Nslookup.exe 以找到包含这些信息的 DNS 记录。 有关 NSlookup 的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章: 
200525 使用 NSlookup.exe

有关如何获取 Internet 邮件交换器记录的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章: 
203204 XFOR:如何获取 Internet 邮件交换器记录

确保运行 SMTP 服务的服务器上已启动 SMTP。要测试 SMTP 是否已启动,您可以运行本文中列出的基本测试,并验证您是否会收到来自远程服务器的 220 消息。这还将验证 SMTP 是否正在运行。

注意: 
有些 Telnet 应用程序要求您打开本地回显功能,以查看键入的命令。要在 Microsoft Telnet 会话中执行此操作,请在命令提示符处键入 set local_echo。 
在 Microsoft Windows XP 中,应键入 set localecho 而不是 set local_echo。
基本测试
按照下列步骤操作,以确保主机和远程 SMTP 服务器能够通信。 如果在您键入以下任一命令之后,收到以下错误信息,则说明 SMTP 服务器因为语法错误或命令错误而无法识别您所键入的内容:
500 Command not recognized
检查该命令并再次键入它,或者验证您是否正在与 Microsoft SMTP 服务器直接通信。

注意:Microsoft Telnet 不允许您使用 Backspace 键。如果在键入时出错,必须按 Enter 键,然后开始键入新的命令。

在以下步骤中,您要从命令行中运行 Telnet。要打开命令行,请单击“开始”,单击“运行”,在“打开”框中键入 cmd,然后单击“确定”。 
您可以通过使用以下格式的 Telnet 命令来启动 Telnet 会话:

注意:在键入每行内容之后按 Enter 键。 
telnet 服务器名端口号

例如,键入: 

  1. telnet mail.contoso.com 25 


注意:您可以将服务器名 替换为您要连接到的 SMTP 服务器的 IP 地址或 FQDN。 记住在键入每个命令之后按 Enter 键。

如果该命令起作用,您将会收到来自 SMTP 服务器的类似以下内容的消息: 

220 site.contoso.com Microsoft Exchange Internet Mail Connector <IMC 的版本号>

注意:由于有许多不同版本的 Microsoft SMTP 或第三方 SMTP 服务器,因此您可能会收到来自接收服务器的不同的消息。不过,您肯定会收到包含服务器的 FQDN 和 SMTP 的版本的 220 消息。此外,所有版本的 Microsoft SMTP 在 220 消息中都包含“Microsoft”一词。 
通过键入以下命令开始通信: 

  1. EHLO test.com 


注意:您可以使用 HELO 命令,但是 EHLO 是扩展 SMTP 动词集中的一个动词,SMTP 的所有当前 Microsoft 实现都支持该动词集。除非您认为扩展 SMTP 动词有问题,否则最好使用 EHLO。 

如果该命令成功,您会收到以下消息: 

250 OK

键入以下命令向接收 SMTP 服务器通知邮件发件人: 

  1. MAIL FROM:Admin@test.com 


注意:该地址可以是您想使用的任何 SMTP 地址,但是最好考虑以下问题: 
有些 SMTP 邮件系统会基于 MAIL FROM:地址筛选邮件,并且会禁止某些 IP 地址连接到 SMTP 邮件系统,或者如果连接 IP 地址与 SMTP 邮件系统所在的域不匹配,它还会禁止该地址向 SMTP 邮件系统发送电子邮件。在本例中,该域是 test.com。 
如果您在发送邮件时没有使用有效的电子邮件地址,您将无法确定在发送邮件时是否有问题,因为未送达报告 (NDR) 无法到达无效的 IP 地址。如果您使用有效的电子邮件地址,您将会收到来自 SMTP 服务器的以下消息: 

250 OK - MAIL FROM Admin@test.com

键入以下命令向接收 SMTP 服务器通知邮件的收件人。

注意:最好始终使用要发送到的域中的有效收件人 SMTP 地址。例如,如果您要发送到 john@domain.com,必须确保域中存在 john@domain.com。否则,您会收到 NDR。 

使用您要发送到的人员的 SMTP 地址键入以下命令: 

  1. RCPT TO:User@Domain.Com 


您会收到以下消息: 

250 OK - Recipient User@ Domain.Com

键入以下命令通知 SMTP 服务器您已准备好发送数据: 

  1. DATA 


您会收到以下消息: 
354 Send data. End with CRLF.CRLF
您现在已可以开始键入邮件的 822/2822 部分。用户将会在他们的收件箱中看到邮件的这一部分。键入以下命令以添加主题行: 

  1. Subject:test message 


按两次 Enter 键。此命令不会显示任何信息。

注意:按两次 Enter 键为了与 Request for Comments (RFC) 822 和 2822 保持一致。它规定 822 命令后面必须跟一个空行。 
键入以下命令以添加邮件正文: 

  1. This is a test message you will not see a response from this command. 


在下一个空行中键入英文句点 (.),然后按 Enter 键。 您会收到以下消息: 

250 OK

键入以下命令关闭连接: 

  1. QUIT 


您会收到以下消息: 

221 closing connection

验证收件人是否收到您发送的消息。如果在应用程序事件日志中出现任何错误事件消息,或者接收邮件时出现问题,请检查主机的配置或通信。
高级测试
除本文前面列出的基本测试步骤外,您还可以使用送达回执对邮件进行双向测试。您可以使用此方法验证 SMTP 服务器是否可以接受入站连接,并且为发件人生成一个送达回执以测试 SMTP 服务器的出站连接。

要为测试邮件请求送达回执,请参见本文“基本测试”一节的第 4 步,以确保提供的信息是可以接收送达回执的有效电子邮件地址。然后在本文“基本测试”一节的第 5 步中,在 Telnet 会话中键入以下命令: 
RCPT TO:User@Site.Domain.Com notify=success,failure

  1. [root@zzy5156 root]# telnet 2mysite.net 25  
  2. Trying 208.16.215.137...  
  3. Connected to 2mysite.net.  
  4. Escape character is '^]'.  
  5. 220 2mysite.net (IMail 8.14 155604-2) NT-ESMTP Server X1  
  6. EHLO zzy.cn  
  7. 250 hello 2mysite.net  
  8. VRFY root@2mysite.net  
  9. 250 ok its for <root@2mysite.net> 
  10. quit  
  11. 221 Goodbye 

本日志由 Admin 于 2009-06-17 14:47:17 发表到 技术文摘 中,目前已经被浏览 162 次,评论 0 次;

作者添加了以下标签: TelnetSMTP

39750/50