关键字:arduino、esp8266、esptool、pyserial、macos
时间:2021年10月

一、问题

Arduino对esp8266进行upload时,报错

pyserial or esptool directories not found next to this upload.py tool.
An error occurred while uploading the sketch

二、解决办法

1、打开文件

~/Library/Arduino15/packages/esp8266/hardware/esp8266/2.7.4/tools/pyserial/serial/tools/list_ports_osx.py

2、注释掉29和30行

#iokit = ctypes.cdll.LoadLibrary(ctypes.util.find_library('IOKit'))
#cf = ctypes.cdll.LoadLibrary(ctypes.util.find_library('CoreFoundation'))

3、添加两行

iokit = ctypes.cdll.LoadLibrary('/System/Library/Frameworks/IOKit.framework/IOKit')
cf = ctypes.cdll.LoadLibrary('/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation')

关键字:udp、打洞、流程、关键、失败、拒绝、原因
时间:2021年10月

一、流程
1、客户端A向服务器发送任意数据,服务器记录客户端A的公网IP和端口,暂不应答客户端A;
2、客户端B向服务器发送任意数据,服务器把之前记录的客户端A的公网IP和端口发送给客户端B,同时把客户端B的公网端口和IP发送给A;
3、客户端A对收到服务器发来的客户端B的外网IP和端口立即发送数据,客户端B对收到服务器发来的客户端A的外网IP和端口立即发送数据;
4、客户端A和客户端B正常收发对方数据。

二、关键点
1、家用宽带基本都是可以UDP打洞的(Symmetric NAT很少见),没有成功通常是代码问题;
2、客户端本地端口可以固定也可以随机,但必须保证发送数据到服务器和发送数据到另一客户端使用相同的端口;
3、尽量保证两个客户端对发第一条数据在同一时刻,否则出现连接拒绝(refused)的概率很大。
4、实际打洞时,会有一定概率连接拒绝的情况,重新打洞即可,最好不要固定本地端口。

提供以打洞成功的源码,仅供参考:https://gitee.com/gitee211012/udp_hole_punching.git

关键字:nat、vsftp、passive、被动模式、配置
时间:2021年10月

问题1 需要哪些准备工作?
答:了解FTP主动模式和被动模式,了解端口映射工具iptables或lvs。

问题2 主动模式与被动模式如何选择?
答:对于公网FTP服务而言,主动模式是行不通的,只能采用被动模式。

问题3 被动模式需要映射哪些端口?
答:被动模式下,21端口的连接用于指令传输,FTP服务器会动态打开监听端口用于传输文件数据,端口号可配置。因此,仅映射21端口是不够的。

问题4 vsftp如何配置被动模式
答:
1、pasv_enable=YES启用被动模式;
2、pasv_min_port=60000和pasv_max_port=60010设置监听端口范围60000~60010,根据自己的情况修改范围值;
3、pasv_address=x.x.x.x设置ftp服务器的外网IP
修改完配置后,记得重启vsftp

问题5 端口映射如何配置
答:NAT网关上安装lvs,执行”ipvsadm -A 172.16.0.1:21 -s rr”、”ipvsadm -a 172.16.0.1:21 -r 172.16.0.105:21 -m”两条命令,完成21端口的映射,其他端口以此类推。pasv_min_port与pasv_max_port之间的端口均需要映射,172.16.0.1是NAT本机地址,172.16.0.105是FTP服务器地址,别替换错了。

问题6 客户端登录正常,无法获取文件?
答:因为pasv_address设置的是IPv4地址,需要屏蔽listen_ipv6=YES,并设置listen=YES。

问题7 如何限制用户的根路径?
答:限制用户的根路径设置不当,反应的现象看起来和网络问题很想,很容易误认为是被动模式配置或端口映射有问题。只需要注意chroot_local_user=YES和allow_writeable_chroot=YES配合使用即可,allow_writeable_chroot在vsftp老版本中并不需要配置,但在新版本中,如果不配置为YES,会涉及一系列目录权限的修改。