C/UNIX:端口扫描程序

C/UNIX:端口扫描程序,c,port,C,Port,我需要一个程序,找到所有的网络服务器到包含IP地址的文件。 我发现,如果他的端口80打开,IP地址就是服务器。我写了这段代码,但不起作用。А始终说端口80已关闭,即使我使用打开的端口80写入IP。(例如,194.153.145.104)。我哪里错了? 我在这里检查具有开放端口的IP: #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 int main(int argc,char*argv[]) { u_short port=80;/*用户指定的端口号*/ short int soc

我需要一个程序,找到所有的网络服务器到包含IP地址的文件。 我发现,如果他的端口80打开,IP地址就是服务器。我写了这段代码,但不起作用。А始终说端口80已关闭,即使我使用打开的端口80写入IP。(例如,194.153.145.104)。我哪里错了? 我在这里检查具有开放端口的IP:

#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
u_short port=80;/*用户指定的端口号*/
short int sock=-1;/*套接字描述符*/
结构hostent*主机信息;/*主机信息结构*/
地址中的struct sockaddr_;/*地址结构*/
char addr[1023];
char-buf[20];
字符*文件名;
filename=argv[1];
FILE*FILE=fopen(文件名,“r”);
而(!feof(文件))
{
fscanf(文件“%s”,buf);
strncpy(地址,buf,1023);
bzero((字符*)&地址,sizeof(地址));
address.sin_addr.s_addr=inet_addr(addr);
address.sin_port=htons(port);
地址:sinu family=AF\u INET;
sock=socket(PF_INET,sock_STREAM,0);
如果(sock==-1){
fprintf(stderr,“错误:无法分配主套接字\n”);
出口(1);
}
if(connect(sock,(struct sockaddr*)和address,sizeof(address))==0)
printf(“%s是一个web服务器\n”,addr);
else printf(“%s不是web服务器\n”,addr);
关闭(袜子);
}
返回0;
}

编译时是否启用了警告?我使用gcc添加了-Wall,它说
inet\u addr
并没有声明正确。包含
使程序工作正常

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

样本输出:

$ ./a.out ip.txt 
127.0.0.1 is a web server
127.0.0.1 isn't a web server
编辑:添加有关我的测试设置的更多详细信息,因为它仍然不适用于OP

  • 添加了
  • 使用gcc-Wall-o0http\u port\u scan.c编译
  • 使用:sudo nc-l 80在端口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
在这台计算机上,我收到两行文字,说“是一台web服务器”,因为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


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

这里有问题吗?什么不起作用?是的。程序总是说端口80关闭,即使我用打开的端口80写IP。(例如194.153.145.104)我的输出是:
127.0.0.1不是web服务器127.0.0.1不是web服务器
~/src/so$ cat ip.txt 
127.0.0.1
thuovila@glx:~/src/so$ file ip.txt 
ip.txt: ASCII text