【问题标题】:C/UNIX: port scannerC/UNIX:端口扫描器
【发布时间】:2013-05-20 13:57:39
【问题描述】:

我需要将所有 Web 服务器查找到包含 IP 地址的文件中的程序。 如果他的 80 端口打开,我发现 IP 地址是服务器。我写了这段代码,但它不起作用。总是说端口 80 是关闭的,即使我用开放的端口 80 编写 IP。(例如 194.153.145.104)。我哪里错了? 我在这里检查开放端口的 IP:http://www.yougetsignal.com/tools/open-ports/

#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <stdio.h>
#include <netdb.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(int argc, char *argv[])
{

u_short port=80;            /* user specified port number */
short int sock = -1;        /* the socket descriptor */
struct hostent *host_info;  /* host info structure */
struct sockaddr_in address; /* address structures */
char addr[1023];
char buf[20];
char *filename;

filename=argv[1];

FILE *file = fopen( filename, "r" );

    while (!feof(file))
    {
    fscanf(file,"%s",buf);
    strncpy(addr, buf, 1023);


    bzero((char *)&address, sizeof(address));
    address.sin_addr.s_addr = inet_addr(addr);
    address.sin_port = htons(port);      
    address.sin_family=AF_INET;

    sock = socket(PF_INET, SOCK_STREAM, 0);
    if (sock == -1) {
        fprintf(stderr, "Error: could not assign master socket\n");
        exit (1);
    }
    if(connect(sock,(struct sockaddr *)&address,sizeof(address)) == 0)
        printf("%s is a web server\n", addr);

    else printf("%s isn't a web server\n", addr);

    close(sock);

    }

    return 0;
    }

【问题讨论】:

  • 这里有问题吗?什么不起作用?
  • 是的。程序总是说80端口是关闭的,即使我用开放的80端口写IP。(例如194.153.145.104)

标签: c port


【解决方案1】:

您编译时是否启用了警告?使用 gcc 我添加了 -Wall,上面写着 inet_addrisnt 声明正确。包含&lt;arpa/inet.h&gt; 使程序运行良好。

我建议检查您使用的所有函数和系统调用的返回值,以检测和定位任何可能的错误。

样本输出:

$ ./a.out ip.txt 
127.0.0.1 is a web server
127.0.0.1 isn't a web server

编辑:添加有关我的测试设置的更多详细信息,因为它仍然不适用于 OP。

  • &lt;arpa/inet.h&gt; 添加了包含
  • 使用 gcc -Wall -O0 http_port_scan.c 编译
  • 在端口 80 上设置监听器:sudo nc -l 80
  • 执行:./a.out ip.txt

文件 ip.txt 看起来像:

~/src/so$ cat ip.txt 
127.0.0.1
thuovila@glx:~/src/so$ file ip.txt 
ip.txt: ASCII text

在这台计算机上,我收到两行“是网络服务器”,因为 nc 的关闭速度比我的另一台计算机慢。执行环境是 Ubuntu LTS 12.04,带有 uname -a: Linux glx 3.2.0-43-generic #68-Ubuntu SMP Wed May 15 03:33:33 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

我的建议仍然是,你添加检查函数的所有返回值,如果它们失败,调用 perror() 或使用其他方法来找出错误。

【讨论】:

  • 我的输出是:127.0.0.1 isn't a web server 127.0.0.1 isn't a web server
猜你喜欢
  • 2023-03-16
  • 2017-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-21
  • 1970-01-01
相关资源
最近更新 更多