UNIXは,開発当初からネットワークをサポートするOSとして開発された.現在でも次のような主要なネットワーク通信を行うためのコマンドが標準で存在する.
windows上では,windows用のtelnetプログラムであるteratermを使用することができた.もちろんUNIXマシンには本家であるtelnetコマンドが用意されている.使い方は次の通り.
telnet マシン名.ドメイン名 (例: telnet cstu.nit.ac.jp) telnet IPアドレス (例: telnet 202.18.170.30)
実行例は次のようになる
% telnet cstu.nit.ac.jp ←あるマシンのコマンドプロンプトでtelentコマンドを入力 Trying 202.18.172.80... Connected to cstu.nit.ac.jp. Escape character is '^]'. SunOS 5.8 login: xxxxxxx ←別のマシンのユーザ名を入力 Password: ←別のマシンのパスワード入力 (画面上には入力文字が表示されない) Last login: Tue Nov 15 17:18:03 from 10.8.62.11 ←成功するとこんな表示 Sun Microsystems Inc. SunOS 5.8 Generic Patch October 2001 You have mail. Erase set to Backspace cstu% ←別のマシンのコマンドプロンプトが表示された.
telnetを終了して,元のマシンのコマンドプロンプトに戻るには,
cstu% logout
他にexitやbyeコマンドでも終了できる
cstuではインストールされていないが,暗号化された遠隔操作のためのコマンドも存在している.telnetは通信を平文で送受信しているため,通信路上の誰かがパケットを監視していれば,その通信内容が読まれてしまう.例えばパスワード入力などが盗聴されるおそれがある.最近のマシンでは,telnetを使用できないように設定しておき,その代わりにsshだけを利用できるようにするマシンも多い.
windowsマシン上ではffftpが使用できたが,UNIXマシンでは本家のftpコマンドが利用できる.使い方は次の通り.
ftp マシン名.ドメイン名 (例: ftp cstu.nit.ac.jp) ftp IPアドレス (例: ftp 202.18.170.30)
実行例は次の通り
% ftp cstu.nit.ac.jp ←あるマシンでftpコマンド入力 Connected to cstu.nit.ac.jp (202.18.172.80). 220 leo FTP server (SunOS 5.8) ready. Name (cstu.nit.ac.jp:xxxxxx): ←エンターキーを押す 331 Password required for xxxxx. Password: ←別マシンのパスワードを入力 230 User tamura logged in. Remote system type is UNIX. Using binary mode to transfer files. ftp> ←別マシン上のFTPコマンド入力状態になった.
このftp>は,ftp内部のコマンド待ち状態を表し,通常のコマンドプロンプトとは異なる.ftpの内部コマンドとは,ファイルの取得や送信など,ファイル転送用のものだけが用意されており,ftpの実行中の時だけ実行できるコマンドである.一般のコマンドプロンプトの時には使用できない.ftp内部で使用できるコマンドの一覧はサーバによっても異なるが,helpコマンドで確かめることができる.
ftp> help ←ヘルプコマンドの入力 Commands may be abbreviated. Commands are: ! debug mdir sendport site $ dir mget put size account disconnect mkdir pwd status append exit mls quit struct ascii form mode quote system bell get modtime recv sunique binary glob mput reget tenex bye hash newer rstatus tick case help nmap rhelp trace cd idle nlist rename type cdup image ntrans reset user chmod lcd open restart umask close ls prompt rmdir verbose cr macdef passive runique ? delete mdelete proxy send ftp> 次のコマンド入力待ち
さらに各コマンドの詳細を知りたい場合には,次のようにコマンド名も指定した上でヘルプコマンドを実行すればよい.
ftp> help get get receive file ftp>
主立ったftp内部のコマンドは次のものがある.
get ftpサーバ側のファイル名 ファイルの取得コマンド put クライアント側のファイル名 ファイルの送信コマンド binary ファイルの転送をバイナリモードに設定 ascii ファイルの転送をアスキーモードに設定 ls サーバ側でlsコマンドを実行する cd サーバ側のディレクトリ名 サーバ側でcdコマンドを実行する bye ftpの終了コマンド
ファイルの転送には,大きくふたつの転送モードがある.
初期状態ではバイナリモードに設定されているサーバが多い.あるデータを間違ったモードで転送すると,例えばアスキーモードのままプログラムファイルなどを転送すると,転送操作自体は正常終了してしまうが,送られたデータの内容が壊れているので注意すること.文字だけといってもワープロの文書ファイルもバイナリモードでないと転送できない.逆にhtml 文書などはアスキーモードで転送できる
ファイルの転送先は,サーバにログインした場合のホームディレクトリである.別のディレクトリに転送したい場合には,ログインしたときと同様に,cdコマンドを利用してカレントディレクトリを移動する必要がある.
ftpサーバの中には,ユーザ名とパスワードを必要とせず,誰でも利用できるものが存在する.それをanonymous(匿名)ftpサーバと呼ぶ.フリーソフトやデータを公開する時などに利用される.
anonymous FTPサーバは次のように利用する.
% ftp anonymousサーバ名 ←あるマシンでftpコマンド入力 Connected to xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx). 220 xxxxx FTP server ready. Name (xxxxxxxxx:xxxx): anonymous ←ユーザ名としてanonymousまたはftpと入力 331 Guest login ok, send your email address as password. Password: ←パスワードではなく,自分のメールアドレスを入力 230 Guest login ok, access restrictions apply. Remote system type is UNIX. Using binary mode to transfer files. ftp> ←サーバ上のFTPコマンド入力状態になった.
ポイントは,自分のユーザ名ではなく「anonymous」または「ftp」と入力すること.パスワードを要求されるが,そこで自分のメールアドレスを入力することである.入力したメールアドレスは,パスワードとして使用されるわけではない.実はそこで何も入力せずエンターキーだけを押してもアクセス可能である.しかし,そのanonymous FTPサービスを無料で提供してくれている相手のために,自分が誰なのかを名乗ることが礼儀として習慣とされている.
UNIXマシンは,当初から複数のユーザが共有して使用できるように設計され ていた.自分の他のユーザに関する情報を調べるためのコマンドが存在する.
fingerコマンドは次のように使用する.
finger 調べたいユーザ名
実行結果は次のとおり
cstu$ finger tamura ←コマンド入力 Login name: tamura In real life: Tamura Hitoshi Directory: /home/faculty/tamura Shell: /bin/csh On since Nov 16 14:24:20 on pts/6 from 10.8.62.11 ←前回(今回)ログイン情報 Mail last read Wed Nov 16 14:14:29 2005 No Plan. cstu$ ←コマンドプロンプトに帰ってきた.
UNIXマシンでは,telnetやsshコマンドを利用して,ネットワークを通じて同時に何人ものユーザがログインしていることがある.今この瞬間誰がログインしているかは次のwhoコマンドで調べることができる.実行結果は次のとおり
cstu$ who root console 9月 14日 18:59 (:0) yoshioka pts/5 11月 16日 14:15 (10.10.0.229) tamura pts/6 11月 16日 14:24 (10.8.62.11) root pts/2 9月 14日 19:00 (:0.0) root pts/4 9月 17日 10:59 (:0.0) cstu$ ←コマンドプロンプトに帰ってきた.
誰かログインしているかだけではなく,その人が今何をしているかも表示するコマンドがwコマンドである.
実行結果は次のとおり
cstu$ w 午後 2時27分 稼働 65 日間, 18:31, 3 ユーザー, 平均負荷率: 0.04, 0.06, 0.07 ユーザー 端末 開始時刻 待機 JCPU PCPU 現プロセス 名 root console 2005年 9月14日 63日間 52 52 /usr/dt/bin/dtscreen -mode blank yoshioka pts/5 午後 2時15分 11 telnet sstu tamura pts/6 午後 2時24分 w root pts/2 2005年 9月14日 60日間 14 /sbin/sh root pts/4 2005年 9月17日 60日間 5 5 tail -f cachemgr.log cstu$ ←コマンドプロンプトに帰ってきた.
今現在だけでなく,過去少し前までのログイン情報の履歴を見ることもできる.誰が,何時何分にどのマシンからどれだけログインしていたかを表示する.
last ←全員分の表示 last 表示したいユーザ名 ←指定してユーザに関する情報だけ表示
実行結果は次のとおり
cstu$ last root root console :0 Wed Sep 14 18:59 ログイン中です。 root console Sun Sep 11 16:37 - 16:37 (00:00) root console :0 Sun Sep 11 09:51 - 16:37 (06:46) root console :0 Thu Sep 1 19:55 - 19:55 (00:00) root console Thu Sep 1 19:51 - 19:52 (00:00) root console Thu Sep 1 16:35 - 16:35 (00:00) root console :0 Thu Sep 1 16:28 - 16:29 (00:00) root console :0 Sat Aug 13 13:30 - 13:45 (00:14) root console :0 Sat Aug 13 12:53 - 13:27 (00:34)
ユーザ情報を表示してみて,例えばwコマンドで今誰がログインしているのか確かめた後,その人とマシン上でキーボードを使って会話をすることもできる.
talk チャットしたい相手のユーザ名 talk ユーザ名@ホスト名 ←別マシンのユーザの場合
このコマンドを実行すると,次の画面になる.
[相手からの応答を待っています。] -------
ここで,呼び出した相手の画面には,次の接続要求が表示される
Message from Talk_Daemon@cstu at 14:44 ... talk: connection requested by xxxxxx@cstu. talk: respond with: talk xxxxxx@cstu
このメッセージを見て,相手もtalkコマンドを実行してくれればチャットが始まる.そのままキーボードをタイプすると,自分と相手の画面にその文字が表示され,会話を行うことができる.自分のタイプした文章が画面の上半分に,相手がタイプした文章が画面の下半分にリアルタイムに表示される.
会話を終了するには,コントロールキーとcを同時に押すこと(Ctrl-Cと表現される操作である.).二人とも終了すれば,talkが終了する.片一方が終了しただけだと,先ほどの接続要求が再度表示される.
ネットワーク上のマシンが生きているのかどうか確かめるコマンドがある
ping 相手ホスト名 ping IPアドレス
実行結果は次のようになる
cstu$ ping astu.nit.ac.jp astu.nit.ac.jp is alive
ただし,外部のホストへの問い合わせは迷惑になるためしてはいけない.そもそもファイアウォールで止められていることも多い.さらに,外部に一般公開されているサーバなどではpingに反応を返さないように設定されていることもある.
pingに反応しないように設定されている理由は,プログラムによって大量のpingを繰り返し特定のホストへ行うことで,相手ホストや相手のネットワークを麻痺させる攻撃手法がよく行われるようになったためである.
インターネットはIPアドレスによって通信先を特定している.それでは人間にとっては不便なため,人間に理解しやすいホスト名・ドメイン名(FQDN)を割り当てて,DNSサーバによって相互変換させる仕組みが構築されている.
DNSサーバへ問い合わせて,名前からIPアドレス,あるいは逆にIPアドレスから名前に変換してもらうコマンドがhostコマンドである.
host ホスト名やドメイン名 ←名前からIPアドレスを調べる(正引き) host IPアドレス ←IPアドレスから名前を調べる(逆引き)
実行例は次の通り.
cstu$ host www.nit.ac.jp www.nit.ac.jp is an alias for babbage.nit.ac.jp. babbage.nit.ac.jp has address 202.18.170.16
逆引きの例は次の通り.
cstu$ host 202.18.170.16 16.170.18.202.in-addr.arpa domain name pointer babbage.nit.ac.jp.
hostコマンドをより詳細にしたものがdigコマンドである.(正確にはdigコマンドを省略してものがhostコマンド)
dig ホスト名ドメイン名 ←名前からIPアドレスを調べる(正引き) dig -x IPアドレス ←IPアドレスから名前を調べる(逆引き)
実行例は次のとおり
cstu$ dig www.nit.ac.jp ←www.nit.ac.jpを検索してみた. ; <<>> DiG 9.2.2 <<>> www.nit.ac.jp ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42041 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 8, ADDITIONAL: 8 ;; QUESTION SECTION: ;www.nit.ac.jp. IN A ;; ANSWER SECTION: www.nit.ac.jp. 86400 IN CNAME babbage.nit.ac.jp.←注意 babbage.nit.ac.jp. 86400 IN A 202.18.170.16 ←結果 ;; AUTHORITY SECTION: nit.ac.jp. 86400 IN NS leo.nit.ac.jp. nit.ac.jp. 86400 IN NS stu.nit.ac.jp. nit.ac.jp. 86400 IN NS astu.nit.ac.jp. nit.ac.jp. 86400 IN NS cstu.nit.ac.jp. nit.ac.jp. 86400 IN NS estu.nit.ac.jp. nit.ac.jp. 86400 IN NS mstu.nit.ac.jp. nit.ac.jp. 86400 IN NS kanda.nit.ac.jp. nit.ac.jp. 86400 IN NS nit-scan.nit.ac.jp. ;; ADDITIONAL SECTION: leo.nit.ac.jp. 86400 IN A 202.18.172.30 stu.nit.ac.jp. 86400 IN A 202.18.172.70 astu.nit.ac.jp. 86400 IN A 202.18.172.60 cstu.nit.ac.jp. 86400 IN A 202.18.172.80 estu.nit.ac.jp. 86400 IN A 202.18.172.50 mstu.nit.ac.jp. 86400 IN A 202.18.172.40 kanda.nit.ac.jp. 86400 IN A 172.30.14.8 nit-scan.nit.ac.jp. 86400 IN A 202.18.172.11 ;; Query time: 4 msec ;; SERVER: 202.18.172.30#53(202.18.172.30) ;; WHEN: Wed Nov 16 15:22:55 2005 ;; MSG SIZE rcvd: 352
ネットワークを通じて,あるマシンへ接続する場合にどのような通信経路をたどっているのかを表示するコマンドがある.これを見ると,どのルータを介してそのマシンへ接続されているのか順を追って表示している.間に入るルータの数をホップ数と呼び,ネットワークにおける論理的な距離を表す.
traceroute ホスト名・ドメイン名・IPアドレス
実行結果は次のとおり
cstu$ traceroute cstu.nit.ac.jp traceroute to cstu.nit.ac.jp (202.18.172.80), 30 hops max, 38 byte packets 1 silver (192.168.10.1) 0.294 ms 0.149 ms 0.136 ms 2 10.8.62.240 (10.8.62.240) 0.939 ms 0.683 ms 0.644 ms 3 uhura.nit.ac.jp (202.18.172.80) 0.821 ms 0.701 ms 0.659 ms
このコマンドは管理コマンドの一種である.一般ユーザでも実行できる場合,現在のマシンが行っているネットワーク通信の状況を調べることができる.
netstat ←現在開いているソケットを表示 netstat -r ←経路表を出力 netstat -s ←統計情報を出力 netstat -i ←このマシンで使用されているネットワーク装置の表示
このマシンに接続されているネットワークデバイスの詳細を調べることができる.
ifconfig デバイス名
デバイス名は,netstatコマンドで調べることができるので,それを指定する実行結果は次のとおりで,そのデバイスに割り当てられたIPアドレスやMACアドレスを知ることができる.
cstu$ ifconfig eri0 eri0: flags=1000843mtu 1500 index 2 inet 202.18.172.30 netmask ffffff00 broadcast 202.18.172.255
これは管理コマンドで,一般ユーザは実行できない.ネットワークに流れているパケット(通信内容の断片)を監視して内容を読むことができる.例えば通信相手別にパケットを整理したりすることで,通信内容を再現することもできる.悪用されれば,パスワードなども盗聴されてしまうことがある.
このようなソフトをスニッファと呼ぶ.これらは管理者しか実行できないので,通常は盗聴の心配をしても仕方がない.しかし,個人所有のパソコンを持ち込むことができるようなネットワークの場合には,そのパソコンを使って誰でも盗聴できる可能性がある.重要な情報は暗号化を行うなどの対策が必要である.