Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > *NIX системы: Общие вопросы > как получить список занятых/свободных портов?


Автор: boostcoder 17.8.2010, 20:48
есть ли какая-то тулза для сабжа?

Автор: boostcoder 17.8.2010, 22:55
в обшем на коленке написал:
Код

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

void usage(const char* p) {
    const char* name = strrchr(p, '/');
    if ( !name ) {
        name = "portstat";
    } else {
        ++name;
    }
    printf( "usage:\n"
              "%s <port - get status of port>\n"
              "<u - print only used ports>\n"
              "<f - print only free ports>\n",
              name
    );
}

int main(int argc, char** argv) {
    struct sockaddr_in sockaddr;
    int idx = 0, sock, oneport = 0, onlyfree = 1, onlyused = 1;
    
    if ( argc == 2 ) {
        if ( argv[1][0] == 'f' ) {
            onlyused = 0;
        } else if ( argv[1][0] == 'u' ) {
            onlyfree = 0;
        } else if ( isdigit(argv[1][0]) ) {
            idx = atoi(argv[1]);
            oneport = 1;
        } else {
            printf("error in command line!\n\n");
            usage(argv[0]);
            return 0;
        }
    } else {
        idx = 0;
    }
    
    memset(&sockaddr, 0, sizeof(struct sockaddr_in));
    sockaddr.sin_family = PF_INET;
    sockaddr.sin_addr.s_addr = INADDR_ANY;

    for ( ; idx < USHRT_MAX; ++idx) {
        sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
        if ( sock < 0 ) {
            perror("can`t create main socket!");
            return 1;
        }
        sockaddr.sin_port = htons(idx);
        if ( bind(sock, (const void*)&sockaddr, sizeof(struct sockaddr_in)) == -1 ) {
            if ( onlyused ) printf("%5d%s\n", idx, (onlyused && onlyfree)?" used":"");
        } else {
            if ( onlyfree ) printf("%5d%s\n", idx, (onlyused && onlyfree)?" free":"");
        }
        close(sock);
        if ( oneport ) {
            break;
        }
    }
    
    return 0;
}


хз тут ему место, или где..

Автор: ZeeLax 18.8.2010, 05:01
netstat в догонку

Автор: spin2 18.8.2010, 10:44
boostcoder, lsof -i

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)