2003年03月11日(火) [過去の今日]
#1 irchat-pjでNAT越しのDCC SEND
うちのルータはBizIP8のISDNとその29マスクビットのネットワークとY!BBのADSLとLANとで総計4つのネットワークを繋いでるので、LinuxカーネルのIRCモジュールを使ってもうまくDCC出来なかったりした。しかし、一応DCC SENDを送った時点でlocalhostはDCCの準備が出来てるはずだし、相手方に転送してるポートとADSL側のIPアドレスさえ渡してあげればDCCは可能なはずである。
付属のdcc.cを見てみたが、どうも自分のIPアドレスは指定できないようで、IRCサーバのIPをあげるとそこに問い合わせてるように見えた。しかし、返り値としては自分のIPアドレスを単一の整数で表したものを返してくる、ように見える。なぜならirchat-pjはそのIPアドレスを相手に伝えてる、ということはわかったからだ。
ということでいじった結果が これ 。 dccプログラムにユーザが設定したdccportとdccaddrを渡してやり、なおかつperlでdccaddrを単一の整数に変換したものをDCC SENDに用いるようにした。perlを使わなきゃいけなかったのは悔しいのだが、elispはほとんどさわった事無いのでしょうがない、と自分に言い訳。そのperlスクリプトは こちら 。 これで.emacsなどに
(setq dccaddr "192.168.0.1") (setq dccport "6667")
のようにグローバルIPとルータで転送してるポートを書いてやれば通った。かなり強引な方法ではあるのだが……。
しかし、普通のルータならポート番号だけ指定できれば、あとはdccコマンドに任せてIP取りに行けば済むんだろうな……たぶん。
(@708)