в обшем на коленке написал:
| Код | #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; }
|
хз тут ему место, или где..
|