Python 识别侦听远程端口的服务

Python 识别侦听远程端口的服务,python,networking,service,port,Python,Networking,Service,Port,我想详细说明一下,尤其是关于。假设我有一个固定的服务列表要检查,比如:('ftp','ssh','http')。打开远程服务器端口22的套接字: import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) result = s.connect_ex(('my_remote_server', 22)) if(result == 0) : print s.recv(256) s.close() 我得到以下输出:

我想详细说明一下,尤其是关于。假设我有一个固定的服务列表要检查,比如:
('ftp','ssh','http')
。打开远程服务器端口22的套接字:

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = s.connect_ex(('my_remote_server', 22))

if(result == 0) :
    print s.recv(256)
s.close()
我得到以下输出:

'SSH-2.0-OpenSSH_6.1p1 Debian-4\r\n'

所以我可以猜到有一个ssh服务在监听这个端口。因此,我的问题是:在哪里或如何找到不同类型服务的欢迎信息(或类似信息)?这些是否受到某种形式的监管?对于ssh,它是否总是以
ssh-
开头?

从服务器得到的响应取决于确切的协议和服务器配置

例如,HTTP有一个
服务器
头,但internet上的许多服务器谎报服务器正在响应什么,以阻止恶意黑客试图利用服务器特定的缺陷进行攻击。此外,在客户端发送请求之前,服务器保持沉默;您的代码必须在有任何响应之前发送一些内容

你能做的最好的事情就是尝试不同的协议,看看对方的反应是否明智。例如,尝试向HTTP端口发送SSH握手可能会导致
HTTP/1.0 400错误的请求
响应


换句话说,没有现成的解决方案,您必须根据您尝试检测的协议创建自己的试探法。

您最好搜索字符串ssh(/ftp/http)并根据该字符串得出结论。
当然,这也只是一个猜测,因为这通常可以通过一个配置参数来更改(请参阅),并且更改它以避免暴露服务器程序/版本被认为是良好的安全实践

好的,我想我必须计划我将支持哪些服务,然后测试启发式来检测这些服务。