「TCP/IPプログラミング」

<作成者>
学籍番号:055752J
2班 氏名:比嘉安史
提出日:12月15日(金)

目次

    課題1:telnetコマンドによるWWWサーバへのアクセス
    解答
    telnetコマンドによって取得したページデータ
    課題2:inetdを使用するサーバプログラムの作成
    実行結果
    関数の説明と動作全体のフロー
    課題3:inetdを使用しないサーバプログラムの作成
    作成したプログラム
    実行結果
    実装上の違い
    課題4:HTTPクライアントの作成
    作成したプログラム
    実行結果
    課題5:ポートスキャンの実験
    作成したプログラム
    実行結果
    課題6:バッファオーバーフローの実験
    解決策
    具体例
    参考サイト

課題1:telnetコマンドによるWWWサーバへのアクセス

解答

    課題1では@IT - アットマーク・アイティというサイト内の「telnetでWebサーバに接続してみよう」というコンテンツを参考にして,http://www.atmarkit.co.jp/fnetwork/accesstest/at.htmlというURLのページデータを取得した.

telnetコマンドによって取得したページデータ

[nw0552:~] j05052% telnet www.atmarkit.co.jp 80
Trying 210.155.152.132...
Connected to www.atmarkit.co.jp.
Escape character is '^]'.
GET http://www.atmarkit.co.jp/fnetwork/accesstest/at.html
<html>
<head>
<title>Access Test</title>
</head>
<body>
<center>
<hr>
<h1>Welcome to AtmarkIT Access Test Page.</h1>
<hr>
</center>
</body>
</html>
Connection closed by foreign host.
[nw0552:~] j05052% 
   

課題2:inetdを使用するサーバプログラムの作成

実行結果

[nw0552:~/jikken2/tcp-ip] j05052% sudo xinetd -inetd_compat
[nw0552:~/jikken2/tcp-ip] j05052% ./client
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 = 
Disocnnected.
[nw0552:~/jikken2/tcp-ip] j05052%
  

関数の説明と動作全体のフロー

関数 説明
Connect ホストやソケットの確認をし,ソケット番号を返す
Disconnect コネクションを破棄する
Send Data 指定したファイル(SocketNumber)に"line"から始まるバッファのデータを格納する(最大strlen(line)バイト)
Recv Data 指定したファイル(SocketNumber)から"line"から始まるバッファのデータを読み込む(最大strlen(line)バイト)

フローチャート

課題3:inetdを使用しないサーバプログラムの作成

作成したプログラム

実行結果

[nw0552:~] j05052% ./client-daemon 
Connected.
Input Keyword = warning: this program uses gets(), which is unsafe.
yama
Keyword = [yama] / Data = [kawa]

Input Keyword = xxxx
Keyword = [xxxx] / Data = [yyyy]

Input Keyword = xxx
Keyword = [xxx] / Data = [ ]
[nw0552:~] j05052%
    

実装上の違い

    デーモン型のサーバプログラムではinetdが行っている, といった処理を追加しなければならない. inetdを使うと,要求があった時だけサーバを実行するので資源を節約できる.そのためレスポンスは遅くなる.デーモン型のサーバプログラムでは常にシステムに常駐しているのでレスポンスは速くなる.しかし,常にシステムに常駐しているので資源の消費してしまう.

課題4:HTTPクライアントの作成

作成したプログラム

実行結果

[nw0552:~/jikken2/tcp-ip] j05052% ./htmlgetter
warning: this program uses gets(), which is unsafe.
Input www server = www.u-ryukyu.ac.jp

Connected.
Input Path = /index.html
HTTP/1.1 200 OK
Date: Fri, 15 Dec 2006 13:11:28 GMT
Server: Apache/2.2.2 (Fedora)
Last-Modified: Thu, 14 Dec 2006 02:55:47 GMT
ETag: "122b27d-24df-a6f372c0"
Accept-Ranges: bytes
Content-Length: 9439
Connection: close
Content-Type: text/html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>〓〓〓〓〓〓〓w〓〓ョ〓z〓[〓〓〓y〓[〓W</title>
<style type="text/css">
<!--
    td {
         font-size: smaller;
    }
-->
</style>
<!-- <script language="javascript" src="preview/rollover.js"></script> -->
<style type="text/css">
</style>
<link href="preview/ryudai2.css" rel="stylesheet" type="text/css">
</head>
    
中略
      Copyright(C)1997-2006,UNIVERSITY OF THE RYUKYUS
      </div>
    </td>
  </tr>
  <tr align="right">
    <td colspan="4">
        <img src="http://inet1.osn.u-ryukyu.ac.jp/cgi-bin/counter/Count.cgi?md=8|dd=D|ft=3|df=preview.dat" align=absmiddle>
    </td>
  </tr>
</table>


</center>
</body>
</html>
Disocnnected.
[nw0552:~/jikken2/tcp-ip] j05052% 
    

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

作成したプログラム

実行結果

[nw0552:~/jikken2/tcp-ip] j05052% ./portscan 
warning: this program uses gets(), which is unsafe.
Input address : 133.13.59.52

Port number = 80 : use
Port number = 548 : use

Port Scan end
Disocnnected.
[nw0552:~/jikken2/tcp-ip] j05052%
    

課題6:バッファオーバーフローの実験

解決策

    gets()が持つこのような問題をバッファオーバーランや,バッファオーバーフローという.この問題を解決するにはgets()の変わりにfgets()を使えばよい.fgets()はバッファ長のチェックを行うのでバッファオーバーランは起らない. その他の対応としては,適切なメモリ保護機能を持ったOSやCPUを使用するか,プログラム実行時に常にバッファオーバーランを検知する機能や仕組みを利用するか,自らがバッファ長を常に意識したプログラミングを意識することが必要である.

具体例

    バッファオーバーラン攻撃を行う時は,送信データに不正なプログラムを挿入して,相手のコンピュータに実行させることにより,OS上の管理者権限を不正に奪取するなど様々な攻撃を行うことができる.具体的な事件には,2003年8月に世界規模で発生したWindowsのRPCサブシステムにおけるバッファオーバーランを悪用したMSBlastウイルスによる攻撃がある.

参考サイト

課題のページに戻る