приветствую=)
есть проблема =)
написал прогу, которая сканирует порты, для сканирования использовал tcp - соединения, с помощью функции connect.
по описанию функция при ошибки возвращает -1, при запуске проги, она выдает -1, результат программы-ошибка. При прослушивании порта, который сканирует программа, я получаю пакеты, которая отправляет прога...но, у самой программы результат ошибочный(
в чем может быть проблема?
Решено: connect ()
Модератор: Модераторы разделов
-
Protocol
- Сообщения: 34
- ОС: Linux
Re: Решено: connect ()
вот код:
Код: Выделить всё
#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 ()
маленькая поправочка - при сканировании адресов с открытыми портами, то функция возвращает 0..но потом пишет Ошибка сегментирования........
простите меня, модеры =)
ошибка была вот в чем:
printf ("OPEN: %sd (%s)\n", port, srvport->s_name);
просто глянул свежим взглядом =)
простите меня, модеры =)
ошибка была вот в чем:
printf ("OPEN: %sd (%s)\n", port, srvport->s_name);
просто глянул свежим взглядом =)