Crear archivos binarios en UNIX

Esta pregunta estuvo ahí por un tiempo y pensé que debería ofrecer algunos puntos de bonificación si puedo hacer que funcione.

¿Qué hice? ...

Recientemente en el trabajo, escribí un analizador que convertiría un archivo binario en un formato legible. El archivo binario no es un archivo Ascii con10101010 caracteres. Ha sido codificado en binario. Entonces si hago uncat en el archivo, obtengo lo siguiente -

[jaypal~/Temp/GTP]$ cat T20111017153052.NEW 
==?sGTP?ղ?N????W????&Xx1?T?&Xx1?;
?d@#e?
      ?0H????????|?X?@@(?ղ??VtPOC01
cceE??k@9??W傇??R?K?i2??d@#e???&Xx1&Xx??!?
blackberrynet?/??!

??!

??#ripassword??W傅?W傆??0H??
                            #R??@Vtc@@(?ղ??n?POC01

Así que uséhexdump utilidad para que el archivo muestre el siguiente contenido y lo redirija a un archivo. Ahora tenía mi archivo de salida, que era un archivo de texto que contenía valores hexadecimales.

[jaypal~/Temp/GTP]$ hexdump -C T20111017153052.NEW 
00000000  3d 3d 01 f8 73 47 54 50  02 f1 d5 b2 be 4e e4 d7  |==..sGTP.....N..|
00000010  00 01 01 00 01 80 00 cc  57 e5 82 00 00 00 00 00  |........W.......|
00000020  00 00 00 00 00 00 00 00  87 d3 f5 13 00 00 00 00  |................|
00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 01 00 10  |................|
00000040  01 01 0f 00 00 00 00 00  26 58 78 31 00 b3 54 c5  |........&Xx1..T.|
00000050  26 58 78 31 00 b4 3b 0a  00 00 ad 64 13 40 01 03  |&Xx1..;....d.@..|
00000060  23 16 65 f3 01 01 0b 91  30 19 48 99 f2 ff ff ff  |#.e.....0.H.....|
00000070  ff ff ff 02 00 7c 00 dc  01 58 00 a0 40 40 28 02  |.....|...X..@@(.|
00000080  f1 d5 b2 b8 ca 56 74 50  4f 43 30 31 00 00 00 00  |.....VtPOC01....|
00000090  00 04 0a 63 63 07 00 00  00 00 00 00 00 00 00 00  |...cc...........|
000000a0  00 00 00 65 45 00 00 b4  fb 6b 40 00 39 11 16 cd  |[email protected]...|
000000b0  cc 57 e5 82 87 d3 f5 52  85 a1 08 4b 00 a0 69 02  |.W.....R...K..i.|
000000c0  32 10 00 90 00 00 00 00  ad 64 00 00 02 13 40 01  |2........d....@.|

Después de toneladas deawk, sed ycut, el script convirtió los valores hexadecimales en texto legible. Para hacerlo, utilicé el posicionamiento de desplazamiento que marcaría la posición inicial y final de cada parámetro convertido. El archivo resultante después de toda conversión se ve así

[jaypal:~/Temp/GTP] cat textfile.txt 
Beginning of DB Package Identifier: ==
Total Package Length: 508
Offset to Data Record Count field: 115
Data Source: GTP
Timestamp: 2011-10-25
Matching Site Processor ID: 1
DB Package format version: 1
DB Package Resolution Type: 0
DB Package Resolution Value: 1
DB Package Resolution Cause Value: 128
Transport Protocol: 0
SGSN IP Address: 220.206.129.47
GGSN IP Address: 202.4.210.51
¿Por qué lo hice

Soy ingeniero de pruebas y validar manualmente los archivos binarios fue un gran problema. Tuve que analizar manualmente los desplazamientos y usar una calculadora para convertirlos y validarlos contra Wireshark y GUI.

Ahora la parte de la pregunta

Deseo hacer lo contrario de lo que hice. Este era mi plan:

Tiene un archivo de texto de entrada fácil de leer que tendríaParameters : Values. El usuario simplemente puede poner valores junto a ellos (por ejemplo, Fecha sería un parámetro y el usuario puede dar la fecha que desea que tenga el archivo de datos). El script cortará toda la información relevante (información proporcionada por el usuario) del archivo de texto de entrada y los convertirá en valores hexadecimales. Una vez que el archivo se haya convertido a valores hexadecimales, deseo codificarlo nuevamente en binario.

Primero se realizan tres pasos

Problem

na vez que mi script convierte el archivo de texto de entrada en un archivo de texto con valores hexadecimales, obtengo un archivo como el siguiente notice que puedo hacercat en es).

[visdba@hw-diam-test01 ParserDump]$ cat temp_file | sed 's/.\{32\}/&\n/g' | sed 's/../& /g'
3d 3d 01 fc 73 47 54 50 02 f1 d6 55 3c 9f 49 9c
00 01 01 00 01 80 00 dc ce 81 2f 00 00 00 00 00
00 00 00 00 00 00 00 00 ca 04 d2 33 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10
01 01 0f 00 00 07 04 ea 00 00 ff ff 00 00 14 b7
00 00 ff ff 00 00 83 ec 00 00 83 62 54 14 59 00
60 38 34 f5 01 01 0b 58 62 70 11 60 f6 ff ff ff
ff ff ff 02 00 7c 00 d0 01 4c 00 b0 40 40 28 02
f1 d6 55 38 cb 2b 23 50 4f 43 30 31 00 00 00 00
00 04 0a 63 63 07 00 00 00 00 00 00 00 00 00 00

Mi intención escodificad este archivo convertido en unbinari para que cuando lo hagacat en el archivo, obtengo un montón de valores basura.

[jaypal~/Temp/GTP]$ cat temp.file 
==?sGTP?ղ?N????W????&Xx1?T?&Xx1?;
?d@#e?
      ?0H????????|?X?@@(?ղ??VtPOC01
cceE??k@9??W傇??R?K?i2??d@#e???&Xx1&Xx??!?
blackberrynet?/??!

??!

Entonces, la pregunta es esta. @ ¿Cómo lo codifico de esta forma?

¿Por qué quiero hacer esto?

No tenemos muchos mensajes GTP (Protocolo de túnel GPRS) en producción. Pensé que si hacía ingeniería inversa en esto, podría crear efectivamente un generador de datos y crear mis propios datos.

Suma las cosas

Puede haber herramientas sofisticadas, pero no quiero pasar mucho tiempo aprendiéndolas. Han pasado alrededor de 2 meses, he empezado a trabajar en la plataforma * nix y solo estoy manejando sus herramientas eléctricas comosed yawk.

o que sí quiero es ayuda y orientación para que esto suceda.

Gracias de nuevo por leer! 200 puntos esperan a alguien que pueda guiarme en la dirección correcta. :)

Archivos de muestr

Aquí hay una muestra de OriginalArchivo binari

Aquí hay una muestra deInput Text File que permitiría al usuario introducir valores

Aquí hay una muestra deArchiv que crea mi script después de que se complete toda la conversión del archivo de texto de entrada.

¿Cómo cambio la codificación deFile 3 aFile 1?

Respuestas a la pregunta(5)

Su respuesta a la pregunta