Service 如何检查服务是否在远程主机上运行?

Service 如何检查服务是否在远程主机上运行?,service,port-scanning,Service,Port Scanning,我正在编写一个端口扫描程序,我想验证某个特定端口是否正在该端口上运行预期的标准服务,例如SSH和HTTP。我知道其中一种方法是向该端口发送查询并分析返回的信息。例如,SSH在连接后立即向我发送版本信息。然而,当我将connect()连接到ip地址上的端口22时,我只得到了错误号:110。错误消息:连接超时。任何想法都将不胜感激 整个代码说来话长。我在这里粘贴了一些摘录 struct sockaddr_in dest_addr; dest_addr.sin_family = AF_INET; de

我正在编写一个端口扫描程序,我想验证某个特定端口是否正在该端口上运行预期的标准服务,例如
SSH
HTTP
。我知道其中一种方法是向该端口发送查询并分析返回的信息。例如,SSH在连接后立即向我发送版本信息。然而,当我将
connect()
连接到ip地址上的端口22时,我只得到了
错误号:110。错误消息:连接超时
。任何想法都将不胜感激

整个代码说来话长。我在这里粘贴了一些摘录

struct sockaddr_in dest_addr;
dest_addr.sin_family = AF_INET;
dest_addr.sin_port = htons(22);
dest_addr.sin_addr.s_addr = inet_addr("8.8.8.8");

int service_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (service_sock < 0) {
    printf("Error creating service socket. Error number: %d. Error message: %s\n", errno, strerror(errno));
    exit(0);
}

int dest_addr_len = sizeof(dest_addr);
if (connect(service_sock, (struct sockaddr *)&dest_addr, dest_addr_len) < 0) { // stuck here
    printf("Error connection. Error number: %d. Error message: %s\n", errno, strerror(errno));
    exit(0);
}
我可以从第一行读取
HTTP
版本为
1.0


这里我想检查远程主机上的许多服务,包括但不限于
SSH
HTTP
。我认为猜测不是个好主意。因此,我需要一个通用方法从
dest\u addr
检索这些信息

好的,最后我需要回答我自己的问题。我刚刚得到了这项验证工作,并为此写了一份报告

连接超时是否意味着远程主机在该端口上没有响应?@Ubica确实如此。我只是不知道我应该发送什么样的查询,或者,我怎样才能从那个远程主机得到响应。看看这个问题@Ubica谢谢,但这个链接没有帮助。我已经实现了如何检查端口是否打开或关闭。在这里,我想验证某个特定的服务是否正在该端口上运行。除非该端口响应,否则无法检查该端口的服务。。。就这么简单:)试试这个链接
HTTP/1.0 400 Bad Request
Content-Type: text/html; charset=UTF-8
Content-Length: 1419
Date: Tue, 02 Dec 2014 05:56:25 GMT
Server: GFE/2.0
...