Klient przeszukujący serwisy po portach

0

Witam
Mam napisać klienta, który będzie wyszukiwał po portach serwisy. Napisałem, ale zwraca tylko jeden serwis. I tutaj pojawia się problem, jak napisać, żeby wyszukał i wypisał wszystkie serwisy?

Z góry dziękuję za pomoc ;)

Mój kod:

 
int main (int argc, char *argv[])
{
    int sockfd, n,pol, s;
    int numer;
    char recvline[MAXLINE +1];
    char  p;
    struct sockaddr_in servaddr;
    struct servent *sp;

    if (argc != 3)
        err_sys("Aby uruchomić podaj: klient <Adres IP> <port>");

    s = atoi(argv[2]);
    printf("port: %d \n",s);
    if((sp = getservbyport(htons(s), NULL)) == NULL)
        {
            err_sys("Nie znaleziono portu");
        }

    if((sockfd = socket(AF_INET, SOCK_STREAM, 0))<0)
        err_sys("Blad utworzenia polaczenia");
    bzero(&servaddr, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = sp->s_port;
    if(inet_pton(AF_INET, argv[1], &servaddr.sin_addr)<=0)
        err_sys_kom("Blad konwersji do adresu IP dla %s", argv[1]);

    printf("%s  - %s \n", sp->s_name, sp->s_proto);

    pol = connect(sockfd, (SA*) &servaddr, sizeof(servaddr));
    if (pol < 0)
       {
          err_sys_kom("Blad polaczenie z serwerem");
          close(sockfd);
          exit(-1);
       }
          else
     str_cli(stdin, sockfd , 1);

    exit(0);
}
2

Witaj

Ja bym zrobił to tak, że na starcie pobierałbym ip i zakres portów do przeskanowania.

Aby uruchomić podaj: klient <Adres IP> <port startowy> <port koncowy> 

i następnie pętla for i sprawdzasz dla każdego portu usługę :)

0

Problem już rozwiązany.

Wystarczyło użyć funkcję getprotoent(), która odczytuje protokoły linijka po linijce.

Pozdrawiam i dzięki za chęć pomocy :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1