myserver.c(デーモン部分のみ抜粋) | 補足 |
//(1)5683番ポートを使って接続をまつ unsigned short port = 5683; int servsoc; int hostsoc; struct sockaddr_in srcAddr; struct sockaddr_in dstAddr; int dstAddrSize = sizeof(dstAddr); memset(&srcAddr, 0, sizeof(srcAddr)); srcAddr.sin_port = htons(port); srcAddr.sin_family = AF_INET; srcAddr.sin_addr.s_addr = htonl(INADDR_ANY); servsoc = socket(AF_INET, SOCK_STREAM, 0); bind(servsoc, (struct sockaddr *) &srcAddr, sizeof(srcAddr)); listen(servsoc, 1); printf("now waiting for client connect\n"); hostsoc = accept(servsoc, (struct sockaddr *)&dstAddr, &dstAddrSize); printf("Connected from %s\n", inet_ntoa(dstAddr.sin_addr)); |
(1)課題5のプログラムを5600~5700修正して調べてみた %./scan_port Address = "127.0.0.1" Portscan started.. Port no. 5680 is open Port no. 5683 is open Portscan find them. 関数については関数メモを参照 |
ターミナル1 | ターミナル2 |
%./myserver now waiting for client connect Connected from 191.255.248.16 |
%./myclient Connected. Input Keyword = warning: this program uses gets(), which is unsafe. yama Keyword = [yama] / Data = [kawa] Input Keyword = 123 Keyword = [123] / Data = [456] Input Keyword = |
inetd使用 | inetd未使用 |
inetdがポートを見張り、接続があった時だけサーバを起動してクライアントと接続する ただし、inetdがサーバを起動するまでにオーバーヘッドが起こる(時間がかかる) |
サーバが常時起動していて、ポートを見張っているのでオーバーヘッドが少ない ただし、サーバが起動し続けるのでリソースを消費してしまう。 |