■16進⇒10進⇒ASCII変換
※10進変換は別途表示することも出来るが、
今回は内部処理のみ。
10進⇒16進⇒ASCII変換
http://d.hatena.ne.jp/labunix/20130106
ASCII⇒10進⇒16進変換
http://d.hatena.ne.jp/labunix/
■「unhexer.sh」とした。
$ cat myscripts/unhexer.sh
if [ "$#" -lt 1 ];then
echo "Usage $0 Hex" >&2
exit 1
fi
echo $@ | sed s/"0x\| "//g | \
sed s/".."/"&\n"/g | \
tr '[A-Z]' '[a-z]' | \
for He in `xargs`;do \
echo $((0x${He})) | \
awk '{printf "%c",$1}'
done;echo
■以下のように手軽に遊べる。
※実際の用途としては、コンテンツフィルタの16進を文字で表現したいとき。
$ ./myscripts/hexer.sh Kisei-Chu
4b697365692d436875
$ ./myscripts/unhexer.sh 4b697365692d436875
Kisei-Chu
$ ./myscripts/hexer.sh Hello World
48656c6c6f576f726c64
$ ./myscripts/unhexer.sh 48656c6c6f576f726c64
HelloWorld
■例えば、Snortのルールで使う時はこんな感じ。
$ ./myscripts/hexer.sh Tor | sed s/".."/"& "/g | sed s/"^\| \$"/"\|"/g
|54 6f 72|
$ ./myscripts/unhexer.sh 54 6f 72
Tor
$ for key in GET HEAD POST CONNECT;do \
./myscripts/hexer.sh "$key" | \
sed s/".."/"& "/g | \
sed s/"^\| \$"/"\|"/g; \
done
|47 45 54|
|48 45 41 44|
|50 4f 53 54|
|43 4f 4e 4e 45 43 54|
$ echo "|47 45 54|
|48 45 41 44|
|50 4f 53 54|
|43 4f 4e 4e 45 43 54|" | sed s/"|"//g | xargs echo -n | ./myscripts/unhexer.sh `xargs`
GETHEADPOSTCONNECT
■空白、アスタリスク、制御文字を除けば相互変換が出来ます。
$ for n in `seq 32 126`;do \
echo "$n" | \
awk '{printf "0x%x\t%c\t%3d\n",$1,$1,$1}'; \
done | \
awk '{print $2}' | \
grep -v "32\|\*" | \
for Ch in `xargs -0`;do \
echo -n "$Ch"; \
echo $(printf "%3d" \"$Ch) | \
awk '{printf "\t%3d\t0x%x\n",$1,$1}'; \
done | awk '{print $3}' | \
for list in `xargs`;do \
echo -ne "$list\t"; \
./unhexer.sh "$list"; \
done
0x21 !
0x22 "
0x23 #
0x24 $
0x25 %
0x26 &
0x27 '
0x28 (
0x29 )
0x2b +
0x2c ,
0x2d -
0x2e .
0x2f /
0x30 0
0x31 1
0x32 2
0x33 3
0x34 4
0x35 5
0x36 6
0x37 7
0x38 8
0x39 9
0x3a :
0x3b ;
0x3c <
0x3d =
0x3e >
0x3f ?
0x40 @
0x41 A
0x42 B
0x43 C
0x44 D
0x45 E
0x46 F
0x47 G
0x48 H
0x49 I
0x4a J
0x4b K
0x4c L
0x4d M
0x4e N
0x4f O
0x50 P
0x51 Q
0x52 R
0x53 S
0x54 T
0x55 U
0x56 V
0x57 W
0x58 X
0x59 Y
0x5a Z
0x5b [
0x5c \
0x5d ]
0x5e ^
0x5f _
0x60 `
0x61 a
0x62 b
0x63 c
0x64 d
0x65 e
0x66 f
0x67 g
0x68 h
0x69 i
0x6a j
0x6b k
0x6c l
0x6d m
0x6e n
0x6f o
0x70 p
0x71 q
0x72 r
0x73 s
0x74 t
0x75 u
0x76 v
0x77 w
0x78 x
0x79 y
0x7a z
0x7b {
0x7c |
0x7d }
0x7e ~