パスワードを忘れた? アカウント作成
452263 journal

dcdcの日記: 触発されてIRCクライアントをいじったにょ!

日記 by dcdc

なんとなく、ICQがどうのという話題に触発されて、
猿はIRCクライアント環境を増やす気になっちゃったのですにょ。

別にP2Pで話したいことはほとんどないし、
身内専用IRCサーバがあるので事足りちゃうし。

emacs用のクライアントもあるし、FireWallのなかでも
CHOCOAサマは靴下入れてあれば会話は出来るし。
まぁ、そんな感じで、いまだにIRC。
ICQもだいぶ初期にIDだけはとったけど。

で、emacs用IRCクライアントとしては、irchat-pjを使っていましたが、
DCCがNAT越えで使うことができないのと、
ぱっと見の仕様上、改造するのも大変そうに見えたので、
他には無いかな、とliece-1.4.10に手を出してみた。

DCCそのものはシンプルだったので、これなら、といじってみる。

※注意※
正しいインプリメントではありません。あくまで、必要にかられての対処です。
きちんとやるなら、きちんと設計しましょう(笑)

rfcはさらっとしか読んでないので、プログラム読んで得た知見として(笑)
DCCで送る場合の挙動を書くと、


  1.    
  2. DCCアプリ(ldcc)は、ポート、ファイル名を与えて起動され、待ち状態となる。
       
  3. PRIVMSGで送り先の人へ、ファイル名、取りに来て欲しいマシンのIPアドレス(10進コード化されたもの、なんていうんだろ)、ポート、ファイルサイズを知らせる。
       
  4. PRIVMSGを見て、送り先の人がアクセスしてくる。

こんな感じかな?

受け取る場合は、LANからWANへ出られれば、送り側のFireWall次第となります。

※問題その1
ルータ使ってて問題となるのは、まずはポート。
WAN側からのアクセスを全部自分のマシンにフォワードしてりゃ問題は無いのですが、
そんな怖いことは出来ないので、特定のポートでやり取りしたいと。
そのポートの指定そのものは、liece側に用意してあったので、liece-dcc-portを利用。
もっとも、実際はポートの初期値を指定するだけで、勝手にインクリメンタルされるという罠付。
※対処その1:インクリメンタルされないように該当コードを削る(おぃ)
liece-dcc.el内、liece-command-dcc-send の最後、liece-dcc-portを操作しているところ

あとはルータに穴あけて、ポートフォワードしておく。

※問題その2
次に、PRIVMSGで相手に通知する情報の中で、取りに来て欲しいマシンのIPアドレスを
送っているわけですが、これが実際はLANでのIPアドレスを送っちゃっている。
つまり、相手側は取りに行こうと思っても外から見えているところのIPアドレスじゃないところへアクセスしに行っちゃうわけですな。
で、これのためにliece-system-fqdnameとかあるのかと思ったら、用途が違うようで(結局何に使われるのか?までは追ってない)。
しょうがないので、まずは試しに、PRIVMSGを加工しているところをいじって、
外から見えているところのIPアドレスを送るようにする。
※対処その2
liece-dcc.el内、liece-dcc-send-filter のPRIVMSG作っているところ。hostを直接書き換え(おぃ)
とりあえず、これでやり取りできることを確認。

さて、きちんとやるには、ここから、


  1.    
  2. NAT環境かどうかの変数を追加
       
  3. NAT環境の時、固定したFQDNがあるならそちらを使う、もしくはIRCサーバ接続時のメッセージから、自分のマシンのFQDNを自動取得
       
  4. FQDNからIPアドレスを取得、10進コード化
       
  5. 上記の対処ルーチン動作へ切換

みたいなことをすればいいと思うのですが、時間ないのとアプリ見渡すのが
しんどいのと、emacs lisp はいじる程度のことしかできないので、
手動(笑)で10進コードをある変数に与えれば動くように改造しただけにしました。

また、この他にも、ldccの仕様なのか本体の仕様なのかわかりませんが、同一ポートでは複数のldccを同時起動はできないみたいな、という問題もあります。
#転送開始されりゃできるのかもしれない?

とりあえず、気が向いたら、lieceの方に提案するかも、しないかも。
#してくれる人は大歓迎(笑)作ってくれる人は大大歓迎。

※ここでいっている10進コード化について
よくあるIPアドレスの表記は、192.168.0.1 ですが、
これを192*256^3+168*256^2+0*256+1といった計算で出したもののことです。
専門用語ではなんと言うんでしょう(ググれ?)

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

私は悩みをリストアップし始めたが、そのあまりの長さにいやけがさし、何も考えないことにした。-- Robert C. Pike

読み込み中...