rloginで通信するプログラムを書いた
google先生に聞いてみた。
セキュリティ的に危険だからとか「聞かんでも知っとる」と言いたくなるようなセキュリティの話が続く。
雰囲気が似ている、telnetのライブラリがオマケで実装してるんじゃないかと、telnetlib rlogin とか探してみたが、芳しい情報は得られず。
そうして、30分ほどgoogle先生と問答した挙げ句、諦めることにした。
で、実装に対してrloginを実際に打ってみて、wiresharkでパケットを見てみた。見て分かったのだが、TCPの513番に繋いでsend/recvを繰り返している、だけ、のように見えた。時々、null(0x00)を送信する必要があるみたいで、stringだけではダメっぽいのだが。
で、結局pythonでえいやっと書いたら、動いてしまった。だいたいこんな感じ。
import socket import struct def rlogin_command(ip, port): s = socket.open(ip, int(port)) s.send("hogefuga") s.send(struct.pack("B", 0)) (以下略 / wiresharkで見えたパケットの通りに通信する) rlogin_command("192.168.0.4", "513")
結論:
struct pack がスゴく便利。
可変長バイト長の受信とか(mallocでチャンクをリストで繋げようかとか)、受信時のタイムアウト(select使うか、スレッドで行くか)とかcで考える時間があれば、pythonだと動く物ができてしまう。たぶん、perlやrubyやphpでも似たようなもんだと思うけど、もう戻れない。