課題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
もどる