6核心/12核心cpu安装SQL Server 2005时报错,提示启动服务失败 解决方法

六核cpu安装SQL Server 2005时报错,提示启动服务失败解决
 
     新买的IBM3650M4的服务器上安装SQL server2005 
       安装到一半时,报”提示:SQL Server 服务无法启动。”错。 
 
一开始以为是操作系统的问题,先重装了一遍,还是不行,后来更换为windows server 2003 r2版的,但是仍然报错,于是重新找了一个windows server 2003版的,但是仍然不行,从软件厂家索取一个操作系统,问题依然存在,于是从google中查找问题的原因(百度了半天找不出来),最终找到如下解决方法: 
 
    是CPU内核的原因 ,因为这个IBM X3650M4的CPU是六核的,十二线程的。 
 
  原因: 
  在安装SQL 2005标准版(不多于四个CPU)和企业版(无限制)时, 
 
  CPU的总核数必须是2的n次方。即核心数为1,2,4,8,16,32,依次类推。 
 
  因服务器核心数为6×2=12,所以不能正常安装。 
      解决办法: 
 
  安装前更改系统应用的核心数。 
 
  开始==>运行==>输入msconfig,打开’系统配置实用程序’, 
  选择’BOOT.INI’—‘高级选项’,勾选’/NUMPROC’数值选择为最大的2的n次方。 
  重新启动后,可正常安装SQL server 2005。 
 
  安装完成后,打全SQL 2005 SP3的补丁。 
 
  然后将’/NUMPROC’去掉勾选。 
 
  重新启动系统后,即可正常使用所有物理核心运行SQL server 2005了。 
 
注:曾经尝试将cpu数量设置成16、8核心,但都不行,最终选择了单核心,最后安装成功。 

Win2003自动登录的方法 图文

第一种方法比较简单,您只需单击“开始|运行”,并在输入框中键入 “control userpasswords2”
2013114144322116
然后取消在“用户账户”管理窗口中清除“要使用本机,用户必须输入密码”复选项的选中状态。(取消选中状态)
2013114144513788
然后按下键盘的“Ctrl+Shift+A
2013114144908226
将会得到一个“自动登录”的设置对话框,您可以按自己的需要设置系统在电脑启动时自动登录使用的用户账户和密码。

另一种方法比较复杂,但可以帮助您完全掌握Windows 2003自动登录的设置方法。

首先单击“开始|运行”,在输入框中键入“regedit”打开注册表编辑器,然后在注册表编辑器左方控制台中依次单击展开“HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/Current Version/Winlogon”,再选择“编辑|添加|字符串值”,在数值名称中键入“AutoAdminLogon”,然后在窗口中的空白位置上点一下,再双击刚新建的字符串“AutoAdminLogon”,在弹出的“编辑字符串”对话框中输入“1”设置系统允许自动登录。再重复以上的操作,创建一个名为“DefaultUserName”的字符串值,编辑字符串为您准备用于自动登录的账户名称。

再新创建一个名为“Defaultpassword”的字符串值,并编辑字符串为您准备用于自动登录的用户账户密码,编辑完并检查无误后,关闭注册表编辑器并重新启动电脑即可自动登录。注意,如果已有“DefaultUserName”,可以不必重新创建,直接更改原有字符串值。如果您的系统工作在局域网环境下,并且在登录到系统上时需要登录域服务器,那么您还需要再添加一个“DefaultDomainName”并编辑字符串为您登录的域名称。

 

iis 7.5 伪静态 设置301转跳

修改web.config文件添加

下面的规则为

把不带www的10isp.com转跳到www.10isp.com

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
	<rewrite>
 	<rules>
#
<rule name="host" stopProcessing="true">
<match url="^(.*)$" />
<conditions logicalGrouping="MatchAny">
<add input="{HTTP_HOST}" pattern="^10isp.com$" />
</conditions>
<action type="Redirect" redirectType="Permanent" url="http://www.10isp.com/{R:0}" />
</rule>
#

	</rules>
	</rewrite>
    </system.webServer>  
</configuration>

 

IIS7.5无法连接Access数据库的解决方案

打开IIS管理器,查看网站的高级属性

1

也可以在这里直接修改使用的应用程序池。强调一下,无论使用哪个应用程序池都是可以成功启用Access的

2

 

返回,点击左边应用程序池节点,查看刚才使用的应用程序池的高级属性(这里是DafaultAppPool)
3
启用32位应用程序选项设为True
4
IIS的设置到此结束,一般到这个地方就没什么问题了。

接下来修改一些文件夹的访问权限
C:\Windows\temp (典型路径,请根据实际安装路径确定)
C:\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp
给上面两个文件夹添加Authenticated Users的完全访问权限
5

如果还不足够,继续给C:\Inetpub\wwwroot\App_Data\添加Authenticated Users的完全访问权限

安装iis或者snmp服务时文件存在依然提示不存在解决办法

安装iis或者snmp服务时文件存在但依然提示不存在

解决办法:

esentutl /g %windir%\Security\Database\Secedit.sdb

如果有报错

1.切换到命令提示符状态。
2.执行

esentutl /k %windir%\Security\Database\Secedit.sdb

esentutl /g %windir%\Security\Database\Secedit.sdb

对secedit.sdb进行检查。
3.手工备份要修复的数据库文件。
4.执行

esentutl /p %windir%\Security\Database\Secedit.sdb

进行修复,系统会弹出Warning提示框:
“You should only run Repair on damaged or corrupted databases.Repair will not apply information in the transaction log files to the database,and may cause information to be lost.Do you wish to proceed?”
单击OK,开始修复。

参考:http://www.jz5u.com/Article/Catalog38/4022.html

 

 

架WSUS服务器 内网自动打补丁

病毒一直是我们网络管理员的天敌,而杀毒软件又总是有滞后性,纵观所有危害性大的病毒,无不一是利用系统漏洞来传播、感染的,而这时候,第一个提供解决方案的,往往是微软自己——系统补丁。个人认为给客户端电脑打全系统补丁是防毒,而杀毒软件是“杀”毒,相对来说,防毒更为重要,将病毒堵在门外,而不是让杀毒软件来亡羊补牢……

如果是小企业,内网只有三五台或者七八台电脑倒还无所谓,自己手动下载并安装补丁,工作量相对来说并不是很大,但如果有几十台电脑怎么办呢?工作量大不说,也不容易记清到底哪台电脑打补丁了,哪台电脑没打补丁,都打了哪些补丁。也许有人提出开启自动更新服务不是可以很好的解决问题吗?微软发布补丁的日子基本上是固定的,这就会引起所有客户端都去微软网站下载补丁的问题,不仅会消耗大量带宽,还容易造成企业网络堵塞。

微软提供的WSUS(Windows Server Update Services)无疑是最佳的解决方案,架设WSUS服务器,好比在企业内网中建立一个微软发布补丁的镜像服务器,这样,企业内所有电脑都从内网升级,每次更新补丁,只需要WSUS服务器到微软网站下载一次即可,所有客户端均从WSUS服务器下载,以内网百Mbps的速率,补丁再多,也能很快更新完毕。

一、架设WSUS服务器的好处

既然架设WSUS服务器,肯定就要准备服务器,无疑是企业另外一笔投资,如果没有很明显的好处,是很难打动企业领导增添不能产生显性价值的服务器的。

第一:补丁更新速度快。因为所有客户端更新补丁时都是从内网服务器上下载,所以速度快是肯定的。

第二:补丁更新时间自定义。Windows自动更新程序会不定时检测微软网站上的补丁发布情况,这就造成了时间不可控性。而架设WSUS服务器后,可以设定补丁更新的时间,服务器端下载完补丁后,可以在设定的时间点向客户端推送补丁。并且WSUS服务器与微软补丁服务器同步补丁时间也可以设定,这样可以保存不在工作时间因同步补丁而占用带宽,影响终端用户使用网络的情况。

第三:补丁全。WSUS服务器会自动与微软补丁服务器同步,因此补丁全,不会造成漏更新某一补丁的情况发生。并且可以自动下载微软全系列的补丁,包括Windows、Office等。

二、WSUS服务器的架设

第一步:安装WSUS。首先从微软网站下载WSUS安装程序,目前最新版本为3.0,双击下载回来的安装程序,自解压完成后,会自动弹出安装向导,单击“下一步”按钮,选择“包括管理控制台和完整服务器安装”项(图1),接下来就按照提示进行相应的设置即可完成安装。

48207ef4724e05b6f3d38553

图1

需要注意的是,安装WSUS3.0,需要安装IIS服务和.net 2.0组件,否则将无法完成安装。另外MMC 3.0控制台程序也需要安装,否则将不能使用WSUS管理UI。

第二步:配置WSUS。在完成WSUS的安装后,安装程序会自动跳转到“WSUS 配置向导”。根据此向导,我们就可以轻松完成WSUS的配置。连续单击“下一步”,直到选择“上游服务器”处,这里选择“从Microsoft Update”进行同步(图2)。

eba382d64de8f94006088b4b

图2

如果是通过代理服务器上网的,接下来还需要“指定代理服务器”,然后依次选择“语言”、“产品”、“分类”以及“同步计划”,可以设置更新补丁的语言类型,微软的产品类型、补丁的类型以及是手动同步补丁还是自动同步补丁(图3)。

31dc0fd11b4695bc562c8453

图3

至此,服务器端WSUS基本上算配置完毕了,在客户端进行一些简单设置即可享受到WSUS的好处了。

 

三、客户端配置

运行“Gpedit.msc”打开组策略编辑器。在组策略编辑器中,依次单击“计算机配置→管理模板→Windows组件→Windows Update”。在右侧双击“配置自动更新”,将自动更新策略设置为“启用”,并设置为“自动下载并计划安装”(图4)。

cdfe227ff5b8606729388a4b

图4

双击“指定Intranet Microsoft更新服务位置”,选择“已启用”项,在“为检测更新设置Intranet夹新服务”下方输入http://WSUS服务器的机器名称或者IP地址(图5)。重新启动计算机机,这时客户端组策略便会刷新,设置便会起作用。

6d579b2f6b9f4f571e30894b

图5

如果网络环境是Active Directory的话,只要在域控制器上设置基于域的组策略对象,就可以一次性实现所有的域用户的客户端设置。如果是非域环境的话,就必须在每个客户端上进行本地组策略设置。当然无论是设置域控制器上的组策略对象还是设置客户端上的本地组策略,目的都是将客户端的自动更新指向我们架设的WSUS服务器上,让客户端自动更新的时候不再连接微软的网站,而是连接内网的WSUS服务器,不过用户还是可以直接登录微软自动更新页面去更新补丁。

域环境客户端设置。在“管理您的服务器”窗口中单击“管理Active Directory中的用户和计算机”,右键单击域名,选择属性,在打开的对话框中切换到组策略标签,新建一个组策略模板并进行编辑,具体的编辑操作同非域环境下客户端的操作完全一样(图6)。

28f1f7d32cb376b0a8ec9a53

图6

四、总结

纵观WSUS服务器的整个架设过程以及客户端的设置过程均不复杂,但实实在在的可以更好的起到“补丁”的作用。特别是对于中、大型企业来说,这样做显得更为有必要。客户端都会自动进行系统补丁的升级,我们在方便、减少工作量的同时,也让整个企业内网的安全性得到了较大提高。

Windows Server 2008更改远程桌面端口需注意的地方

更改远程桌面使用的默认端口

从安全角度考虑,放到公网上的服务器最好将远程桌面的默认端口改成其他的,这样入侵者就不容易通过端口扫描,发现您服务器开启的远程桌面服务,减少受攻击的机会。

以下步骤将会更改服务器的远程桌面的默认端口,并且在高级Windows防火墙创建一个TCP 端口号是4000的入站规则。

步骤:

1. 在Research计算机,点击“开始”à“运行”,输入regedit,点击“确定”。

2. 打开注册表编辑工具,在

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal ServerWinStationsRDP-Tcp,点击PortNumber,再出现的对话框,选择“十进制”,可以看到是3389,改成4000,点击“确定”。

3. 从启系统,在命令提示符下输入netstat –a 查看计算机侦听的端口。可以看到没有3389,多了一个4000端口。

201302220322108471

201302220322111857

4. 点击“开始”à“运行”,输入wf.msc,打开高级Windows防火墙。

5. 当您启用远程桌面,Windows自动将预置的远程桌面入站规则设置成启用状态,双击该规则可以看到端口是3389,且不能改。只能创建自己的入站规则了。

6. 右击入站规则,点击“新规则”,在出现的对话框,选择“端口”,点击“下一步”。

201302220322115263

201302220322118216

7. 选择TCP,选择特定本地端口,输入4000。点击“下一步”。

8. 在操作对话框,选择“允许连接”,点击“下一步”。

201302220322120920

201302220322122855

9. 在配置文件对话框,点击“下一步”。

10. 在名称对话框,输入RDP 4000,点击“完成”。

201302220322125141

201302220322127798

11. 在Vista上使用4000端口连接Research的远程桌面。在远程桌面客户端输入Research:4000,点击“连接”。

12. 可以看到连接时,用的4000端口。

201302220322130453

201302220322134096

用批处理文件删除n天前的文件

公司服务器用来备份数据的硬盘过段时间就会被备份文件占满,弄得我老是要登录到服务器去手工删除那些老的文件,有时忘记了就会导致硬盘空间不足而无法备份。
因为只要保留最近几天的备份,如果可以做一个批处理让系统自动删除老备份文件就好了,但是Windows的命令行和Linux的Shell比起来功能差了很多,到底行不行我自己也不清楚。
于是上网查了一下各位大虾发的帖子,再经过自己的摸索和尝试,发现只要花点功夫还是能实现这个功能的。
下面来看看我的实现方法。

如果操作系统是 Windows Server 2003 那就好办了,因为它有一个forfiles命令能够查找满足指定条件的文件,下面是这个命令的用法。
forfiles /p <目标目录名> /d <天数> /c <执行的命令>
看看列出的三个参数都有什么用处:
/p 指定了要在哪个目录里查找文件,默认是当前工作目录,注意不能在目录名后面加斜杠。
/d 指定一个日期或天数,用于比较文件的最后修改日期是否符合条件。
/c 对每个找到的文件执行的命令。

例1.要把在C盘根目录下最后修改日期大于或等于2007年7月1日的文件复制到D盘根目录下:
forfiles /p “c:” /d “2007-7-1” /c “cmd /c copy @path d:/”
例2.删除在C盘backup目录下最后修改日期在10天前的文件:
forfiles /p "c:/backup" /d -10 /c "cmd /c echo deleting @file ... && del /f @path"

看了上面的例子,觉得在 Windows Server 2003 下面要删除老文件很简单吧。
但如果操作系统是 Windows 2000/XP 就比较麻烦,因为它们没有forfiles命令,只能靠自己写批处理来实现了。
下面是我写的批处理文件内容:

@echo off

rem ******************************
rem * 按时间删除文件目录的批处理 *
rem ******************************

rem 设置临时目录的路径
set tempDir=%tmp%/remove_%date:~0,10%
if not exist %tempDir% md %tempDir%
rem 设置处理日期的脚本文件的路径
set scriptFile=%tempDir%/get_date.vbs

rem 获得要保留的天数
set days=%~1
if “%days%” == “” goto printUsage
rem 获得目标目录的路径
set dirPath=%~2
if “%dirPath%” == “” set dirPath=.
rem 获得要操作的文件形式
set fileSpec=%~3
if “%fileSpec%” == “” set fileSpec=*.*

rem 生成计算日期的脚本文件并获得删除的截止日期
echo d=date()-%1 > %scriptFile%
echo s=right(“0000” ^& year(d),4) ^& “-” ^& right(“00” ^& month(d),2) ^& “-” ^& right(“00” ^& day(d),2) >> %scriptFile%
echo wscript.echo s >> %scriptFile%
for /f %%i in (‘cscript /nologo %scriptFile%’) do set lastDate=%%i

rem 处理目标目录里的每个对象
for /f “tokens=1,2,3* delims=<> ” %%i in (‘dir “%dirPath%/%fileSpec%” /a /-c /tc’) do call :proc “%%i” “%%j” “%%k” “%%l”
goto :done

rem 处理目标目录里对象的过程
:proc
rem 获得对象的创建日期并判断是否为有效格式
set fileDate=%~1
echo %fileDate% | findstr “[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]” > nul
if errorlevel 1 goto end
rem 获得对象的类型
set fileType=%~3
if “%fileType%” == “” goto end
rem 获得对象的名称
set fileName=%~4
if “%fileName%” == “” goto end
if “%fileName%” == “.” goto end
if “%fileName%” == “..” goto end
if “%fileName%” == “字节” goto end
if “%fileName%” == “可用字节” goto end
rem 判断对象日期是否小于或等于删除的截止日期
if “%fileDate:~0,10%” leq “%lastDate%” (
echo deleting “%fileName%” …
if “%fileType%” == “DIR” ( rd /s /q “%dirPath%/%fileName%” ) else ( del /q /f “%dirPath%/%fileName%” )
)
goto end

:error
echo An error occurred during backuping.

:done
rd /s /q %tempDir%
goto end

:printUsage
echo Usage: %0 ^<Days^> [Work directory] [Target file specification (can include wildcards)]
goto end

:end

这个批处理的语句很多,我表达能力有限,懒得一一解释了。
主要是利用Windows的脚本功能来计算要删除文件的截止日期,然后for加dir命令来提取文件的日期进行判断。

关于forfiles和for的详细信息,可以在Windows的帮助与支持中找到。

ftp的端口号20、21有何区别

一个是数据端口,一个是控制端口,控制端口一般为21,而数据端口不一定是20,这和FTP的应用模有关,如果是主动模式,应该为20,如果为被动模式,由服务器端和客户端协商而定

FTP Port模式和FTP Passive模式

当你对一个FTP问题进行排错时候,你首先要问的一个问题是使用的是port模式的还是passive 模式。因为这两种行为迥异,所以这两种模式引起的问题也不同;在过去,客户端缺省为active(port)模式;近来,由于Port模式的安全问题,许多客户端的FTP应用缺省为Passive模式。

>>2.1 FTP Port模式

Port模式的FTP步骤如下:

1、 客户端发送一个TCP SYN(TCP同步)包给服务器段众所周知的FTP控制端口21,客户端使用暂时的端口作为它的源端口;

2、 服务器端发送SYN ACK(同步确认)包给客户端,源端口为21,目的端口为客户端上使用的暂时端口;

3、 客户端发送一个ACK(确认)包;客户端使用这个连接来发送FTP命令,服务器端使用这个连接来发送FTP应答;

4、当用户请求一个列表(List)请求或者发起一个要求发送或者接受文件的请求,客户端软件使用PORT命令,这个命令包含了一个暂时的端口,客户端希望服务器在打开一个数据连接时候使用这个暂时端口;PORT命令也包含了一个IP地址,这个IP地址通常是客户自己的IP地址,而且FTP也支持第三方(third-party)模式,第三方模式是客户端告诉服务器端打开与另台主机的连接;

5、服务器端发送一个SYN包给客户端的暂时端口,源端口为20,暂时端口为客户端在PORT命令中发送给服务器端的暂时端口号;

6、 客户端以源端口为暂时端口,目的端口为20发送一个SYN ACK包;

7、 服务器端发送一个ACK包;

8、发送数据的主机以这个连接来发送数据,数据以TCP段(注:segment,第4层的PDU)形式发送(一些命令,如STOR表示客户端要发送数据,RETR表示服务器段发送数据),这些TCP段都需要对方进行ACK确认(注:因为TCP协议是一个面向连接的协议)

9、当数据传输完成以后,发送数据的主机以一个FIN命令来结束数据连接,这个FIN命令需要另一台主机以ACK确认,另一台主机也发送一个FIN命令,这个FIN命令同样需要发送数据的主机以ACK确认;

10、客户端能在控制连接上发送更多的命令,这可以打开和关闭另外的数据连接;有时候客户端结束后,客户端以FIN命令来关闭一个控制连接,服务器端以ACK包来确认客户端的FIN,服务器同样也发送它的FIN,客户端用ACK来确认。

下图图示了FTP PORT模式前几步步骤:
/====================================================================
| |
| [ ftp Client ] [ ftp Server ] |
| |
| (TCP:21 连接初始化,控制端口) |
| SYN |
| Port xxxx ———————-> Port 21 [TCP] |
| SYN+ACK |
| Port xxxx <———————- Port 21 |
| ACK |
| Port xxxx ———————-> Port 21 |
| |
| (控制操作: 用户列目录或传输文件) |
| |
| Port, IP, Port yyyy |
| Port xxxx <———————- Port 21 |
| Port Seccussful |
| Port xxxx <———————- Port 21 |
| List, Retr or Stor |
| Port xxxx ———————-> Port 21 |
| |
| |
| (TCP:20 连接初始化,数据端口) |
| SYN |
| Port yyyy <———————- Port 20 |
| SYN+ACK |
| Port yyyy ———————-> Port 20 |
| ACK |
| Port yyyy <———————- Port 20 |
| |
| |
| (数据操作: 数据传输) |
| Data + ACK |
| Port yyyy <———————> Port 20 |
| . |
| . |
| . |
| |
====================================================================/

FTP Port模式会给网络管理人员在许多方面带来很多问题,首先,在PORT命令消息中的IP地址和端口号的编码不是直白地显示。另外,应用层的协议命令理论上不应该包含网络地址信息(注:IP地址),因为这打破了协议层的原则并且可能导致协同性和安全性方面的问题。

下图是WildPackets EtherPeek协议分析仪解码了PORT命令的地址参数,地址参数后是端口号,见PORT192,168,10,232,6,127;6,127部分的第一个阿拉伯数字乘以256,然后加上第2个阿拉伯数字就得到端口号,所以客户端指定了端口号为6*256+127=1663;
/====================================================================
| IP Header – Internet Protocol Datagram |
| Version: 4 |
| Header Length: 5 (20 bytes) |
| |
| …………… |
| |
| Time To Live: 128 |
| Protocol: 6 TCP – Transmission Control Protocol |
| Header Checksum: 0xAA36 |
| Source IP Address: 192.168.0.1 DEMO |
| Dest. IP Address: 192.168.0.3 VI |
| No IP Options |
| |
| TCP – Transport Control Protocol |
| Source Port: 2342 manage-exec |
| Destination Port: 21 ftp |
| Sequence Number: 2435440100 |
| Ack Number: 9822605 |
| Offset: 5 (20 bytes) |
| Reserved: %000000 |
| Flags: %011000 |
| 0. …. (No Urgent pointer) |
| .1 …. Ack |
| .. 1… Push |
| .. .0.. (No Reset) |
| .. ..0. (No SYN) |
| .. …0 (No FIN) |
| |
| Window: 65150 |
| Checksum: 0x832A |
| Urgent Pointer: 0 |
| No TCP Options |
| |
| FTP Control – File Transfer Protocol |
| Line 1: PORT 192,168,0,1,9,39<CR><LF> |
| |
| FCS – Frame Check Sequence |
| FCS (Calculated): 0xF4C04A4F |
====================================================================/

下图验证了服务器端的确从端口20打开到端口1663的TCP连接:
/====================================================================
| TCP – Transport Control Protocol |
| Source Port: 20 ftp-data |
| Destination Port: 1663 |
| Sequence Number: 2578824336 |
| Ack Number: 0 |
| Offset: 6 (24 bytes) |
| Reserved: %000000 |
| Flag

s: %000010 |
| 0. …. (No Urgent pointer) |
| .0 …. (No Ack) |
| .. 0… (No Push) |
| .. .0.. (No Reset) |
| .. ..1. SYN |
| .. …0 (No FIN) |
| |
| Window: 3731 |
| Checksum: 0x8A4C |
| Urgent Pointer: 0 |
| No TCP Options |
| |
| TCP Options |
| Options Type: 2 Maxinum Segment Size |
| Length: 4 |
| MSS: 1460 |
| |
| FCS – Frame Check Sequence |
| FCS (Calculated): 0x5A1BD023 |
====================================================================/

当使用FTP时候,网络中的防火墙必须要声明相应的端口,防火墙必须要跟踪FTP对话然后检查PORT命令,防火墙必须要参与从服务器端到客户端在PORT命令中指定的端口连接的建立过程。

如果网络中使用了NAT(注:网络地址翻译),那么NAT的网关同样也需要声明相应的端口,网关需要把在PORT命令中指定的IP地址翻译成分配给客户的地址,然后重新计算TCP的Checksum ;如果网关没有正确地执行这个操作,FTP就失败了。

黑客可能会利用FTP支持第三方特性这一特点,在PORT命令中设置IP地址和端口号参数来指定一台目标主机的地址和端口号(有时候称这种攻击为FTP反弹攻击),例如黑客可以让一台FTP服务器不断地从它的源端口20发送TCP SYN包给一系列目的端口,让FTP服务器看起来正在进行端口扫描,目的主机不知道攻击来自黑客的主机,看起来攻击象是来自FTP服务器。一些常用的FTP应用在PORT命令中设置地址为0.0.0.0,这样做的意图是让FTP服务器只需要与打开控制连接
的相同客户进行数据连接,设置地址为0.0.0.0可能会让防火墙不知所措。例如,CISCO PIX IOS6.0以上版本的PIX(注:CISCO硬件防火墙设备,6.0以上版本为其修正了相关的FTP协议)要求数据连接的IP地址与已经存在的控制连接的IP地址必须相同。这样做的原因是防止黑客用PORT命令来攻击别的机器,虽然一些FTP应用设置IP地址为0.0.0.0不是有意图的攻击,但在PIX修正协议环境下的确引起了一些问题,同时对其他不允许第三方模式和避免FTP反弹攻击的防火墙来说,这也会引起相同的问题。

>>2.2 FTP Passive模式

下面的列表描述了Passive模式的FTP的步骤,步骤1到3和Port模式FTP相同,步骤9到11同样与Port模式FTP最后三步相同。

1、客户端发送一个TCP SYN(TCP同步)包给服务器段众所周知的FTP控制端口21,客户端使用暂时的端口作为它的源端口;

2、服务器端发送SYN ACK(同步确认)包给客户端,源端口为21,目的端口为客户端上使用的暂时端口;

3、客户端发送一个ACK(确认)包;客户端使用这个连接来发送FTP命令,服务器端使用这个连接来发送FTP应答;

4、当用户请求一个列表(List)或者发送或接收文件时候,客户端软件发送PASV命令给服务器端表明客户端希望进入Passive模式;

5、服务器端进行应答,应答包括服务器的IP地址和一个暂时的端口,这个暂时的端口是客户端在打开数据传输连接时应该使用的端口;

6、客户端发送一个SYN包,源端口为客户端自己选择的一个暂时端口,目的端口为服务器在PASV应答命令中指定的暂时端口号;

7、服务器端发送SYN ACK包给客户端,目的端口为客户端自己选择的暂时端口,源端口为PASV应答中指定的暂时端口号;

8、客户端发送一个ACK包;

9、发送数据的主机以这个连接来发送数据,数据以TCP段(注:segment,第4层的PDU)形式发送(一些命令,如STOR表示客户端要发送数据,RETR表示服务器段发送数据),这些TCP段都需要对方进行ACK确认;

10、当数据传输完成以后,发送数据的主机以一个FIN命令来结束数据连接,这个FIN命令需要另一台主机以ACK确认,另一台主机也发送一个FIN命令,这个FIN命令同样需要发送数据的主机以ACK确认;

11、客户端能在控制连接上发送更多的命令,这可以打开和关闭另外的数据连接;有时候客户端结束后,客户端以FIN命令来关闭一个控制连接,服务器端以ACK包来确认客户端的FIN,服务器同样也发送它的FIN,客户端用ACK来确认。