スカイブロガーネットワークアドレスの秘密ツイートシェアはてブ1送るPocketこの記事は公開されてから半年以上経過しています。情報が古い可能性がありますので、ご注意ください。こんにちは、幅広い視野を持つエンジニアを目指しています田中と申します。今日はネットワークアドレスの扱い方を見ていきます。特定のIPアドレスが、特定のネットワークの範囲内にあるかどうか調べたい。[IPアドレス]のように使いますが、私はある日誤って以下のように入力してしまいました。[正の整数]結果は以下のようになります。バイトのデータ:Ctrl+C^C10進数ドット区切りのIPアドレス以外をパラメータとして与えてもエラーにはなりませんでした。上記はWindowsのpingコマンドの結果ですが、Linuxなどのpingコマンドでも同様の結果となります。以上のことから、pingコマンドは32bitのIPアドレスを10進数として解釈して処理しているのではないかと考え、自分のプログラムやスクリプトにも応用できるのではないかと考えました。DNSの”8.8.8.8′′を10進数の32ビットの符号なし整数に変えてpingにパラメータとして与えてみます。10進数のint型0を32bitで表すと以下のようになります。000010進数のint型8を2進数で表すと1000なので”8.8.8.8′′は以下であると考えました。1000これを10進数に直します。134744072これをpingのパラメータに与えてみます。3ms予想通りの結果となりました。intとして扱い、TCP/IPネットワークの情報を算出してみます。IPアドレスを32bit値に変換IPアドレスの各オクテット(8bit)をint型の数字と見なし、4つ並べます。8これを第一オクテットから順に、24ビット左シフト、第二オクテットを16ビット左シフト、第三オクテットを8ビット左シフトしてORをとります。intとしてIPアドレスの範囲を調べることができました!pingのソースコードを読んでみたLinuxのpingのソースコードが見つからなかったのでFreeBSDのソースコードを読んでみます。order形式で入れる。(8.8.8.8)...と表示しているinet_ntoa()とinet_aton()が32bit数値とASCII文字列(10進数ドット区切りIPアドレス)の変換をしていそうです。オンラインマニュアルのinet(3)にありました。not....マニュアルによると16進数でも解釈できるとのことなのでやってみます。7ms16進数でもできました!参考にさせていただいたサイト様(TCP/IP情報取得シェルスクリプトをそのまま使わせて頂いています)http://qiita.com/harasou/items/5c14c335388f70e178f5記事は以上になります。このたびはご覧戴き、ありがとうございました。スカイアーチネットワークス株式会社AWS・クラウド導入における構築から監視・運用保守までをマネージドサービスで提供する、スカイアーチネットワークスの公式サイト。AWS・クラウドを始め、豊富なサーバー管理の経験と安心のセキュリティ対策、専門エンジニアの確かな知識で、お客様のビジネスの成長をサポートします。AWS・クラウド導入における構築から監視・運用保守までをマネージドサービスで提供する、スカイアーチネットワークスの公式サイト。AWS・クラウドを始め、豊富なサーバー管理の経験と安心のセキュリティ対策、専門エンジニアの確かな知識で、お客様のビジネスの成長をサポートします。インスタンスが発表されました。この記事が気に入ったらいいねしよう!最新記事をお届けします。コメントをキャンセルメールアドレスが公開されることはありません。-一覧表を作ってみよう-SHA1とSHA2RECOMMENDこちらの記事も人気です。