GolangでP2Pをやろう、の下準備。 [プログラミング]
最終的に違法ファイルを流すP2Pを作るつもりではないので、それを目的にした人はどうもお疲れ様でした。
ともあれ、二点間でのP2Pを作ろうとしているわけですが、GUIをブラウザでやろうとしているので、基本的にWebサーバを作って情報をやり取りするということになっております。ホストとなるマシンがあるから正確にはP2Pではないのだけれど、直つなぎという点においては間違いはないかと。
GolangでUPnPで同じようなことをやっているソースがありそうなもんだなと探してみた。
https://github.com/syncthing/syncthing/blob/master/lib/upnp/upnp.go
syncthingというアプリがそのまま自分の実現したい用途に適合してそうだったけど、ここはお勉強も兼ねてやるので面倒臭くない程度で自分でやりたい。そしてライセンスが面倒なことになっていなければそのまま使えれば使っちゃおう。うぉ、8タブだよ、厳しいな。GitHubって8tabだったっけ?
ただ自分のグローバルIPを知って、ポートに穴開けて、ポートフォワーディングできればいいから、フルスタックなUPnPのライブラリを作るわけじゃないので、限られた動作ができればそれでいい。UPnPのプロトコルってどこにあるんだろ。RFCかな? とりあえずSOAPで送って云々というのはなんとなく見ているからそんなに難しいことをやっている気はしない。
グローバルアドレスはDHCPでも得られるみたいなことを書いてあったが、今回はUPnPができないと話にならないのでDHCPは使わない。
https://mdgw.hateblo.jp/entry/20080204/1202132356
SSDPを使うとあるが、HTTPリクエストをマルチキャストで投げればいいらしい。やっていることはそんなに難しいことではない。情報が入っているXMLのURLが送られるので、そこから取ると。そのあとのポートの開け方とかを知りたいんだけどな〜。
https://nazuna.sakura.ne.jp/software/upnp/get_device.html
古いドキュメントには標準化されていないと書いてあったが、そんなことはなかった。仕様は下記のどこかに埋まっているんだろうけど、探すの面倒だな。
https://openconnectivity.org/search/UPnP
これあたりかなぁ。
https://openconnectivity.org/developer/specifications/upnp-resources/upnp/internet-gateway-device-igd-v-2-0
どこぞでIPv6を使うとNAT越えも大丈夫とあるが、ようけわからんというか、IPv6から勉強しないといけないのと、IPv6の実装状況が一般的にどうなっているのかわからんというのが正直なところ。
とりあえず、グローバルIPと任意のポートを開けられたとしましょう。それを相手に教えるためにメールするわけだけど、SMTPをやるにも標準で用意されているからサンプルとかはたくさんあるでしょう。
https://www.write-ahead-log.net/entry/2017/08/02/233000
ASCIIなメールは送れるけど日本語はできないと書いてあるけど、まぁ当然ですよね。というか、それが当然と知っているのはメールクライアントをいじくったことがあるからで、基本的に歴史的にメールはASCII文字しか使えないということがあって、そのためにアルファベットなどにエンコーディングしないといけない。base64とかquoted-printableを使えばいいのだけれど、URLを送るだけだから面倒くさいからいいや。確かにGolangは標準ライブラリの作りが薄い…。
それでつなぎに行くところを伝えられたら、あとはWebサーバを立てられればOK。まぁそこからが何をするのかを考えるのが本体なのだが、メッセージングとファイルのやり取りはできればいいかなと思ったり。というか、それ以上のことは考えていません。双方向に情報を送れそうなので、やれることは多そうではある。HTTPだとファイルのやり取りはあまり効率的じゃなさそうですが、お手軽にやるにはそれで十分ですね。
ともあれ、二点間でのP2Pを作ろうとしているわけですが、GUIをブラウザでやろうとしているので、基本的にWebサーバを作って情報をやり取りするということになっております。ホストとなるマシンがあるから正確にはP2Pではないのだけれど、直つなぎという点においては間違いはないかと。
GolangでUPnPで同じようなことをやっているソースがありそうなもんだなと探してみた。
https://github.com/syncthing/syncthing/blob/master/lib/upnp/upnp.go
syncthingというアプリがそのまま自分の実現したい用途に適合してそうだったけど、ここはお勉強も兼ねてやるので面倒臭くない程度で自分でやりたい。そしてライセンスが面倒なことになっていなければそのまま使えれば使っちゃおう。うぉ、8タブだよ、厳しいな。GitHubって8tabだったっけ?
ただ自分のグローバルIPを知って、ポートに穴開けて、ポートフォワーディングできればいいから、フルスタックなUPnPのライブラリを作るわけじゃないので、限られた動作ができればそれでいい。UPnPのプロトコルってどこにあるんだろ。RFCかな? とりあえずSOAPで送って云々というのはなんとなく見ているからそんなに難しいことをやっている気はしない。
グローバルアドレスはDHCPでも得られるみたいなことを書いてあったが、今回はUPnPができないと話にならないのでDHCPは使わない。
https://mdgw.hateblo.jp/entry/20080204/1202132356
SSDPを使うとあるが、HTTPリクエストをマルチキャストで投げればいいらしい。やっていることはそんなに難しいことではない。情報が入っているXMLのURLが送られるので、そこから取ると。そのあとのポートの開け方とかを知りたいんだけどな〜。
https://nazuna.sakura.ne.jp/software/upnp/get_device.html
古いドキュメントには標準化されていないと書いてあったが、そんなことはなかった。仕様は下記のどこかに埋まっているんだろうけど、探すの面倒だな。
https://openconnectivity.org/search/UPnP
これあたりかなぁ。
https://openconnectivity.org/developer/specifications/upnp-resources/upnp/internet-gateway-device-igd-v-2-0
どこぞでIPv6を使うとNAT越えも大丈夫とあるが、ようけわからんというか、IPv6から勉強しないといけないのと、IPv6の実装状況が一般的にどうなっているのかわからんというのが正直なところ。
とりあえず、グローバルIPと任意のポートを開けられたとしましょう。それを相手に教えるためにメールするわけだけど、SMTPをやるにも標準で用意されているからサンプルとかはたくさんあるでしょう。
https://www.write-ahead-log.net/entry/2017/08/02/233000
ASCIIなメールは送れるけど日本語はできないと書いてあるけど、まぁ当然ですよね。というか、それが当然と知っているのはメールクライアントをいじくったことがあるからで、基本的に歴史的にメールはASCII文字しか使えないということがあって、そのためにアルファベットなどにエンコーディングしないといけない。base64とかquoted-printableを使えばいいのだけれど、URLを送るだけだから面倒くさいからいいや。確かにGolangは標準ライブラリの作りが薄い…。
それでつなぎに行くところを伝えられたら、あとはWebサーバを立てられればOK。まぁそこからが何をするのかを考えるのが本体なのだが、メッセージングとファイルのやり取りはできればいいかなと思ったり。というか、それ以上のことは考えていません。双方向に情報を送れそうなので、やれることは多そうではある。HTTPだとファイルのやり取りはあまり効率的じゃなさそうですが、お手軽にやるにはそれで十分ですね。
Twitterまとめ投稿 2019/07/09 [Twitter]
carbonhydratRT @wakeappjp: 7Pay の事件で「技術力や品質管理どうなってんの?」と思う方が多々いるのも仕方ないけど、大手と付き合ったことのある技術者のほとんどは、どうやってそういうザル仕様になったか、めちゃめちゃ理解してると思う。 全てとは言わないけど、内部の技術側の意見…07/08 09:17 carbonhydratRT @emorikousuke: 【参院選スタート!】 「若者の政治離れ」という言葉がおじさんの1人よがりワードになり、若者をより遠ざけているのでは? とか思う昨今。 若者に近づいてもらう為、せやろがいおじさんなりに考えて叫んでみました。 ▼今回言いたい事収まりきらな…07/08 09:40 carbonhydrat好きでやっていることならいいけど、働いている多くの人はそうじゃないしね。それに頑張ろうがそうでなかろうが、見合わない賃金がアニメ制作業界にはある。 https://t.co/AGNvYBemFp07/08 09:43 carbonhydratRT @momomocr: ジョイマンの高木さんのツイートはもはや140字の超短編小説を読んでると錯覚するくらい強い力がある。 https://t.co/0w2h7Uc9rs07/08 10:00 carbonhydrat寒くて腹を下すので、寝るとき毛布を敷いて寝てる。梅雨寒ってこんなに寒かったっけ?07/08 10:03 carbonhydratこれは酷い。杜撰もいいところだ https://t.co/YgahjuUSlo07/08 10:06 carbonhydratRT @pentaxxx: ご高齢の「識者」の方々には、若者に2年間の兵役が課せられる韓国でひきこもり30万人(主としてオンラインゲーム依存)という「現実」を教えて差し上げたい。 https://t.co/7PkgKYERbL07/08 10:09 carbonhydratRT @hahaguma: https://t.co/wNZtG4DEGR「アベノミクスは国民をビンボーにしただけ。それがバレるのが怖くて,統計はかさ上げし,株価もかさ上げし,アベノミクスと無関係の雇用改善を自分の手柄と喧伝している。安倍総理にとって,国民は騙す対象でしかないの…07/08 10:16 carbonhydratアベノミクスの「成果」を示すデータ集 - モノシリンの3分でまとめるモノシリ話 https://t.co/TCiI7zTKh2 やっぱり実感はデータにも出ている。わけもわからないで自民党支持する若者ってデータを読めないし読もうともしない。若者なのに保守とか意味わからん。07/08 10:22 carbonhydratRT @born_ug2: ガイナックスが存在しなかった世界線のエヴァンゲリオン。どこかのアニメ会社が100パー担当している。 https://t.co/wqFuwsX2bc07/08 10:23 carbonhydratRT @tadataka_k: 冒険乙女ミアちゃん https://t.co/RyTWpbk5vd07/08 19:09
2019-07-09 05:01
コメント(0)