Решено: connect ()

Модератор: Модераторы разделов

Protocol
Сообщения: 34
ОС: Linux

Решено: connect ()

Сообщение Protocol »

приветствую=)

есть проблема =)
написал прогу, которая сканирует порты, для сканирования использовал tcp - соединения, с помощью функции connect.
по описанию функция при ошибки возвращает -1, при запуске проги, она выдает -1, результат программы-ошибка. При прослушивании порта, который сканирует программа, я получаю пакеты, которая отправляет прога...но, у самой программы результат ошибочный(
в чем может быть проблема?
Спасибо сказали:
Protocol
Сообщения: 34
ОС: Linux

Re: Решено: connect ()

Сообщение Protocol »

вот код:

Код: Выделить всё

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/ip.h>
#include <netinet/ip_icmp.h>
#include <netdb.h>
#include <sys/time.h>
#include <signal.h>
#include <unistd.h>

int main (int argc, char *argv[])
{
  int sd,c;
  struct hostent* hp;
  struct sockaddr_in servaddr;
  struct servent *srvport;
  int port, portlow, porthigh;

  if (argc !=4) {
    fprintf (stderr, "Usage: %s <addr> <portlow> <porthigh>\n",argv[0]);
    exit(-1);
   }

  hp=gethostbyname(argv[1]);
  if (hp==NULL) {
    herror("gethostbyname() failed");
    exit(-1);
  }

portlow=atoi (argv[2]);
porthigh=atoi(argv[3]);

fprintf(stderr, "Begin scan....\n");

for (port=portlow; port<=porthigh; port++)
 {
   if ( (sd=socket(PF_INET, SOCK_STREAM, 0)) < 0) {
   perror ("ошибка создания сокета \n");
   exit (-1);
 }
 printf("socket open!\n");

 bzero (&servaddr, sizeof(servaddr));
 servaddr.sin_family=AF_INET;
 servaddr.sin_port=htons(port);
 servaddr.sin_addr=*((struct in_addr *)hp->h_addr);


 c=connect(sd, (struct sockaddr *)&servaddr, sizeof(servaddr));
printf ("%d\n",c);
if (c==0)
  {
       srvport=getservbyport(htons(port), "tcp");
   if (srvport==NULL)
    printf ("OPEN: %d(unkown)\n",port);
   else
    printf ("OPEN: %sd (%s)\n", port, srvport->s_name);
    fflush(stdout);
    }
 close(sd);
 printf ("Socket close!\n");
  }
 printf("\n");

 return 0;

}
Спасибо сказали:
Protocol
Сообщения: 34
ОС: Linux

Re: Решено: connect ()

Сообщение Protocol »

маленькая поправочка - при сканировании адресов с открытыми портами, то функция возвращает 0..но потом пишет Ошибка сегментирования........

простите меня, модеры =)
ошибка была вот в чем:


printf ("OPEN: %sd (%s)\n", port, srvport->s_name);

просто глянул свежим взглядом =)
Спасибо сказали: