SSブログ

golangでUPnPのポートフォワーディングをしてみる5−グローバルアドレスを取ってみる。 [プログラミング]

今までルータのXMLが腐っているとかで、UPnPでポートフォワーディングするのが怪しくなってきているわけですが、続けていきますよ一応。まぁブツ切れの検証コードしか作れませんが、環境がまちまちなのでこっちで解決するには面倒臭すぎるというのはありますね。

ポートフォワーディングをしてみる前に、簡単にできそうなグローバルアドレスを取りに行くことをします。これは結構他でもやられているので、それをGolangに落とせばいいという話ですよね。

ともあれ、NECのルーターのUPnP用のポートのサービスが死にやすいということが発覚して、やる前にルーターを再起動しないといけないという体たらくで…。まぁNECのAtermは80番ポートを解放するだけで数日でルーターが死んでインターネットのアクセスができなくなるくらいですから、頑丈さからするとめっちゃ弱いと言わざるを得ません。ソフトの作りも悪いんだろうけど、多分スペックも足りてないんでしょうね。

あまり不満を言っていてもしょうがないので実際やってみますね。今回も事前に調べた体で、ルーターのIPとPOSTを食らわせるURLの一部を用意しておきます。それらを調べるコードは前回のコードでやっていますけど、繋げちゃうとどこがおかしくて動かないかどうかが分からなくなってしまうので、検証コードとしては短いほうがいいと思っています。



先にも言った通り、ルーターのローカルアドレスやらが分かっていないと動きません。具体的には
routerAddr
serviceType
controlURL
をルーターの設定に合わせて書き直さないと動きません。

それと返すXMLが腐っていなければ(同じフォーマットであれば)、問題なくグローバルアドレスが取れるかと思われます。大したことやってない割には苦労していますね。とりあえず苦労した点などは言っておきましょうか。


一番の問題はXMLを受けて解析するところなんですが、一応"encoding/xml"パッケージが解析してくれはします。ただ問題なのが解析の元となるXMLの構造をGolangの構造体で示してあげないといけない、という苦行が待ち構えているわけです。実際送られてきたXMLが下のようなものです。これも複数のルーターで調べたわけではないので、構造が違う可能性はあります。

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
	<SOAP-ENV:Body>
		<m:GetExternalIPAddressResponse xmlns:m="urn:schemas-upnp-org:service:WANIPConnection:1">
			<NewExternalIPAddress>27.95.xxx.xxx
		</m:GetExternalIPAddressResponse>
	</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

これが洗練された方法があるわけでもなく、泥臭く構造体を定義するというクソッタレな仕様になっているわけです。どこかでXMLなんてタヒねばいいのにって書いてあったのですがその通りだと思います。かと言って情報交換するのにきちんと規定されたフォーマットってのは他にはあまりないわけで。

https://text.baldanders.info/golang/unmarshalling-xml/

今回は全体の構造体を定義せずに、そのパスだけを提示してグローバルアドレスだけを取ってきています。なので、正直言って全部の構造体を定義して全部入れ込むということは、今の自分にはできません。というかやりません。だってグローバルアドレスを取りたいだけなので、他の情報はいらないですから。そんなわけで構造体の定義は全体的にはしていません。

type root struct {
    NewExternalIPAddress string `xml:"Body>GetExternalIPAddressResponse>NewExternalIPAddress"`
}


でBody、GetExternalIPAddressResponse、NewExternalIPAddressと階層を示しているんですが、これで示せば他の構造は無視できるんですね。逆にいうとこの方法だと他の情報が取れない。

このやり方にしても、構造体の定義をするにしても、?xmlというタグとEnvelopeというタグは無視されているのはよくわかりません。?xmlは省略するのはわかるとして、次の階層になるEnvelopeというタグに関しては省略してしまうのはどうなのかなと思わなくはありません。でも、GolangのUnmarshal()がそういう仕組みになっているから仕方ありません。そうだからそうとしか言えないです。

とりあえず、これでルーターのグローバルアドレスを取ることはできるはずです。できなかったら変えるべき所を自分の環境に変えられていないか、ルーターの動作が死んでいるかですね。もしかするとルーターの再起動が必要かもしれません。XMLが返ってきているのに、構造体の中に入っていない場合は、XMLの構造がきちんとしていないということだと思います。


次はルータのポートフォワーディングをします。やる手順としては今回と大して違いがないはずです。今回と違う所を重点的に書いておこうと思います。

タグ:Golang
コメント(0) 
共通テーマ:パソコン・インターネット

Twitterまとめ投稿 2019/07/30 [Twitter]


コメント(0) 

Twitterまとめ投稿 2019/07/29 [Twitter]


コメント(0) 

Twitterまとめ投稿 2019/07/28 [Twitter]


コメント(0) 

Twitterまとめ投稿 2019/07/27 [Twitter]


コメント(0) 

Twitterまとめ投稿 2019/07/26 [Twitter]


コメント(0) 

ちょっとアジる。 [徒然]

今回の参議院選挙は大勝ちも大負けもなかった感じはする。自民党としては一息ついているのだろうが、結局憲法改正の2/3を得られなかったのは当然だろう。そこまで上手くいくはずはない。

自分は安倍憎し的に、アンチ自民党で投票した。受かりそうで自民党と対決するような政党のおばちゃんを選んだ。フォトショ補正がバリバリの選挙ポスターであったが、まぁ誰でもそれはやっているので許そう。まぁ民意は反映できる結果となったのでよしとしよう。

自民党は元から好きではないのだが、今回の自民党もひどかったので追い落とそうと思っていた。でも、あれだけの暴挙をしておきながら安倍支持は落ちないので、他の人は何で支持するのか疑問であった。他の政党が信じられないという消極的な理由だけで自民党支持というのはどうかと思っている。

自民党の政策で日本が良くなった形跡というものは、とりあえず安倍政権下ではほとんどない。不祥事はあったもののいいことはほとんどなかった。なので奴らに続けさせる意味はない。加計森友問題にしたってオフホワイトで終わらされたわけで、関与したという噂が出た時点で普通はもうダメなレベルだったんだよね。

でも嘘も通せば道理引っ込むという感じで、例の指摘に当たらないという逃げ方を何度もした。いや、言われている通りなんだけど、国に利益を与えないで私腹を肥やすとか一番政治家がしちゃいけないことじゃないか。まだ、国が良くなっているなら少しぐらい自分の利益を確保するのはまだわかるけど、問題山積で先送りがデフォルトで何も良くなっていない。

安倍は自分が可愛くて自分の考えが通ればいいと思っているのが見え見えだ。民主主義がどうとかいうのは二の次で、景気を良くしようというアベノミクスとやらも完璧に失敗してしまっている。少なくとも成功はしていない。公金をつぎ込んで株価を高値維持するという行為はそこまで成功しているとは思えず、良くて現状維持程度だ。超低金利の政策も銀行が疲弊するばかりでどうしようもない。

自民党はロビー活動しかしないので嫌いだ。その最たる例が安倍でそれが首相になっているのでどうしようもない。他に首相になろうという人もいないので、自民党は正直使えない。前まではまだ持ち回りで悪い状況になったら逃げれば済んでいたものの、安倍になってからは嘘ついて開き直りという悪循環をして首相に留まり続けている。正直、支持する人の利益に適っているとも思えないんだが、それでもネトウヨなどは支持し続ける。

確かに自民党以外にきちっと政権を任せられる政党がいるとは思えんよ。それに民主党もバラバラになってしまい任せられるとも思わないよ。でも、まだ自民党が野党に落ちていた時期の方がましだったんじゃないか。安倍は悪夢の時期だったらしいが、特に自民党が支配していた時期に比べて悪くなったことってそんなになかったんじゃないかな。むしろロビー活動がなくなって少しは国会が健全化したってのは、一般的な国民にとって良かったんじゃないかと思う。

このままでは日本は自民党と老人に食いつぶされるぞ。というか、今でも若者が自民党を支持している意味がわからないんだよなぁ。今までの自民党のしてきたことを知らないのはしょうがないかもしれないけど、今を見て若い人が選ぶ理由って何もないはずなんだけどな。


コメント(0) 
共通テーマ:ニュース

Twitterまとめ投稿 2019/07/25 [Twitter]


コメント(0) 

ポケモン、オブテインだぜ! [徒然]

仕事で英語を使わないといけなくなりそうなのだけれど、メールくらいならどうにかなるかもしれない、と思ってはいる。前はちょっとだけ英語メールを書いたのだけれど、それがそのまま使われたかどうかはよくわからない。

英語はいくつかの言語が組み合わさっているらしいから、語彙的に同じものがいくつもあってニュアンスは違うんだろうけど、正直あまり嬉しくない。getと言われればわかるけど、obtainを使われると何だったっけとちょっと戸惑い気味。文法はそんなに難しいものではないから、単語がわかれば大体はわかるんだけど、細かいことを言い出すとやっぱり言語は難しい。

読むのと書くのではどっちが難しいというのがあるが、メールに関しては書くほうが難しくない気はしている。というか、自分が持っている語彙でしか表現できないのだが、それでも伝わりはする。読む方はいきなり知らない言葉が出てくるので、辞書がない時点ではやっぱり書くほうが楽な気がする。読むのは時間がかかってもいいなら、辞書を引きまくれば大意はわかるけど、何もなしに初見で云々できるほど語彙があるわけではないのです。

現実的な時間で処理するという意味では、読むのも書くのも厳しかったりするのですが、今はGoogle翻訳とかもあることですし、読む方はそんなでもないかなと思ったりはする。翻訳家ですら翻訳ソフトを使っているという話ですし、使わないというのは時間のロスでしかないとは言えますね。

とりあえず使うかどうかはまだ不明なのですが、こんな本を買ってみました。

説得できる英文Eメール200の鉄則 IT時代のビジネス通信文はこう書く

説得できる英文Eメール200の鉄則 IT時代のビジネス通信文はこう書く

  • 作者: 倉骨 彰
  • 出版社/メーカー: 日経BP
  • 発売日: 2003/11/13
  • メディア: 単行本



説得できる英文Eメール200の鉄則 IT時代のビジネス通信文はこう書く

説得できる英文Eメール200の鉄則 IT時代のビジネス通信文はこう書く

  • 出版社/メーカー: 日経BP社
  • 発売日: 2003/11/17
  • メディア: Kindle版


内容がピンポイントだと本の値段も高めになって嬉しくないのですが、お役立ちの程度からすると大学入試の英単語やイディオムの本を買うよりかはいいと思っています。パラパラと読んでいますが、本当に語彙がないなぁと愕然とします。昔はもう少し覚えてたのかなと思ったりはするのですが、今からでも覚え直す覚悟でやるしかないですね。まぁ辞書と翻訳ソフトはあるので、あとは気合いだけなんだと思いますが。

コメント(0) 
共通テーマ:資格・学び

Twitterまとめ投稿 2019/07/24 [Twitter]


コメント(0)