El siguiente comando * nix canaliza una representación hexadecimal de un IP y puerto (127.0.0.1:80) en el comando hexdump.Endianness en Unix hexdump
printf "\x7F\x00\x00\x01\x00\x50" | hexdump -e '3/1 "%u." /1 "%u:" 1/2 "%u" "\n"'
El distintivo -e permite un formato arbitrario para analizar la entrada. En este caso, estamos analizando los primeros tres octetos del IP en decimales sin signo seguidos de un punto. El octeto final también se analiza en un decimal sin signo, pero va seguido de dos puntos. Finalmente, y aquí es donde reside el problema, los 2 bytes para el puerto se analizan como un único decimal sin signo seguido de una nueva línea.
Dependiendo de la endianidad del sistema que ejecuta este comando, el resultado será diferente. Un sistema big-endian mostrará correctamente el puerto 80; mientras que un sistema little-endian mostrará el puerto 20480.
¿Hay alguna forma de manipular hexdump para estar al tanto de la endianancia y al mismo tiempo permitir la especificación de formato arbitrario a través de -e?
Supongo que no es aceptable tener que preparar la entrada intercambiando los dos últimos bytes si la plataforma es little-endian, ya que está haciendo la pregunta? –
¿Parece que un byte-swap será necesario? – shrizza