我有一个程序(.exe)从服务器获取某些信息,我希望能够从命令行获取该信息。我启动netcat并听取程序用来与目标进行通信的端口,因为我想知道从脚本中发出什么“请求”,我通过netcat,纯文本收到了这个:
net.tcp://[my ip address]:41012/Lapis.Btouch/ServerInfo
我尝试使用socket.send()将目标完全发送到目标(替换我的IP作为其IP),但它不会返回任何内容。这意味着什么以及如何获取数据?
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('[server ip address]',41012))
while True:
s.send('net.tcp://[server ip address]:41012/Lapis.Btouch/ServerInfo')
response = s.recv(1024)
print response
s.close()
这是我用来将请求发送到目标服务器的代码。它不会返回任何内容,所以我认为我没有以正确的方式提出请求。谢谢你的帮助。
答案 0 :(得分:0)
尝试通过tcpdump或wireshark或...来捕获端口41012
上的网络数据包。
然后检查:
如果问题(1)的答案是假的,问题就在于您和您的机器。所以去解决它(检查你的代码,检查你的防火墙......)
如果问题(1)的答案为True,但服务器未发送任何响应(此情况通常不会发生),请检查您的请求格式(检查您的URL或通过浏览器测试它或......)。也基于您连接的服务器,可能需要您的机器的IP识别服务器(我的意思是一些服务器只响应来自已知IP地址的请求,在这种情况下,您需要自己介绍给服务器(例如添加您的IP)在发送请求之前,到服务器上的可信列表)
最后一种情况,如果两个问题的答案都是正确的(我猜这是你的问题),那么你最正确的代码(response = s.recv(1024)
)为什么你使用1024
作为你的答案长度?使用正确和准确的参数。
在python中存在几种通过套接字(来自服务器)接收响应的方法,搜索stackoverflow,你可以找到有用的提示和命令。命令如使用非阻塞方式,ascync方式和...