2012-01-08 93 views
2

我需要製作一個自定義端口掃描器,只掃描打開的TCP和UDP端口。我正在用套接字工作在標準C中。目前我檢索我設置的範圍內的所有端口。如何檢索所有TCP UDP打開的端口?

#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端口的方法。請幫我解決一下這個。

Regards, Badea Sorin!

回答

0

有很多方法可以做到這一點。我建議您安裝nmap並閱讀manual。 許多掃描方法在那裏實現並在手冊中描述。

如果您需要更多詳細信息,還可以參考源代碼。

祝你好運。

+0

我需要一些本地的東西。我沒有root權限,我需要運行此工具 – 2012-01-08 21:18:03

+0

您不需要運行nmap。你只需要閱讀手冊。如果您不能安裝它,請使用我的答案中的在線手冊。 – 2012-01-08 21:20:01

+0

哦,我明白了。但我很不高興。希望我找到這個用戶滿意 – 2012-01-08 21:25:54