2012-01-08 16 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ポートだけをチェックする方法はありません。これで私を助けてください。

よろしく、 Badea Sorin!

答えて

0

これにはさまざまな方法があります。 nmapをインストールし、manualを読むことをお勧めします。 そこには多くのスキャン方法が実装され、マニュアルに記載されています。

詳細が必要な場合は、ソースコードを参照することもできます。

幸運。

+0

私はネイティブが必要です。私はこのツールを実行する必要があるところではroot権限を持っていません –

+0

nmapを実行する必要はありません。マニュアルを読むだけでいいです。あなたがそれをインストールすることができない場合は、私の答えからオンラインマニュアルを使用してください。 –

+0

ああ私はそれを得た。しかし、私は一種のnoobieです。このユーザー全員が欲しいと願っています –

関連する問題