2009-11-20 14 views
7

Aşağıdaki * nix komutu, bir IP ve portun (127.0.0.1:80) hexdump komutuna bir hex temsilini temsil eder.Unix hexdump'ta Endianness

printf "\x7F\x00\x00\x01\x00\x50" | hexdump -e '3/1 "%u." /1 "%u:" 1/2 "%u" "\n"' 

-e bayrağı, girişin ayrıştırılması için isteğe bağlı bir biçime izin verir. Bu durumda, IP'nin ilk üç sekizliğini imzasız ondalıklara, ardından bir noktaya ayırıyoruz. Son sekizli de imzasız bir ondalık olarak ayrıştırılır, ancak bunu bir kolon izler. Son olarak - ve bu sorunun yattığı yerdir - bağlantı noktası için 2 bayt, tek bir işaretsiz ondalık, ardından bir satırsonu olarak ayrıştırılır.

Bu komutu yürüten sistemin endianitesine bağlı olarak, sonuç farklılık gösterecektir. Büyük uçlu bir sistem, liman 80'i uygun bir şekilde gösterecek; küçük bir endian sistem 20480 portunu gösterir.

Hâlâ-hüzükten haberdar olmak için, hexadump'u endianiteden haberdar etmek için herhangi bir yol var mı?

+0

Soruyu sorduğunuz için platformun ender bayt olması durumunda girdiyi son iki bayt değiştirerek hazırlamanızın kabul edilemeyeceğini var sayıyorum. –

+0

Bayt-takas gerekli gibi mi görünüyor? – shrizza

cevap

6

Ben HexDump ile yapılabilir bilmiyorum ama perl'de yeterince kolay:

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

Eğer arzu biçimi almak için o ince ayar yapabilirsiniz. ( perl 5.10 gerektirir 'demek'. Perl < 5.10 için baskısını kullanın)

(ı. I OP yerine öneriyorum "sorusuna cevap" değil did çünkü downvote isteyen kişi için netleştirmek için Perdeyle birlikte hexdump. Gerekirse azaltın.)

+0

C/Perl/Python'dan uzak durmak ve daha çok araç tabanlı bir yaklaşıma bağlı kalmak istiyorum. Belki bir xxd alternatifi? – shrizza