Не работает :о)
Точнее ситуация такая. После компиляции и запуска программы в первый раз
видим на экране
./scan 192.168.0.1 1 100
......
Port: 17 status: 0
Port: 18 status: 0
Port: 19 status: 0
Port: 20 status: 0
Port: 21 status: 0
Port: 22 status: 0
Port: 23 status: 0
Port: 24 status: 0
Port: 25 status: 0
......
В общем врет все. Со второго запуска видим.
......
Port: 17 status: -1
Port: 18 status: -1
Port: 19 status: -1
Port: 20 status: -1
Port: 21 status: 0
Port: 22 status: 0
Port: 23 status: -1
Port: 24 status: -1
Port: 25 status: 0
......
Что в принципе соответствует действительности :о)
Тоже самое наблюдается если не запускать прогу пару минут.
P.S. Если честно, то эт моя первая попытка ченить написать под UNIX, так что сильно не пинать.
---src---
#include "./include/test.h"
int err_con;
int port_from ;
int port_to;
int sock;
int counter;
struct sockaddr_in sock_addr;
struct hostent* hst;
void GetParam(int g_argc, char *g_argv[]);
int main(int argc, char *argv[])
{
GetParam(argc,argv);
hst = gethostbyname(argv[1]);
for(counter=(int)min(port_from,port_to);counter!=(int)max(port_from,port_to)+1;counter++)
{
sock = socket(AF_INET,SOCK_STREAM,0);
bzero(&sock_addr,sizeof(sock_addr));
sock_addr.sin_family = AF_INET;
sock_addr.sin_addr.s_addr = ((struct in_addr*)hst->h_addr_list[0])->s_addr;
sock_addr.sin_port = htons(counter);
bind(sock,(SA*)&sock_addr,sizeof(sock_addr));
err_con = connect(sock,(SA *)&sock_addr,sizeof(sock_addr));
printf("Port: %i status: %i \n",counter,err_con);
close(sock);
}
return 0;
}
void GetParam(int g_argc, char *g_argv[])
{
switch(g_argc)
{
case 3:
port_from = port_to = atoi(g_argv[2]);
if(port_from == 0)
{
printf("Error. Port value = 0\n");
exit(1);
}
break;
case 4:
port_from = atoi(g_argv[2]);
port_to = atoi(g_argv[3]);
if(port_from == 0 || port_to == 0)
{
printf("Error. Port value = 0\n");
exit(1);
}
break;
default:
printf("Usage: scan <host> <port> or scan <host> <port_from> <port_to>\n");
exit(1);
break;
}
}