2009-11-20 7 views
7

次の* nixコマンドは、hexdumpコマンドへのIPとポート(127.0.0.1:80)の16進表記をパイプします。UNIXヘキサダンプのエンディアン

-eフラグを使用すると、入力を解析できます。この例では、IPの最初の3オクテットを符号なし小数点以下にパーズしています。最後のオクテットも符号なし10進数に解析されますが、その後にコロンが続きます。最後に - 問題がどこにあるのか - ポートの2バイトは、改行が続く単一の符号なし10進数として解析されます。

このコマンドを実行しているシステムのエンディアンに応じて、結果は異なります。ビッグエンディアンシステムはポート80を正しく表示します。リトルエンディアンシステムではポート20480が表示されます。

-eで任意のフォーマット指定を許可しながらエンディアンを認識するようにhexdumpを操作する方法はありますか?

+0

質問をしているので、プラットフォームがリトルエンディアンの場合、最後の2バイトを入れ替えて入力を準備する必要はないと思いますか? –

+0

バイトスワップが必要なように見えますか? – shrizza

答えて

6

私はそれがhexdumpに対してで行うことができることを知りませんが、それはPerlで十分 簡単です:

 
$ printf '\x00\x50' | perl -nE 'say unpack "S>"' 
80 
$ printf '\x00\x50' | perl -nE 'say unpack "S<"' 
20480 

あなたはあなたが望む形式を取得することを微調整することができます。 ( はperlの5.10が必要です「と言う」。perlの< 5.10の印刷を使用してください)

(私は「質問に答える」ではない なかったためdownvoteしたい人のために明確にするため。私はOPで置き換えることを示唆しています perlを使ってhexdumpを実行する必要がある場合)。

+0

私はC/Perl/Pythonから離れて、もっとツールベースのアプローチに固執したいと思います。おそらくxxdの代替ですか? – shrizza

関連する問題