LINUX.ORG.RU

Программирование сокетов


0

0

Посмарите на исходник ниже. Ето сканер портов, очень простой, без никаких проверок, и неработающий =(. Просто ниче не сканит. Я проверял: при connect он в err записывает "-1", типа не может законектиться, но почему? (Все компилиться без warning'ов)

#include <stdio.h> #include <sys/socket.h> #include <sys/types.h> #include <netdb.h>

int main(int argc,char *argv[]) { int fd,err; int start,stop; struct sockaddr_in sa;

start=atoi(argv[1]); stop=atoi(argv[2]); sa.sin_family=AF_INET; sa.sin_addr.s_addr=inet_addr(argv[3]);

for(;start<=stop;start++){ sa.sin_port=htons(start); fd=(AF_INET,SOCK_STREAM,IPPROTO_IP); err=connect(fd,(struct sockaddr*)&sa,sizeof(sa)); if(con=0){ printf("%d\n",start); shutdown(fd,2); } } exit(0); }

anonymous

RE:

#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netdb.h>
 
int main(int argc,char *argv[]) {
    int fd,err;
    int start,stop;
    struct sockaddr_in sa;
 
    start = atoi(argv[1]);
    stop = atoi(argv[2]);
    sa.sin_family = AF_INET;
    sa.sin_addr.s_addr = inet_addr(argv[3]);
 
    for (; start<=stop; start++) {
        sa.sin_port = htons (start);
        fd = socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
        err = connect(fd,(struct sockaddr*)&sa,sizeof(sa));
        if (err == 0) {
            printf ("%d\n", start);
            shutdown (fd,2);
        }
    }
    return 0;
}

Murr ★★
()
Ответ на: RE: от Murr

все колбасно, но еще-бы close(fd); делать изредка... а-то они быстро кончатся.

HTH

anonymous
()
Ответ на: комментарий от anonymous

RE:

anonymous:

мне монопенисуально. я поправил в двух местах, где были фактические ошибки - теперь код рабочий. ну а по существу, если на машине открыто более 1024 портов, то действительно могут кончиться (я решил не править shutdown на close - могет тут логика какая...).

Murr ★★
()
Ответ на: RE: от Murr

RE:

Хотя, конечно, выигрыш на disconnect при блокирующем connect не сильно заметен.

Murr ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.