◇2003/11の日記◇

New← もっとファイル送受信 / ファイル送受信 →Old


2003/11/20 もっとファイル送受信

あれっ……なんで、前回更新からこんなに日にちが経っているのっ!?Σ(゚Д゚;≡;゚д゚)
忙しかったんです、ゴメンナサイ。_| ̄|○
いや、今も現在進行形で忙しいんですが。
ちなみに、いつまで忙しいのかというと、来年の2月頭まで。_| ̄|≡○スポーン
文字通り、盆も正月もなさそうです……。


さて、今回は、メッセ以外で他人とファイルをやり取りする方法でしたね。
まず、一つ目の方法としては、WEBサーバを自分で立ててしまうという方法があります。
いわゆる、自宅サーバというやつですね。
要は、自分のマシンでWEBサーバを動かして、そこにファイルを置き、DLして欲しい相手に自分のアドレスをメッセ等で教えて、WEBブラウザ等でアクセスしてもらうという方法です。


この方法を行うには、まず、WEBサーバをインストールする必要があります。
フリーで有名どころと言えば、ApacheAN HTTPdといったところでしょうか。
Windows2000やXPを使用している方は、IIS(InternetInformationService)という、MicrosoftのWEBサーバがOSのCDの中に入っていると思います。
が、色々あって、IISは素人にはオススメできません。
玄人にオススメできるかといえば、むしろ全くオススメできないのですが。w


初心者さんは、割と簡単に設定できるAN HTTPdのほうを使ってみるといいと思います。
慣れてきたら、ActivePerl等をインストールして、CGIを使用できるようにして、色々遊んでみても面白いでしょう。
HP用にCGIを使用できるレンタルサーバを借りてる人は、CGIをアップロードする前に、自分のマシンで試すことも出来ますしね。


で、このWEBサーバを立てる方法ですが、これだと、自分からの送信が出来ても、他人からの受信ができません。
相手もWEBサーバを立ててくれていればいいのですが、世の中そうそううまくいかないようにできているものです。^^;
そこで、もう一歩踏み込んで、FTPサーバを立てるという方法があります。
Tiny FTP Daemonあたりが有名でしょうか。


FTPサーバを立てれば、相手にFTPクライアントで接続してもらい、HPをアップロードするのと同じ要領で自分のマシンにデータを送ってもらうことが出来ます。
が、相手がFTPクライアントも使えないような素人さんだった場合は……もっと他の方法を考えなければなりませんが。^^;


ルータを使用している方は、WEBサーバの場合はTCPの80番FTPサーバの場合はTCPの21番を開けておいて下さいね。
ポートが開いてないと、外からのアクセスがルータで止まってしまって自分のマシンまで届かないので、アドレスを教えても、「見えないYO!!ヽ(`Д´)ノ」とブチ切れられること請け合いです。


また、相手に教えるアドレスですが、IPアドレスを教えるのは面倒くさいしわかりにくいという方のために、ダイナミックDNSというサービスがあります。
無料で設定できるところも何ヶ所かありますので、探してみてください。
ダイナミックDNSに関しては、こちらが参考になるかと思います。


あ、CATV等の回線では、こういったサーバプログラムを立ててはいけないと規約に書いてあるところもありますので、気をつけてくださいね。
帯域幅が大量に消費されることを恐れてのことなのかもしれませんが……。
TCPプロトコル自体が、必ず通信相手か自分のどちらかがサーバになるという仕組みになっているので、相手から接続してくるタイプの通信は全部ダメってことになっちゃうので、インターネットの楽しみ半減ですけどね……。


シェラ0x19歳は、更新の間が開きすぎると、文章の書き方を忘れてしまうようです。(;´Д`)


2003/11/01 ファイル送受信

さて、今日はいきなり本題です。w
前回更新のRegnessemについて、投稿フォームから、このような質問を頂きました。

シェラさんが紹介なさってた「Regnessem」。
元偽メッセユーザーとして是非使いたいのですがこれってファイル送信できなくないですか?
ポート開けば良いんでしょうけどポート番号とか分からないです><
使い方を詳しく日記で教えてください( ;д⊂)


う〜ん、私はRegnessemの開発者ではないのですが……まぁ、わかる範囲で書いてみます。w
以前にも、メッセンジャーのファイル転送の問題を、2002/112002/12の日記でちょっと書いてますので、まずはそちらをご覧ください。
それをふまえて、もう少し具体的に説明してみましょうか。


ちなみに、これから説明するのは、旧MSNプロトコルの場合になります。
新しいMSNプロトコルのファイル送受信の仕組みは、旧プロトコルとは色々変わっているようですが、調べていないのでわかりません。^^;


Regnessemのファイル送受信の仕組みも、新しいMSNプロトコルの機能をどこまで実装しているのかが謎です……。
Regnessemは、まだα版であって、β版ですらないので、まだまだ発展途上ですからね〜。
この辺りの話は、RegnessemのサポートBBSの、ファイル送信に関する話題のスレッドを見てみるといいでしょう。


まず、マシンAからマシンBにファイル送信を行うとします。
そして、マシンAはルータを介しての接続であると仮定します。
この時、メッセージと同じようにメッセンジャーのサーバを介して送られるデータの流れは、次のようになります。


1.マシンAからマシンBへ、マシンA「このファイルを送りたいので、許可してくだちぃ」
2.マシンBからマシンAへ、マシンB「了承
3.マシンAからマシンBへ、マシンA「それじゃあ、送る道を作りたいので、私のこのアドレスのこのポートに直接接続してね♪


ここで、マシンBからマシンAへと、ファイル送受信のための、それぞれのマシンを直接結ぶ道が作られるわけですが、最初に問題となるのは、上の3で渡された、マシンAのアドレスです。


マシンAは、ルータを介してインターネットに接続しているため、マシンA自身のIPアドレスは、ローカルのIPアドレスになります。
マシンBは、マシンAから渡されたIPアドレスに接続しようと試みますが、もちろんそのアドレスはマシンAにとってのローカルなものですので、マシンBからは見えず、マシンAに接続することはできません。


この問題を解決するには、マシンAが、自分が繋がっているルータのWAN側IPアドレスを取得できる必要があります
本家メッセンジャーは、ルータがUPnP(ユニバーサルプラグアンドプレイ)という機能を内蔵していて、OSにもUPnPの機能が組み込まれていれば、ルータのWAN側IPアドレスを取得することができます。
(※UPnP機能が組み込まれているOSは、現在の所、アップデート済のWindowMeかWindowsXPくらいのようです)
まずは、OSやルータのファームウェアをアップデートしてみるのも、一つの手かもしれません。


Regnessemも、何らかの方法でWAN側IPアドレスを取得しているようですが、それをどのように実装しているのかは、ソースも見ていないので謎です。^^;
この辺りの実装がどうなっているのかによっても、接続できるかどうかが変わってくると思います。


要するに、旧プロトコルでは、送信側がルータを使用している場合は、ルータのWAN側IPを取得できる何らかの手段がないと、ファイルの送受信はできないということです。
(※新プロトコルでは、逆からの接続もあるようですので、この限りではありません)


そして、次に問題となるのが、マシンAが教えてくれたポート番号です。
マシンAが、UPnP等により正しいWAN側IPアドレスを取得できている場合には、こちらのほうが問題になります。


マシンBはマシンAに教えてもらった通り、指定されたIPアドレスの指定されたポートに接続しようとします。
これは、マシンAが繋がっているルータまではデータが届きますが、そこからが問題です。
そのデータを受け取ったルータは、ローカル内のどのマシンにそのデータを送ればいいのかが、わからないのです。
マシンAが繋がってるルータに、マシンCも繋がっていた場合、どちらにそのデータを送ればいいのか、ルータには判断できないんですね。


この問題を解決するには、俗に言う、「ポートを開けておく」ことが必要になります。
つまり、WAN側から特定のポートへの接続要求があった場合、あらかじめそのデータを送るマシンを決めておくのです。


このポートを開けるという作業は、ルータで行うのですが、メーカによってこの機能の呼び名が色々ありますので、自分の使用しているルータのマニュアルを、よく読んでおきましょう。
ポートを開けることの出来る機能としては、「NAT」とか「IPマスカレード」とか「ポートフォワーディング」とか「DMZ」とか「バーチャルホスト」とか書いてあると思います。


ただ、どこのポートを使うかわからないからと言って、全てのポートを割り当てたりしてしまうと、セキュリティ面での色々な問題がありますので、指定が可能な場合は、使用するポートだけを開けておくのがいいでしょう。
MSNメッセンジャーのファイル送受信で使用するポート番号は、TCPの6891番〜6900番です
WAN側からTCPの6891番〜6900番に接続要求があったら、マシンAのTCPの6891番〜6900番に、それぞれ送ってやるように設定すればいいですね。


なんだか、長くなってしまいましたが……。(汗
今回は、MSNメッセンジャーでのファイル送受信に限った、しかも旧プロトコルの話でしたが、他人にファイルを渡したい場合には、他にもいくつか方法がありますので、次回はそれを書いてみようかなと思います。
いつものように、予定は未定なんですが。w


シェラ0x19歳は、ファイル交換に四苦八苦している方々を応援しています。