Day 3183 被动FTP续:使用Bitvise SSH Server建立内网对公网的主动FTP通道

在前面的一篇文章中(Day#3158),曾经提到本地的内网与放在公网上的某服务器相性不合,被动FTP总是不能正常工作,主要表现为长时间的数据传输(无论上传下载)时,过一段时间(大约30秒至1分钟)速度就会急剧下降,到最后数据连接超时关闭。

曾尝试过许多办法尝试解决这个问题,包括对服务器本身的配置和FTP服务器配置的修改,甚至直接关掉服务器的防火墙,但都没有成功,故而认为问题主要出现在本地内网出口上的设备上。据个人所知,出口上有一个所谓的「上网行为管理系统」,负责管理内网用户的上网行为,还有一个线路自动切换的设备(或策略)来判定对公网的连接应该走电信或者联通(网通)的线路,这些都可能是问题所在,但集团网络中心的人不愿为单个问题去修改设置,所以剩下能修改的地方都已Out of control。

如果说专门的FTP客户端(例如FlashFXP)还能通过一定手段重传的话,那么正在用的一款网站内容采集软件则是主要的障碍之一,这款软件的PORT模式运行正常,但PASV模式就问题百出:一旦遇上数据连接断线,那么重新连接后,就会一个劲的报续传失败,最后整篇文章因为这个而发布失败(因为设定了先上传文件再发布文章,总不能在一篇文章里到处都是×和半截图吧)。

经过与FTP服务器FileZilla Server的作者讨论,并dump了数据包进行分析,发现这款软件有一个很诡异的设定:当在PASV模式下续传文件时,软件的运行过程如下:登录并切换目录后,首先发送SIZE查询已上传的文件大小,然后发送APPE指令通知服务器将要续传文件,但接下来程序没有发送任何文件数据,就以正确的方式(TCP FIN)关闭了数据连接(而不是RST等异常关闭),于是服务器响应226 Successfully appended file,软件会再次使用SIZE查询文件大小,很显然大小与「续传」前相同,于是上传「失败」,重复几次达到最大错误次数后,软件即报上传失败。

与软件作者联系人家不承认,ft。

但是软件还得用,怎么办呢,有的人说换一款软件不就好了,那你帮我重写80多条采集规则谢谢,那么就只能在工作相对正常的PORT模式上下功夫。

经过一段时间的搜索及实验,暂时用Bitvise SSH Server这款SSH服务器解决了问题,使用同一公司出品的Bitvise SSH Client打开SOCKS5代理,在使用FlashFXP试验时,PORT和PASV模式都使用正常。

但某采集软件就是个奇葩:不论如何进行设定,PORT模式向服务器汇报的IP总是127.0.0.1(因为Socks5代理绑定到本地),而PASV数据包的错误一如既往,看来并没有通过SSH通道进行加密(如果加密了理应规避PASV FTP的不正常现象)。

最终的解决方案是:绕过原本部署的FileZilla Server,使用Bitvise SSH Server本身的SFTP功能和Bitvise SSH Client的SFTP-to-FTP Bridge,将采集软件连接的FTP指向本机的SFTP-FTP Bridge并强制使用PORT模式,这下清静了。

因为本Blog没什么人看所以详细的步骤略过(其实配置起来也很容易,另外一点就是感觉写多了好麻烦),如果有需要请于下方评论,我再把详细的步骤写出来。

Day 3172 Windows Update出现80200010错误的解决方法

首先吐槽下百度的搜索结果……算了我已经懒得吐槽那些知道大神了。

其实微软官方解释的已经很清楚了,但微软的KB一向不好搜,所以还是在这里整理一下:

这个错误代码的含义是后台传输服务(Background Intelligent Transfer Service)与更新服务器通讯时出现了问题。

一、检查网络连接,如果网络是通的,尝试更换本地连接的DNS(有时自动获取的DNS会拒绝解析),如更换为114.114.114.114和114.114.115.115。

二、如果以上步骤没有解决问题,尝试将以下内容存为批处理并执行,注意Windows Update的窗口如果已经开着,要重新打开:

net stop bits
net stop wuauserv
Ipconfig /flushdns
cd “Documents and Settings\All Users\Application Data\Microsoft\Network\Downloader”
del qmgr0.dat
del qmgr1.dat
net start bits
net start wuauserv

以上操作将清除BITS(后台传输服务)的队列,强制系统对Windows Update的补丁重新进行下载而不是续传。

Day 3158 被动模式FTP服务器在Windows 2008 R2下数据传输缓慢以致断线的问题改进方法

单位从2013年使用自管服务器以来,一直使用FileZilla Server作为FTP服务器。由于单位处于一个大的内网之下,必须使用PASV模式连接公网上的FTP服务(顺便吐槽一下集团的网络中心,只给内网服务器开20、21却不给留几个PASV模式的端口,提出来还被吐槽说我比你懂得多,这台服务器又在配置上与内网隔离,害得我们只能用其它协议向上发送文件),所以将某个范围开启为PASV的预留端口,并在防火墙上打开了20、21和PASV的端口范围,同时允许了服务器主程序与公网通讯。

但问题来了,约两年的时间以来,FTP服务器一直不太好用,尤其是在下载大批小文件的情况下,传上十几二十几个文件数据连接就会开始反应缓慢,掉到没有速度,直到服务器超时自动断开,甚至在绕过防火墙后问题依旧,百思不得其解。

最近在查看FileZilla的Wiki时,发现其中有一个章节「Network Configuration」[1]中提到:

Open a command prompt with administrative rights and execute the following command: netsh advfirewall set global StatefulFTP disable

试之,连接情况有所改善,虽然距离问题解决还有相当的距离(掉线依旧频繁)。

后经查询资料[2]得知,以上命令的作用为:

If you disable the StatefulFTP, the firewall will not inspect any FTP traffic. Any FTP traffic will pass the firewall because of the rule which I mentioned above.

虽然不是很明白为什么允许了FTP服务器的端口范围和程序还是会被过滤。

参考资料:

[1] https://wiki.filezilla-project.org/Network_Configuration

[2] http://social.technet.microsoft.com/Forums/windowsserver/en-US/4ee550ad-3880-49b3-a537-402a52c3d37b/netsh-advfirewall-set-global-statefulftp-disable?forum=winserverNIS

 

2014-09-28追加:

这件事最终得以解决的方法是在服务器上建立了威批恩服务,然后Tunnel到服务器上再进行下载,速度刷刷的。

被动明文FTP真难用啊。

2014-10-22追加:

威批恩服务(L2TP/IPSec模式)虽好,但出现了难以拨入的情况(不过只要成功拨入一次就能数小时不断线),经抓包检查发现服务器和客户端两边在开始阶段都没有问题,但一旦进入Key Exchange阶段服务器就会失去响应(服务器收到了Key Exchange包,但并没有回应任何数据)。目前此问题尚未解决,而上文提到的FTP已通过SSH SFTP-FTP Bridge解决。

Day 3152 Windows Update 8000FFFF

在Windows试图安装更新时出现8000FFFF,没有一个更新装得上。

可尝试快速解决方案:查看Users组是否有系统分区(如C:)的根目录读取权限。

参考资料:

[1] http://serverfault.com/questions/77982/windows-2008-r2-8000ffff-windows-update-error

[2] http://blogs.technet.com/b/brad_rutkowski/archive/2008/07/03/windows-update-fails-with-8000ffff-e-unexpected.aspx

Day 3125 USB控制器感叹号

上次因为出现过这种问题把机器都重装了,后来才找到一键修复的工具,但依赖工具总是不靠谱的。

症状:机器上大多数USB口插入设备可以上电,但系统无反应,查看设备管理器存在多个画了黄底感叹号的USB Hub Controller设备。

原因:由于之前量产过U盘,量产工具将控制器安装了附加驱动(filter),而在量产完成后没有按照正常流程卸载此驱动,从而使系统无法正常为USB控制器加载驱动,连接到其上的设备自然也无法正常使用。

解决方法:

1、打开注册表编辑器,展开如下项目:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{36FC9E60-C465-11CF-8056-444553540000}

2、在右边的数据窗找到LowerFilter或UpperFilter项,删除。

3、进入设别管理器,删除所有带黄底感叹号的USB控制器设备。

4、重新扫描硬件改动即可。

Day 3116 在安装了SetPoint驱动的情况下禁用罗技K260的待机键

logitech_k260_keyboard_mmkey

办公室用的是罗技的K260无线键鼠套装,上面有一排多媒体键,其中音量控制和计算器键是比较实用的,但那个画着电源标志的待机键就比较烦人,一旦不小心按到机器就会立即待机。

一般的解决方案是寻找键盘重映射软件,将对应的键码屏蔽掉或改作它用,但经反复尝试后发现好像做不到,具体表现是抓不到这个键的键码。

后来在有次将接收器调换USB端口后,开机系统重新识别设备时,看到一个奇怪的设备:

logitech_k260_disable_powerkey

 

难道这就是接管待机键的系统设备?

将其禁用,果然这个键就没有作用了,可以放心大胆地按着玩了(喂

2014-09-02修正:这个设备是在安装了SetPoint驱动后出现的,当没有安装该驱动时,系统会接受默认的HID设备键码进行待机操作。

Day 3089 Adobe Acrobat XI(11)文字转曲

Adobe Acrobat XI调整了命令位置和面板布局,简单记录一下对PDF进行合层转曲的步骤:


adobe_acrobat_toolsmenu

1、打开要转曲的PDF后,在右上角点击「工具」显示工具面板,然后单击右上角的小菜单按钮,将「印刷制作」打勾(透明度拼合工具在这里面)。

2、打开「页面」-「水印」-「添加水印」为页面添加空白水印,需要调整的参数为:「来源」选择「文本」,并在「文本」右边的文本框内输入一个空格,然后在下面的「外观」中将「不透明度」设置为50%。

3、打开「印刷制作」-「拼合器预览」将文档合层,需要调整的参数为:「光栅/矢量平衡」设置为100,「线状图和文本分辨率」设置为2400ppi,「渐变和网格分辨率」设置为300ppi,勾选「将所有文本转换为轮廓」,最下方「拼合器生成图像的压缩设置」中将「颜色」的「质量」设置为需要的质量,右边「应用到PDF」选择「文档中的所有页面」(或者设置为要转曲的页面范围)。

4、第三步单击「应用」后,会提示「本操作无法撤销」,点击「是」,待文档合层完毕后记得检查文字是否已转曲(以前是文本的区域无法再用「文本和图像选择工具」adobe_acrobat_text_image_selector的文本光标选择即成功),确认无误后,建议对文件进行另存,因为这个操作无法用Ctrl+Z撤销,如果覆盖源文件将不可恢复。

Day 3083 IE6 UTF-8 URL的不完全支持导致浏览出现问题

某办公室的老师把我叫去看一个奇怪的问题:在昵图网搜索三个字的关键词,例如「西红柿」,第一页可以正常浏览,但直接单击「下一页」的时候就会变成这样:

ie6_incomplete_utf8_support

此时的页面链接为 http://soso.nipic.com/?q=西红柿&sort=&from=1&page=2 ,而前一页的链接为 http://soso.nipic.com/?q=%E8%A5%BF%E7%BA%A2%E6%9F%BF&sort=&from=1 ,其差别除了换页的page外,主要在于是否对关键词进行了编码。

经过一番搜索,发现可能是IE6对UTF-8编码的不完全支持所致,具体似乎是在处理奇数个中文字时会截断最后一个字节,于是导致以上问题的出现,修理方法是在服务器端对关键字进行编码,而在客户端的唯一解则是对IE进行升级。

或许有人会说更换其它浏览器也能解决问题,但经过试验得出的结论很奇怪:Chrome360极速浏览器等Webkit内核的浏览器在升级IE6前一样会出现错误,而Gecko内核的FireFox则没有这个问题,但同样是Webkit内核的淘宝浏览器则不存在这个问题。That’s weird.

corrupt_help_message_of_nipic-com

顺便吐个槽:昵图网官方QQ这种诡异的帮助信息是什么人才能写得出来的……

Day 3066 从硬盘安装Ubuntu

先说点看起来无关紧要的题外话:

办公室里有一台多年前的Canon LBP3200打印机、2台32位Windows的机器和2台64位系统的Windows机器。由于打印机已停产多年,其Windows驱动只有32位版本,且经多方搜索及向客服咨询,官方并无推出64位驱动的计划,导致其中主任使用的一台64位系统的机器要打印东西,只能将文件传给32位机器后打开打印,很不方便,于是想办法架设打印服务器。

搜索后,发现USB口打印服务器基本为¥200元起,而本单位一向比较抠门,能将就的事情从不舍得花钱,况且经过搜索支持这款打印机的打印服务器价格更是高于¥300元。思前想后突然想到办公室有一台弃置多年的富士通LifeBook S6010,考虑将其改装成打印服务器,其主要配置为:Pentium III M 1.0Ghz、512MB内存、30GB硬盘、集成显卡(显存48MB)。

由于Windows Server安装打印服务器进行集中共享其实与单机共享并无二致,仍然需要准备各种版本的驱动,外加上述该机配置跑Windows Server明显带不动,最后决定装Ubuntu安装CUPS打印服务器进行实验。

但一开始就出现了问题:这台机器由于型号过老,不仅不支持USB-HDD、USB-CDROM等现代机器上常用的USB启动方式,连仅有的USB软驱模拟也无法适配手头的U盘,所以从U盘启动直接安装这条路算是堵死了。好不容易翻出一张深度XP那个年代的PE启动盘,但Linux和Windows 7以上的系统不同,并没有全自动的工具将镜像释放到磁盘后再进行安装,怎么办好呢?

最后的解决方案来自这篇文章,将Ubuntu的ISO释放到硬盘上的一个小分区,然后用Grub4DOS进行引导,将ISO挂载后模拟光驱启动,具体步骤如下(假定磁盘上的数据全都不要了):

1、使用任何分区工具将磁盘清空,并创建一个1.5GB左右的小FAT32分区,用于存放Ubuntu安装镜像(记得将这个分区设置为活动分区),剩余空间暂时留空。

2、下载Grub4DOSbootice,将Grub4DOS中的grldr和menu.lst放在刚刚创建的分区的根目录下。

3、启动bootice,在「目标磁盘」中选择好本机的硬盘,然后点击「主引导记录」,将Grub4DOS安装到硬盘中。

4、编辑menu.lst(需要使用支持UNIX换行符的文本编辑器,Windows下例如Notepad++、EditPlus等),在末尾另起一行加入以下内容(其中Ubuntu的ISO文件名请对照实际情况自行修改):

title Install Ubuntu
find –set-root /ubuntu-11.04-desktop-i386.iso
map /ubuntu-11.04-desktop-i386.iso (0xff) || map –mem /ubuntu-11.04-desktop-i386.iso (0xff)
map –hook
root (0xff)
kernel /casper/vmlinuz file=/cdrom/preseed/ubuntu.seed noprompt boot=casper only-ubiquity iso-scan/filename=/ubuntu-11.04-desktop-i386.iso quiet splash —
initrd /casper/initrd.lz

5、重新启动,在Grub4DOS引导选单选择最后一项Install Ubuntu即可。

6、当Ubuntu环境启动完成后,先不要急着安装系统,先按Ctrl+Alt+F1进入终端,输入以下命令:

sudo umount -l /isodevice

7、按正常步骤安装Ubuntu即可。

2014-07-05后记:由于室内陈设的问题,加之CUPS方案同样无法解决客户机需要安装Native driver的问题,故最后没有做成任何事情。

Day 3038 虚拟网呼叫转移

家里的电话在集团虚拟网下,最近因临时有事需要设置无条件呼叫转移,但按以往的*57*目标号码#总是忙音,#57#又只会冒一个「置」字的声音(这个仍然不知道怎么回事),一头雾水。

仔细上网搜了一下才发现忘了一个细节:既然虚拟网拨号需要先拨0转外线,那么设置呼叫转移时对于外线号码也要加上这个0,例如:要无条件呼转至138001380000,需要键入的指令是*57*013800138000。

感谢此链接下的回答。