課題5:ポートスキャンの実験

自分の実験環境(端末)の使用/未使用ポート(ウェルノウンポートのみでok)を確認するポートスキャンプログラムを作成せよ。さらに、任意のリモート端末の使用/未使用ポートを確認するように改良せよ(加点ポイント)。なお、スクリプトを使って内部で'netstat -l'コマンドを実行し、その結果を利用するのは不可とする(ソケットプログラムを作成すること)。


プログラムソース

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

#define BUFFSIZE BUFSIZ

int
main(int argc, char *argv[])
{
  int port;
  int socket_fd;
  char str[BUFFSIZE];
  struct sockaddr_in addr;

  if(argc >= 3) {
    printf("Usage: %s [IP addr \n", argv[0]);
    return 1;
  }
  if(argc == 1) {
    strcpy(str, "127.0.0.1");
  } else {
    strcpy(str, argv[1]);
  }

  printf("\"%s\" PortScan Start!!\n", str);

  for(port=1; port<1024; port++) {
    if((socket_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
      perror("socket");
      return 1;
    }
    
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = inet_addr(str); 
    addr.sin_port = htons(port); 

    if(connect(socket_fd, (struct sockaddr *)&addr, sizeof(addr)) == -1) {
    } else {
      printf("%4d\n", port);
    }
    close(socket_fd);
  }
  printf("There are using\n");
}


実行結果

22:46:/Users/j05059/jikken2/tcpip:%./portscan
"127.0.0.1" PortScan Start!!
  80
 427
 548
 631
There are using


もどる