Ruby: Fuzzing через все символы Юникода (UTF8 / Encoding / String Manipulation) - PullRequest
6 голосов
/ 15 декабря 2010

Я не могу перебрать весь диапазон символов Юникода.

Я искал везде ...

Я создаю фаззер и хочу вставить в URL все символы Юникода (по одному за раз).

Например: http://www.example.com?a=\uff1c

Я знаю, что есть некоторые встроенные инструменты, но мне нужно больше гибкости.

Если бы я мог сделать что-то вроде следующего: "\u" + "ff1c" было бы здорово.

Это самое близкое, что у меня есть:

char = "\u0000"
...

#within iteration

char.succ!

...

но после символа "\u0039", который является числом 9, я получу «10» вместо «:»

Ответы [ 2 ]

2 голосов
/ 12 января 2011

Вы можете использовать пакет для преобразования чисел в символы UTF8, но я не уверен, решит ли это вашу проблему.

Вы можете либо создать массив с числовыми значениями всех символов и использовать pack, чтобы получить строку UTF8, либо вы можете просто выполнить цикл от 0 до всего, что вам нужно, и использовать pack внутри цикла.

Я написал небольшой пример, чтобы объяснить себя.Приведенный ниже код выводит шестнадцатеричное значение каждого символа, за которым следует сам символ.

0.upto(100) do |i|
    puts "%04x" % i + ": " + [i].pack("U*")
end
1 голос
/ 12 февраля 2013

Вот некоторый более простой код, хотя и слегка запутанный, который использует тот факт, что Ruby преобразует целое число в правой части оператора << в кодовую точку.Это работает только с Ruby 1.8 для целочисленных значений <= 255. Он будет работать для значений больше 255 в 1.9. </p>

0.upto(100) do |i|
  puts "" << i
end
...