ftp被动模式可登陆 dir/ls超时卡死解决办法 (227 Entering Passive Mode (1,2,3,4,8,174))

和xx监狱ftp传输对账文本,投产后对方ftp能登陆但始终不能dir/ls,(
会出现超时卡死 )并且报227 Entering Passive Mode (1,2,3,4,8,174)。

找了很久资料发现,对方ftp server返回的227代码内1,2,3,4->1.2.3.4 ip是其内网ip,与我们实际访问的专线对端ip地址(2.3.4.5)不一致。这导致登陆后ftpserver指定的访问ip我们实际是不能访问的。监狱方使用的是vsftp。尝试沟通让对方配置文件进行修改:

/etc/vsftpd.conf:pasv_address= 2.3.4.5 。然后就成功解决。原理如下:

我们可以看到如上图,ftp被动模式下正常登陆并数据交互的标准流程代码,根据FTP协议的定义,在请求目录信息时,我们需要一个用于文件及目录数据获取的IP地址和端口,FTP服务器将采用227命令来回复已准备好连接的IP地址和端口【前四位是ip,第五位*256+第六位 是端口】,然后我们则根据返回的IP地址和端口进行连接,连接成功后,再等待ftp服务器返回150命令字并开始传送文件/目录数据

冲突在于:默认情况下返回的是内网实际ip,我们实际能请求访问的是转换后的专线入口地址,处于外网的我们当然无法直接访问监狱的内网。

至此生产问题解决,但是在查资料过程中还有额外收获一并记录分享。

1、因为是命令行请求没那么智能,发现有网友提到这种情况下,使用专用ftp客户端登录时,227多次请求无法访问该地址后,会智能尝试替换成为登陆成功时用的主机地址(即我们这里的专线地址)。 所以有时候用客户端登陆却又是没问题的。

2、刚刚我们生产问题解决的方案其实是有隐患的,
/etc/vsftpd.conf:pasv_address= 2.3.4.5 设置后该ftp所有账户全局只能通过分配给我行的专线入口ip才能进行文件数据传输操作,因为227指令会始终推
2.3.4.5 这个分配给我行的专线ip。由于监狱方配置文件修改较为困难且当前项目为我行独有中标,便未进一步推进狱方配置优化。仍在此记录优化方案以便不时之需:

配置思路为将全局配置改为单用户配置,重置前述配置修改:
①在狱方ftp服务器上的VSFTP配置文件(/etc/vsftpd.conf)中加入以下一行,打开用户独立配置功能:
user_config_dir=/etc/vsftpd/userconfig#指定单用户配置文件路径
②在狱方服务器(/etc/vsftpd/userconfig)路径下新建一个和FTP用户名的文件,写入如下内容:
pasv_addr_resolve=yes
pasv_address=2.3.4.5

3、如果ftpserver 是绑定动态域名和端口转发 的, pasv_addr_resolve=yes 一定要设置为yes

4、 listen = YES和listen_ipv6 = YES 配置不当会冲突。
同时开启传入的连接被解释为IPv6地址,因此IPv4 pasv_address未使用 ,一般情况下建议ipv6注释掉

以上很多细节tips均源于网络,这里只是顺带集合整理,具体外链不一一列举。

openssl make 编译报错undefined reference to `BIO_f_zlib’

最近需要使用国密SM4加密算法,综合评估下来将openssl升级到1.1.1版本即可,遂开启升级模式期间编译时有报错:

undefined reference to `BIO_f_zlib’
ld return 1 exit result

解决方案:

make clean
make //重新编译

顺道记录下升级步骤:

下载源码

解压缩

tar xzvf openssl-1.1.1-pre4.tar.gz
tar xzvf openssl-1.1.1-pre5.tar.gz

编译步骤

cd openssl-1.1.1-pre5
./config
make

本地安装(可选步骤)

sudo make install

配置LD_LIBRARY_PATH并检查openssl可执行程序版本号

$ export LD_LIBRARY_PATH=`pwd` 
$ ./apps/openssl version

selenium实现chrome多开

有时候为了避开登录验证所带来的麻烦,先登录后用selenium预加载之前的用户配置及cookie信息会极大便利自动化目标的实现,但受限于selenium及chrome的用户配置文件加锁机制,每次只能有一个进程操作大大限制了自动化目标的实施。所幸可以通过chrome的多用户可以完成selenium多任务同时加载cookie信息

1、添加多个chrome用户
2、分别用不同chrome用户访问 chrome://version/,找到对应的 个人资料路径 一般新开的会将Default延伸为Profile 1~
3、声明用户配置信息路径及资料名称:
option.add_argument(‘–user-data-dir=C:\Users\Administrator\AppData\Local\Google\Chrome\User Data’)
option.add_argument(‘–profile-directory=Profile 1’)

参考资料:

https://stackoverflow.com/questions/50635087/how-to-open-a-chrome-profile-through-user-data-dir-argument-of-selenium

selenium利用send_keys()一次性上传多个文件

奈何中文资料太少,google了下使用selenium中send_keys()一次性上传多个文件的解决方案:driver.find_element_by_xpath(“file_path1\nfile_path2”)

中间加 \n 即可

注意:结尾不能有\n否则会报错,调了好久才发现这个坑

参考资料:https://stackoverflow.com/questions/23955430/selenium-webdriver-upload-multiple-files

另外三种其他方案一并推荐:
https://tuyennta.com/upload-multiple-files-in-selenium/

selenium文件上传,成功后文件选择框未自动关闭

在使用selenium自动上传文件成功后,总是出现浏览器关闭后文件选择框却仍停留在桌面上,尤其是进程执行数次后会有一堆这样的框框保留在桌面上,网上搜索了很久没找到原因和解决方案,百思不得琪姐。

琪姐告诉我:画蛇添足!
selenium上传文件直接对input进行send_keys()而不需要想浏览器一样先点击再选文件,错就错在代码层面还添加了一次点击,导致有多余的选择文件弹框出现,删足即可~

selenium xpath路径写对,但找不到元素

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {\”method\”:\”xpath\”,\”selector\”:\”//*[@id=\”js_msgSender\”]/a\”}

确认过xpath表达式正确无误时selenium仍然找不到元素时一般很有可能是前面使用过.click()方法,浏览器会新开一个tab,然而当前selenium焦点仍然保留在原有页面tab当中

因此只要在.click()操作后加一行:
driver.switch_to_new_tab()
焦点跳转到新tab就ok

这种错误尤其在命令行执行时会爆出,IDE调试测试阶段会有可视化浏览器实际操作,不容易暴露。命令行下不会有可视化浏览器操作,错误就产生了

宝塔反向代理谷歌直接跳转并访问失败

宝塔反向代理谷歌时,所有配置正确的情况下还是会自动跳转到目标设置的google.com并且访问失败。

原因:谷歌会根据vps所在地进行当地域名的跳转,如香港vps会自动跳转到google.com.hk会导致反向代理失败

解决方案:反向代理目标谷歌域名使用vps当地谷歌域名即可,也就是说除美国之外的都不要直接用www.google.com域名作反代

一键安装openvpn

OpenVPN 安装并不是想像的那么难,更何况还有一键安装包呢?该 OpenVPN 一键安装包非本人维护,它真正的主人是 @Nyr ,开源地址是:https://github.com/Nyr/openvpn-install ,整个安装过程非常简单,就一条命令,根据提醒步骤安装既可。

适用平台:Debian、Ubuntu、CentOS,版本越新越好。该项目目前在Github上被打星6K多次,赶紧收藏吧。即使您之前没有使用OpenVPN,该脚本也可让您在一分钟内设置自己的VPN服务器。OpenVPN 安装就是这么简单。

继续阅读一键安装openvpn