java - 为什么我的两台云服务器在 dht 爬虫上的行为不同?
问题描述
我写了一个基于 .java 的 dht 种子爬虫Bittorrent Protocol
。A
它在我从中获得一些种子的 1c2g1m 云服务器上运行良好。
然后我又买了一个云服务器B
,叫Lighthouse
. B
为 1c2g5m,限制为 1000g。但是我的爬虫没有工作B
,我无法得到任何响应,例如find_node
响应。
我测试了B
使用 linuxnc
进行 udp 发送和接收。这里没有问题。我还使用了两台服务器互相发送和接收 udp 数据包。也没问题。
另一个奇怪的是,我收到了一些sample_infohashes
定义在bep_0051上B
的请求,ip是127.0.0.1:43928,哈哈哈……我是用来router.bittorrent.com, 6881
初始化的。所以我认为这些sample_infohashes
消息来自router.bittorrent.com
.
为什么我的两个云服务器的行为如此不同?
解决方案
您的问题没有提供足够的信息来查明原因。在您的 bittorrent 爬虫和服务器的网络接口之间存在许多可能出错的抽象层。
爬虫可能绑定到错误的接口。DHT 数据包可能格式不正确并被远程对等方忽略。您可能正在错误地解析响应。在服务器或云提供商基础设施中,可能有防火墙静默丢弃东西。主机可能在无法访问部分 Internet 的情况下路由错误。很多可能的原因。
您只需尝试各种网络诊断工具,例如tcpdump
/ wireshark
、ss
、等nstat
,traceroute
并收集更多数据以了解实际发生的情况。由于您的问题也被标记为 java: 确保有用的异常消息不会被静音。
由于您有一个正在工作的主机和一个不工作的主机,因此您可以比较结果,这应该会使事情变得容易得多。
您可能还想测试在不同客户端之间发送消息,以防其中一个出现错误。
推荐阅读
- java - JavaFX 的 ImageView 中的屏幕共享
- azure-ad-b2c - 如果用户不是成人,则尝试获取用户的出生日期
- python - pyenv:没有这样的命令“virtualenv”
- bash - bash函数在后台运行命令
- typo3 - Typo3:如何在页眉和页脚中设置常用数据,如徽标?
- selenium-ide - 无法在 Selenium IDE 中导出测试用例
- node.js - UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性“正文”
- html - 表格单元格内的 HTML 输入
- android - Android Studio IDE v4.0 项目文件不可点击/缺少工具栏
- docker - 如何将报告测试写入控制台