Как можно восстановить все TCP UDP открытые порты? - PullRequest
2 голосов
/ 09 января 2012

Мне нужно сделать собственный сканер портов, который сканирует только открытые порты TCP и UDP.Я работаю в стандартной C с сокетами.На данный момент я получаю все порты в заданном диапазоне.

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdlib.h>
#include <errno.h>

int scanPort(struct hostent *hostaddr,int port){
    char responce[1024];
    char *message="checking port";
    struct sockaddr_in server_address;
    int socket_d;
    int rval;
    socket_d = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
    if(socket_d == -1)
    {
        perror("Socket()\n");
        return errno;
    }
    memset(&server_address,0,sizeof(server_address));

    server_address.sin_family=AF_INET;
    server_address.sin_port=htons(port);

    memcpy(&server_address.sin_addr,hostaddr->h_addr,hostaddr->h_length);

    rval = connect(socket_d,(struct sockaddr *) &server_address, sizeof(server_address));

    if(rval == -1)
    {
        close(socket_d);    
        return 0;
    }else{
        close(socket_d);
        return 1;
    }

}
int main(int argc, char **argv)
{
    if(argc < 4){
        printf("Exemplu: ./portscanner <adresa_ip> <port_pornire> <port_oprire> \n");
        return (EINVAL);
    }

    int startPort;
    int endPort;
    int port;
    struct hostent *host_address;

    host_address = gethostbyname( argv[1] );
    startPort = atoi(argv[2]);
    endPort = atoi(argv[3]);

    for(port = startPort;port<=endPort;port++)
    {
        if(scanPort(host_address,port)==1){
            printf("Port %d is open\n",port);
        }
    }
}

В примере вы можете увидеть, как я пытался решить эту проблему.Но я не вижу способа проверить только порты TCP и UDP.Пожалуйста, помогите мне с этим.

С уважением, Бадя Сорин!

1 Ответ

0 голосов
/ 09 января 2012

Существует множество способов сделать это. Я рекомендую вам установить nmap и прочитать руководство . Многие методы сканирования реализованы там и описаны в руководстве.

Вы также можете обратиться к исходному коду, если вам нужна дополнительная информация.

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...