The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  правила/FAQ  поиск  регистрация  вход/выход  слежка  RSS
"Генератор случайных чисел по SH"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Генератор случайных чисел по SH"  +/
Сообщение от universite email(ok) on 16-Май-11, 17:33 
Скрипт генерирует произвольный адрес ipv6 в пределах заданной сети $network_v6
На баше работает, но надо уйти от него на sh.


array=( 1 2 3 4 5 6 7 8 9 0 a b c d e f )

rnd_ipv6_block ()
{
## need bash!
    a=${array[$RANDOM%16]}${array[$RANDOM%16]}${array[$RANDOM%16]}${array[$RANDOM%16]}
    b=${array[$RANDOM%16]}${array[$RANDOM%16]}${array[$RANDOM%16]}${array[$RANDOM%16]}
    c=${array[$RANDOM%16]}${array[$RANDOM%16]}${array[$RANDOM%16]}${array[$RANDOM%16]}
    d=${array[$RANDOM%16]}${array[$RANDOM%16]}${array[$RANDOM%16]}${array[$RANDOM%16]}
    ipv6=$network_v6:$a:$b:$c:$d
}


Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Линейку в студию?"  +/
Сообщение от Andrey Mitrofanov on 16-Май-11, 18:46 
> Скрипт генерирует произвольный адрес ipv6 в пределах заданной сети $network_v6
> На баше работает, но надо уйти от него на sh.

Даже и не знаю... На баше "в режиме sh", типа, вот...
>     ipv6=$network_v6:$a:$b:$c:$d

$ sh
sh-3.2$ shuf -i 0-255 -n 1
130
sh-3.2$ printf "%x:%x:%x:%x",1,1,1,1
0:0:0:0,1,1,1,1sh-3.2$ printf "%x:%x:%x:%x\n",1,1,1,1
0:0:0:0
,1,1,1,1sh-3.2$
sh-3.2$ printf "%x:%x:%x:%x\n" 1 1 1 1
1:1:1:1
sh-3.2$ shuf -i 0-65535 -n 1
29285
sh-3.2$ printf "%x:%x:%x:%x\n" `shuf -i 0-65535 -n 1` `shuf -i 0-65535 -n 1` `shuf -i 0-65535 -n 1` `shuf -i 0-65535 -n 1`
fed6:678d:8bf8:cc60
sh-3.2$ net=1:1:1
sh-3.2$ printf "$net:%x:%x:%x:%x\n" `shuf -i 0-65535 -n 1` `shuf -i 0-65535 -n 1` `shuf -i 0-65535 -n 1` `shuf -i 0-65535 -n 1`
1:1:1:9889:78f2:d487:ce2a
sh-3.2$ _

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5. "Линейку в студию?"  +/
Сообщение от universite email(ok) on 17-Май-11, 01:45 
> sh-3.2$ shuf -i 0-65535 -n 1
> 29285


# shuf -i 0-65535 -n 1
shuf: Команда не найдена.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

10. "Линейку в студию?"  +/
Сообщение от Andrey Mitrofanov on 17-Май-11, 11:08 
> shuf: Команда не найдена.

$ dpkg -S bin/shuf
coreutils: /usr/bin/shuf
abm@router-ufk:~$ shuf --version
shuf (GNU coreutils) 6.10
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Автор программы -- Paul Eggert.

................>8................

$ printf "%x:%x:%x:%x\n" $RANDOM $RANDOM $RANDOM $RANDOM
258c:7fcf:2a14:5288
$ _


ЗЫЖ Для эстетов :)) :

$ random64k() { echo $((RANDOM+32768*(RANDOM%2))); }
$ printf "%x:%x:%x:%x\n" `random64k` `random64k` `random64k` `random64k`
c6a8:886f:4a35:bfb
$ _

PPS:
od  -N 2 -x /dev/urandom
PPPS:
od -N 8 -x /dev/urandom|sed 's/^[^ ]\+ //;s/ 0+/ /g;s/ /:/g;q'

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

35. "Линейку в студию?"  +/
Сообщение от Andrey Mitrofanov on 02-Июн-11, 20:09 
> sh-3.2$ printf "$net:%x:%x:%x:%x\n" `shuf -i 0-65535 -n 1` `shuf -i 0-65535 -n
> 1` `shuf -i 0-65535 -n 1` `shuf -i 0-65535 -n 1`
> 1:1:1:9889:78f2:d487:ce2a
> sh-3.2$ _

...кстати, "пролетая над Череповцом"(с), придумалось:

$ printf "%x:%x:%x:%x\n" `shuf -i 0-65535 -n 4`
b606:8e3a:c795:dcd6
$ _

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

2. "Генератор случайных чисел по SH"  +1 +/
Сообщение от pavlinux (ok) on 17-Май-11, 00:53 
>[оверквотинг удален]
> rnd_ipv6_block ()
> {
> ## need bash!
>     a=${array[$RANDOM%16]}${array[$RANDOM%16]}${array[$RANDOM%16]}${array[$RANDOM%16]}
>     b=${array[$RANDOM%16]}${array[$RANDOM%16]}${array[$RANDOM%16]}${array[$RANDOM%16]}
>     c=${array[$RANDOM%16]}${array[$RANDOM%16]}${array[$RANDOM%16]}${array[$RANDOM%16]}
>     d=${array[$RANDOM%16]}${array[$RANDOM%16]}${array[$RANDOM%16]}${array[$RANDOM%16]}
>     ipv6=$network_v6:$a:$b:$c:$d
> }
>

 
#!/bin/sh

network_v6="2001:0db8:11a3:09d7"

rnd_ipv6_block () {

  HEX="tr -dc a-f0-9 < /dev/urandom | head -c 4"
  ipv6=$network_v6:$(eval $HEX):$(eval $HEX):$(eval $HEX):$(eval $HEX);
}


Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Генератор случайных чисел по SH"  +/
Сообщение от DeadLoco (ok) on 17-Май-11, 01:35 
>  tr -dc a-f0-9 < /dev/urandom

Класс!

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Генератор случайных чисел по SH"  +/
Сообщение от pavlinux (ok) on 17-Май-11, 01:38 
>>  tr -dc a-f0-9 < /dev/urandom
> Класс!

А то! :)

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

6. "Генератор случайных чисел по SH"  +/
Сообщение от universite email(ok) on 17-Май-11, 01:47 
>>  tr -dc a-f0-9 < /dev/urandom
> Класс!

не совсем


# tr -dc a-f0-9 < /dev/urandom | head -c 256
e²fec1f10080fa9dc74bbfa675dd0155²6²b32b3d2²751b1599d4²19379fa800²0cb²a9²07a4623ab266933b08bc5e28ce²96f8ab7094653256727d29133a676d6e²ca²c6d1d846a4b899b9a02461d9c964fda41bbcc6ca9eab3d713b624247780679a316a18e48d600a8ed1²5b99f268²929c651e5²f1078f0c7fbe912b6ae0

Какие-то левые символы проскакивают...
Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

7. "Генератор случайных чисел по SH"  +/
Сообщение от DeadLoco (ok) on 17-Май-11, 01:56 
> Какие-то левые символы проскакивают...

# tr -dc a-f0-9 < /dev/urandom | tr "[=2=]" "2" | head -c 256

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "Генератор случайных чисел по SH"  +/
Сообщение от universite email(ok) on 17-Май-11, 02:02 
>> Какие-то левые символы проскакивают...
> # tr -dc a-f0-9 < /dev/urandom | tr "[=2=]" "2" | head
> -c 256

Замечательно, спецсимволы не появляются, но время генерации 20 ipv6 заметно тормозит.


# time /bin/sh random-ipv6-address-generator.2.sh
0.445u 0.843s 0:01.14 112.2%    44+1178k 0+0io 0pf+0w

Скрипт на баше:


#time /usr/local/bin/bash random-ipv6-address-generator.sh
0.000u 0.007s 0:00.04 0.0%      0+0k 0+0io 0pf+0w

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

11. "Генератор случайных чисел по SH"  +/
Сообщение от pavlinux (ok) on 17-Май-11, 12:15 
>>> Какие-то левые символы проскакивают...

Кривая консоль у тя.
>[оверквотинг удален]
> Замечательно, спецсимволы не появляются, но время генерации 20 ipv6 заметно тормозит.

dd if=/dev/urandom bs=256 count=1 conv=ascii,lcase | tr -dc a-f0-9 | head -c 4


Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

13. "Генератор случайных чисел по SH"  +/
Сообщение от universite email(ok) on 17-Май-11, 12:28 
>>>> Какие-то левые символы проскакивают...
> Кривая консоль у тя.

Добро пожаловать в мир совместимых консолей и кроссплатформенных команд.

>>[оверквотинг удален]
>> Замечательно, спецсимволы не появляются, но время генерации 20 ipv6 заметно тормозит.
> dd if=/dev/urandom bs=256 count=1 conv=ascii,lcase | tr -dc a-f0-9 | head -c
> 4

Это быстро генерится.

Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

14. "Генератор случайных чисел по SH"  +/
Сообщение от pavlinux (ok) on 17-Май-11, 12:37 
>>>>> Какие-то левые символы проскакивают...
>> Кривая консоль у тя.
> Добро пожаловать в мир совместимых консолей и кроссплатформенных команд.
>>>[оверквотинг удален]
>>> Замечательно, спецсимволы не появляются, но время генерации 20 ipv6 заметно тормозит.
>> dd if=/dev/urandom bs=256 count=1 conv=ascii,lcase | tr -dc a-f0-9 | head -c
>> 4
> Это быстро генерится.

Но есть косяк, точнее вероятность того, что из 256 случайных байт
не будет 4-х из множества A-Fa-f0-9 :)

Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

16. "Генератор случайных чисел по SH"  +1 +/
Сообщение от DeadLoco (ok) on 17-Май-11, 21:44 
> Но есть косяк, точнее вероятность того, что из 256 случайных байт
> не будет 4-х из множества A-Fa-f0-9 :)

И, судя по манам, есть смысл 0-9 заменить на [:digit:]

Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

17. "Генератор случайных чисел по SH"  +/
Сообщение от pavlinux (ok) on 17-Май-11, 21:52 
>> Но есть косяк, точнее вероятность того, что из 256 случайных байт
>> не будет 4-х из множества A-Fa-f0-9 :)
> И, судя по манам, есть смысл 0-9 заменить на [:digit:]

Там же ...

  [:xdigit:]

# tr -dc [:xdigit:] < /dev/urandom | head -c 4

Ответить | Правка | ^ к родителю #16 | Наверх | Cообщить модератору

19. "Генератор случайных чисел по SH"  +/
Сообщение от universite email(ok) on 17-Май-11, 22:06 
>>> Но есть косяк, точнее вероятность того, что из 256 случайных байт
>>> не будет 4-х из множества A-Fa-f0-9 :)
>> И, судя по манам, есть смысл 0-9 заменить на [:digit:]
> Там же ...
>   [:xdigit:]
> # tr -dc [:xdigit:] < /dev/urandom | head -c 4

Кавычки не забываем ставить.


tr -dc "[:xdigit:]" < /dev/urandom | head -c 4

P.S. Все равно 9-тый вариант скрипта быстрее.
P.P.S. Этот :


# time ./random-ipv6-address-generator.10.sh
0.218u 0.479s 0:00.63 107.9%    50+1033k 0+0io 0pf+0w

Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

20. "Генератор случайных чисел по SH"  +/
Сообщение от pavlinux (ok) on 17-Май-11, 22:23 
>>>> Но есть косяк, точнее вероятность того, что из 256 случайных байт
>>>> не будет 4-х из множества A-Fa-f0-9 :)
>>> И, судя по манам, есть смысл 0-9 заменить на [:digit:]
>> Там же ...
>>   [:xdigit:]
>> # tr -dc [:xdigit:] < /dev/urandom | head -c 4
> Кавычки не забываем ставить.


# strace -e execve tr -dc [:xdigit:] < /dev/null
execve("/usr/bin/tr", ["tr", "-dc", "[:xdigit:]"], [/* 88 vars */]) = 0

# strace -e execve tr -dc "[:xdigit:]" < /dev/null
execve("/usr/bin/tr", ["tr", "-dc", "[:xdigit:]"], [/* 88 vars */]) = 0

Нафига? :)

Ответить | Правка | ^ к родителю #19 | Наверх | Cообщить модератору

22. "Генератор случайных чисел по SH"  +/
Сообщение от universite email(ok) on 17-Май-11, 22:56 

>
 
> # strace -e execve tr -dc [:xdigit:] < /dev/null
> execve("/usr/bin/tr", ["tr", "-dc", "[:xdigit:]"], [/* 88 vars */]) = 0
> # strace -e execve tr -dc "[:xdigit:]" < /dev/null
> execve("/usr/bin/tr", ["tr", "-dc", "[:xdigit:]"], [/* 88 vars */]) = 0
>

> Нафига? :)

В линуксовом мане без кавычек, а вот во фряшном с кавычками. :)


     Create a list of the words in file1, one per line, where a word is taken
     to be a maximal string of letters.

           tr -cs "[:alpha:]" "\n" < file1

Ответить | Правка | ^ к родителю #20 | Наверх | Cообщить модератору

15. "Генератор случайных чисел по SH"  +/
Сообщение от universite email(ok) on 17-Май-11, 14:52 

# Copyright Andrey Mitrofanov
# Copyright pavlinux http://pavlinux.ru

rnd_ipv6_block () {
    HEX="od -N 2 -x /dev/urandom | cut -c 14-17"
    ipv6=$network_v6:$(eval $HEX):$(eval $HEX):$(eval $HEX):$(eval $HEX);

}


# time ./random-ipv6-address-generator.9.sh
0.097u 0.352s 0:00.30 146.6%    78+974k 0+0io 0pf+0w

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

18. "Генератор случайных чисел по SH"  +/
Сообщение от pavlinux (ok) on 17-Май-11, 21:56 
># Copyright Andrey Mitrofanov
># Copyright pavlinux http://pavlinux.ru

Митрофаныч, нас закопирайтили... =)

Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

21. "Генератор случайных чисел по SH"  +/
Сообщение от pavlinux (ok) on 17-Май-11, 22:49 
>     HEX="od -N 2 -x /dev/urandom | cut -c 14-17"

Оно точно работает?


# HEX="od -N 2 -x /dev/urandom | cut -c 14-17"
# echo -ne $(eval $HEX) | od -x
0000000

У тя там что, китайская, UTF-16 или UTF-32 ?

Для портабильности придётся так:
# od -N2 -x /dev/urandom | head -1 | cut -d" " -f2,2

Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

23. "Генератор случайных чисел по SH"  +/
Сообщение от universite email(ok) on 17-Май-11, 22:59 
>>     HEX="od -N 2 -x /dev/urandom | cut -c 14-17"
> Оно точно работает?
> # HEX="od -N 2 -x /dev/urandom | cut -c 14-17"
> # echo -ne $(eval $HEX) | od -x
> 0000000

В линуксе и фряхе разные отступы
в линуксе:


# od -N 2 -x /dev/urandom
0000000 c614
0000002

во фряхе:

#  od -N 2 -x /dev/urandom
0000000      10cf
0000002


Ответить | Правка | ^ к родителю #21 | Наверх | Cообщить модератору

24. "Генератор случайных чисел по SH"  +/
Сообщение от universite email(ok) on 17-Май-11, 23:01 

> Для портабильности придётся так:
> # od -N2 -x /dev/urandom | head -1 | cut -d" "
> -f2,2

Во фряхе


# od -N2 -x /dev/urandom | head -1 | cut -d" " -f2,2

# od -N2 -x /dev/urandom | head -1
0000000      9372


Ответить | Правка | ^ к родителю #21 | Наверх | Cообщить модератору

25. "Генератор случайных чисел по SH"  +/
Сообщение от pavlinux (ok) on 17-Май-11, 23:05 
>> Для портабильности придётся так:
>> # od -N2 -x /dev/urandom | head -1 | cut -d" "
>> -f2,2
> Во фряхе
>
 
> # od -N2 -x /dev/urandom | head -1 | cut -d" "
> -f2,2
> # od -N2 -x /dev/urandom | head -1
> 0000000      9372
>

А просто -f2

# od -N2 -x /dev/urandom | head -1 | cut -d" " -f2


Ответить | Правка | ^ к родителю #24 | Наверх | Cообщить модератору

26. "Генератор случайных чисел по SH"  +/
Сообщение от universite email(ok) on 17-Май-11, 23:13 

> А просто -f2
> # od -N2 -x /dev/urandom | head -1 | cut -d" "
> -f2

В линуксе отступ один пробел.
Во фряхе аж 5!

Ответить | Правка | ^ к родителю #25 | Наверх | Cообщить модератору

27. "Генератор случайных чисел по SH"  +/
Сообщение от pavlinux (ok) on 17-Май-11, 23:20 
>> А просто -f2
>> # od -N2 -x /dev/urandom | head -1 | cut -d" "
>> -f2
> В линуксе отступ один пробел.
> Во фряхе аж 5!

Пля... :)

А так

# od -N2 -x /dev/urandom | head -1 | cut -d" " -f2-

Ответить | Правка | ^ к родителю #26 | Наверх | Cообщить модератору

29. "Генератор случайных чисел по SH"  +/
Сообщение от universite email(ok) on 19-Май-11, 01:05 
> Пля... :)
> А так
> # od -N2 -x /dev/urandom | head -1 | cut -d" "
> -f2-

так тоже не получается нужный результат, а вот так работает:


# od -N2 -x /dev/urandom | head -1 | sed 's/ //g' | cut -c 8-11
9f1c

но sed увеличивает время генерации :(


# time ./random-ipv6-address-generator.11.sh
0.216u 0.569s 0:00.57 135.0%    70+799k 0+0io 0pf+0w

Ответить | Правка | ^ к родителю #27 | Наверх | Cообщить модератору

30. "Генератор случайных чисел по SH"  +/
Сообщение от pavlinux (ok) on 19-Май-11, 01:13 
>[оверквотинг удален]
>> А так
>> # od -N2 -x /dev/urandom | head -1 | cut -d" "
>> -f2-
> так тоже не получается нужный результат, а вот так работает:
>
 
> # od -N2 -x /dev/urandom | head -1 | sed 's/ //g'
> | cut -c 8-11
> 9f1c
>

> но sed увеличивает время генерации :(

На то он и sed


# od -N2 -x /dev/urandom | sed 's/\(.*\)\ //;1q'

:)
Ответить | Правка | ^ к родителю #29 | Наверх | Cообщить модератору

31. "Генератор случайных чисел по SH"  +/
Сообщение от Andrey Mitrofanov on 19-Май-11, 07:24 
>[оверквотинг удален]
>> А так
>> # od -N2 -x /dev/urandom | head -1 | cut -d" "
>> -f2-
> так тоже не получается нужный результат, а вот так работает:
>
 
> # od -N2 -x /dev/urandom | head -1 | sed 's/ //g'
> | cut -c 8-11
> 9f1c
>

> но sed увеличивает время генерации :(

Так пиши ж на C!? Ж)

Ещё можно сервер на sed-е %) написать и клиентом читаить по одной строчке из пайпа...

О! Предлагаю дописать urandom (на Си! в ядре!!), чтоб он сразу выдавал %4x:%4x:%4x:%4x. %)) (Где-то в /proc (но, да, linux-only/) можно генерить SID-ы. Почти ж оно!)

---
$ time od -N $((8*25)) -x /dev/urandom |tr \\n X |sed 's/\(^\|X\)[0-9]* */:/g;s/ 0+/ /g;s/ /:/g;s/:*$\|^:*//g;s/\(\([^:]*:[^:]*\)\{4\}[^:]\):/\1\n/g;q'
e21a:09bc:689a:ce35:e927
f56f:3dba:f439:4390:09d2
6ae6:216b:de7a:9490:10a5
e143:f274:f33c:4451:7eb3
d546:6811:f8db:a5e8:a446
1b7c:882e:11a7:b3e3:85e8
ffc6:5976:5fe3:49d7:616e
778c:0881:c35c:5cb5:2aec
a00a:aae1:eb42:f32b:e209
88f0:e7cd:e9d3:cdfd:b8d1
da0c:ada1:72a8:ca61:ec1d
5a25:f61c:952a:5444:eef4
4f94:cff8:5086:5edc:8fdd
d61b:66db:5b9c:c68e:91ad
d95f:f277:0e1b:79c9:4f52
dcd7:ed7c:35c8:51f5:25f0
1310:cea2:a492:1668:9fa6
adf3:8870:6a38:4cd4:63a6
bc09:b069:859b:cbb3:51c5
b5a5:140d:aaf0:ebbf:2fb9

real    0m0.010s
user    0m0.020s
sys     0m0.000s
$ _

Ответить | Правка | ^ к родителю #29 | Наверх | Cообщить модератору

32. "Генератор случайных чисел по SH"  +/
Сообщение от universite email(ok) on 19-Май-11, 23:05 

> ---
> $ time od -N $((8*25)) -x /dev/urandom |tr \\n X |sed 's/\(^\|X\)[0-9]*
> */:/g;s/ 0+/ /g;s/ /:/g;s/:*$\|^:*//g;s/\(\([^:]*:[^:]*\)\{4\}[^:]\):/\1\n/g;q'

У меня фряха не понимает


$((8*25))
Неверное имя переменной.

Ответить | Правка | ^ к родителю #31 | Наверх | Cообщить модератору

33. "Генератор случайных башизмов"  +/
Сообщение от Andrey Mitrofanov on 20-Май-11, 11:49 
> У меня фряха не понимает
> $((8*25))
> Неверное имя переменной.

Кто тут переходит с bash-а, я или ты?!

$[8*25] //fixed

Ответить | Правка | ^ к родителю #32 | Наверх | Cообщить модератору

34. "Генератор случайных чисел по SH"  +1 +/
Сообщение от pavlinux (ok) on 21-Май-11, 03:39 
>>[оверквотинг удален]
> О! Предлагаю дописать urandom (на Си! в ядре!!), чтоб он сразу выдавал
> %4x:%4x:%4x:%4x. %)) (Где-то в /proc (но, да, linux-only/)

Зря ты это придумал... :)

ipv6_suffix.c


#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/random.h>
#include <linux/proc_fs.h>

#define FORMAT "%02x%02x:%02x%02x:%02x%02x:%02x%02x\n"
#define proc_name "ipv6_suffix"

MODULE_AUTHOR("Opennet Software Foundation (c) 2011, Pavlinux special for Vladislav Prodan :)");
MODULE_LICENSE("GPL v2");

static unsigned char n[9];

static int put_ip(char *buf, char **start, off_t offset, int len,
              int *eof, void *data)
{
    int ret = 0;

    if (offset  > 0) {
        ret  = 0;
    } else {
        get_random_bytes(n, 8);
        ret = sprintf(buf, FORMAT, n[0],n[1],n[2],n[3],n[4],n[5],n[6],n[7]);
    }
    *eof = 1;
    return ret;
}

static int rndip_init(void) {

    static struct proc_dir_entry *ptr;
    ptr = create_proc_entry(proc_name, S_IFREG | S_IRUGO, NULL);
    if (!ptr) {
        printk(KERN_WARNING "unable to create %s", proc_name);
        return -1;
    }
    ptr->read_proc = put_ip;
    ptr->size      = 19;
    return 0;
}

static void __exit rndip_exit(void) {

    remove_proc_entry(proc_name, NULL);
}

module_init(rndip_init);
module_exit(rndip_exit);

Makefile


####
obj-m := ipv6_suffix.o

all:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean


test.sh


#!/bin/sh

insmod ./ipv6_suffix.ko;

IPNET="2001:0db8:11a3:09d7"

for ((i=0; i < 1000; i++))
   do
     echo $IPNET:`cat /proc/ipv6_suffix` >> randomip.txt;
done

rmmod ipv6_suffix;

time ./test.sh

real    0m2.940s
user    0m0.606s
sys     0m1.955s

-----

Митрофаныч, с тебя под BSD или чистый asm :)

Ответить | Правка | ^ к родителю #31 | Наверх | Cообщить модератору

49. "Генератор случайных чисел по SH"  +/
Сообщение от pavlinux (ok) on 30-Мрт-17, 03:49 
1///
Ответить | Правка | ^ к родителю #34 | Наверх | Cообщить модератору

36. "Генератор случайных чисел по SH"  +/
Сообщение от universite email(ok) on 07-Июн-11, 20:58 
> ---
> $ time od -N $((8*25)) -x /dev/urandom |tr \\n X |sed 's/\(^\|X\)[0-9]*
> */:/g;s/ 0+/ /g;s/ /:/g;s/:*$\|^:*//g;s/\(\([^:]*:[^:]*\)\{4\}[^:]\):/\1\n/g;q'

слишком сложное (затратное по CPU) преобразование.
Может упростим задачу:
есть 16 16-тиричных символа


tr -dc "[:xdigit:]" < /dev/urandom | head -c 16

или

openssl rand -hex 8

как вставить символ ":" через каждый 4-тый символ?

Ответить | Правка | ^ к родителю #31 | Наверх | Cообщить модератору

37. "Генератор случайных чисел по SH"  +/
Сообщение от Andrey Mitrofanov on 08-Июн-11, 09:26 
> tr -dc "[:xdigit:]" < /dev/urandom | head -c 16

|sed 's/..../:&/g;s/^://'

Если : в начале можно использовать дальше, то второй s/ сократиткя.
Может, ещё s/:0+/:/g;s/::+/:/ добавить...

Ответить | Правка | ^ к родителю #36 | Наверх | Cообщить модератору

42. "Генератор случайных чисел по SH"  +/
Сообщение от universite email(ok) on 08-Июн-11, 15:41 
>> tr -dc "[:xdigit:]" < /dev/urandom | head -c 16
> |sed 's/..../:&/g;s/^://'
> Если : в начале можно использовать дальше, то второй s/ сократиткя.
> Может, ещё s/:0+/:/g;s/::+/:/ добавить...

Думаю, это будет окончательный вариант.
https://gist.github.com/1014255

А вот, оценка скорости выполнения:


# time sh random-ipv6-address-generator.15.sh
0.153u 0.187s 0:00.37 89.1%     332+614k 0+0io 0pf+0w
# time sh random-ipv6-address-generator.16.sh
0.055u 0.197s 0:00.22 109.0%    75+1092k 0+0io 0pf+0w
Ответить | Правка | ^ к родителю #37 | Наверх | Cообщить модератору

47. "Генератор случайных чисел по SH"  +/
Сообщение от pavlinux (ok) on 10-Июн-11, 00:57 
>[оверквотинг удален]
>> Если : в начале можно использовать дальше, то второй s/ сократиткя.
>> Может, ещё s/:0+/:/g;s/::+/:/ добавить...
> Думаю, это будет окончательный вариант.
> https://gist.github.com/1014255
> А вот, оценка скорости выполнения:
>
 
> # time sh random-ipv6-address-generator.15.sh
> 0.153u 0.187s 0:00.37 89.1%     332+614k 0+0io 0pf+0w
> # time sh random-ipv6-address-generator.16.sh
> 0.055u 0.197s 0:00.22 109.0%    75+1092k 0+0io 0pf+0w


# Copyright Andrey Mitrofanov
# Copyright pavlinux http://pavlinux.ru
# Copyright click0 aka universite
# 2011

MAXCOUNT=20
network_v6=2a01:7a0:2:12 # your ipv6 network prefix
psi=`openssl rand -hex $((8*($MAXCOUNT+1)))`

  echo "$MAXCOUNT случайных IPv6:"
  echo "-----------------"

  for ((count=0; count <= $MAXCOUNT; ++count, mod=count<<4))
     do
        echo "$network_v6:${psi:mod:4}:${psi:((4+mod)):4}:${psi:((8+mod)):4}:${psi:((12+mod)):4}";
done



real    0m0.033s
user    0m0.027s
sys     0m0.013s


Если вместо count<<4, поставить 16*count, то на 1000 номеров уже потеряем 2 секунды.

Ответить | Правка | ^ к родителю #42 | Наверх | Cообщить модератору

46. "Генератор случайных чисел по SH"  +/
Сообщение от pavlinux (ok) on 10-Июн-11, 00:27 
fork()
Ответить | Правка | ^ к родителю #36 | Наверх | Cообщить модератору

38. "Генератор случайных чисел по SH"  +/
Сообщение от Andrey Mitrofanov on 08-Июн-11, 14:40 
>> Какие-то левые символы проскакивают...
> # tr -dc a-f0-9 < /dev/urandom | tr "[=2=]" "2" | head
> -c 256

Может быть,

# LANG=C tr -dc a-f0-9 < /dev/urandom | head ...

поможет? (А может, на UNIX-ах всё не так.)

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

41. "Генератор случайных чисел по SH"  +/
Сообщение от universite email(ok) on 08-Июн-11, 15:29 
>>> Какие-то левые символы проскакивают...
>> # tr -dc a-f0-9 < /dev/urandom | tr "[=2=]" "2" | head
>> -c 256
> Может быть,
> # LANG=C tr -dc a-f0-9 < /dev/urandom | head ...

Это в Линуксе.
В Фряхе похожее только


#env
...
LANG=ru_RU.KOI8-R
MM_CHARSET=KOI8-R

> поможет? (А может, на UNIX-ах всё не так.)

Я всегда стараюсь убежать от игр с кодировкой в консоли и env - ибо всплывает куч проблем с кодировкой отличной от дефолтной.

Ответить | Правка | ^ к родителю #38 | Наверх | Cообщить модератору

9. "Генератор случайных чисел по SH"  +/
Сообщение от LSTemp (ok) on 17-Май-11, 04:51 
>[оверквотинг удален]
> rnd_ipv6_block ()
> {
> ## need bash!
>     a=${array[$RANDOM%16]}${array[$RANDOM%16]}${array[$RANDOM%16]}${array[$RANDOM%16]}
>     b=${array[$RANDOM%16]}${array[$RANDOM%16]}${array[$RANDOM%16]}${array[$RANDOM%16]}
>     c=${array[$RANDOM%16]}${array[$RANDOM%16]}${array[$RANDOM%16]}${array[$RANDOM%16]}
>     d=${array[$RANDOM%16]}${array[$RANDOM%16]}${array[$RANDOM%16]}${array[$RANDOM%16]}
>     ipv6=$network_v6:$a:$b:$c:$d
> }
>

где тут "в пределах заданной сети"? а если $network_v6 что-то больше, чем в данном банальном случае реализации?

Цену решения огласи (http://www.opennet.me/openforum/vsluhforumID9/9126.html)

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

12. "Генератор случайных чисел по SH"  +/
Сообщение от universite email(ok) on 17-Май-11, 12:24 

> Цену решения огласи (http://www.opennet.me/openforum/vsluhforumID9/9126.html)

0$

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

39. "Генератор случайных чисел по SH"  +/
Сообщение от Andrey Mitrofanov on 08-Июн-11, 14:51 
> Скрипт генерирует произвольный адрес ipv6 в пределах заданной сети $network_v6
> На баше работает, но надо уйти от него на sh.

...и да, а где наши позиксивные друзья, когда они нужны?.... (А, вижу, там внизу - "ихде маи баппки".)

> array=( 1 2 3 4 5 6 7 8 9 0 a
> b c d e f )
>     ipv6=$network_v6:$a:$b:$c:$d

**Всё ещё пролетая над...  и поднимая стакан сока за http://blog.sesse.net/blog/tech/2011-06-08-02-02_world_ipv6_... безвестных героев...

Вопрос! А

ipv6="`printf "%s::%x" $network_v6 $RANDOM`" # мо буть, даже $[RANDOM+OFFSET]

не _достаточно_?! ...гм, надо :/ ранее выданные отсеивать-перегенерировать.

Как там у классика?~ "32К адресов будет достаточно в _любом_ сегменте!" %)))
**> ...кстати, "пролетая над Череповцом"(с), придумалось:

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

40. "Генератор случайных чисел по SH"  +/
Сообщение от universite email(ok) on 08-Июн-11, 15:25 
>> Скрипт генерирует произвольный адрес ipv6 в пределах заданной сети $network_v6
>> На баше работает, но надо уйти от него на sh.
> ...и да, а где наши позиксивные друзья, когда они нужны?.... (А, вижу,
> там внизу - "ихде маи баппки".)

+1
>> array=( 1 2 3 4 5 6 7 8 9 0 a
>> b c d e f )
>>     ipv6=$network_v6:$a:$b:$c:$d
> **Всё ещё пролетая над...  и поднимая стакан сока за http://blog.sesse.net/blog/tech/2011-06-08-02-02_world_ipv6_...
> безвестных героев...
> Вопрос! А
> ipv6="`printf "%s::%x" $network_v6 $RANDOM`" # мо буть, даже $[RANDOM+OFFSET]
> не _достаточно_?! ...гм, надо :/ ранее выданные отсеивать-перегенерировать.

Только в баше есть рандом.
Тебе выдали блок /64 на сервер и тебе надо каждому сайту выделить свой Ipv6.
Ладно создать ручками пару ip, а когда сайтов сотни?

> Как там у классика?~ "32К адресов будет достаточно в _любом_ сегменте!" %)))  
> **> ...кстати, "пролетая над Череповцом"(с), придумалось:

Не смешно. Мало того, что производители железа (свитчи, роутеры) тупят с полноценной поддержкой ipv6, так и в куче прикладного софта полно багов с ipv6...


Ответить | Правка | ^ к родителю #39 | Наверх | Cообщить модератору

43. "Генератор случайных чисел по SH"  +/
Сообщение от ACCA (ok) on 08-Июн-11, 23:25 
> Только в баше есть рандом.
> Тебе выдали блок /64 на сервер и тебе надо каждому сайту выделить
> свой Ipv6.
> Ладно создать ручками пару ip, а когда сайтов сотни?

Отдай их последовательно, нафига там RANDOM?


PREFIX=$1
DT=$(date +%s)
DATE=$(printf %x $(expr $DT % 65536))
TIME=$(printf %x $(expr $DT % 65536))
CNT=1

rnd_ipv6_block ()
{
    X=$(printf %x $CNT)
    (( CNT += 1 ))
    ipv6=$network_v6:$PREFIX:$DATE:$TIME:${X}0
}


Ответить | Правка | ^ к родителю #40 | Наверх | Cообщить модератору

44. "Генератор случайных чисел по SH"  +/
Сообщение от universite email(ok) on 08-Июн-11, 23:33 
>[оверквотинг удален]
> DATE=$(printf %x $(expr $DT % 65536))
> TIME=$(printf %x $(expr $DT % 65536))
> CNT=1
> rnd_ipv6_block ()
> {
>     X=$(printf %x $CNT)
>     (( CNT += 1 ))
>     ipv6=$network_v6:$PREFIX:$DATE:$TIME:${X}0
> }
>

Сеошники не любят последовательно.
Они надеются, что если выдавать произвольный адрес из пула - гугл не спалит, что блок привязан к одному серверу :)

Ответить | Правка | ^ к родителю #43 | Наверх | Cообщить модератору

45. "Генератор случайных чисел по SH"  +/
Сообщение от allez (ok) on 09-Июн-11, 10:32 
> Сеошники не любят последовательно.
> Они надеются, что если выдавать произвольный адрес из пула - гугл не
> спалит, что блок привязан к одному серверу :)

А если этот последовательный список потом перемешивать с помощью все того же shuf?

Ответить | Правка | ^ к родителю #44 | Наверх | Cообщить модератору

48. "Генератор случайных чисел по SH"  +/
Сообщение от ACCA (ok) on 11-Июн-11, 15:49 
>> Сеошники не любят последовательно.
>> Они надеются, что если выдавать произвольный адрес из пула - гугл не
>> спалит, что блок привязан к одному серверу :)
> А если этот последовательный список потом перемешивать с помощью все того же
> shuf?

Не поможет - гуглу всё равно, из чего кластер данных лепить. Общий провайдер, общий движок общие темплеты, общая подсеть, просто ссылаются только друг на друга без учёта смысла. Вычисляет тесный мир, а потом всю шоблу - в конец поисковой выдачи.

SEOшники разве что на некропостах трафик отжимают, когда к ним приходят по старым ссылкам. Гуглы уже вполне прилично отсеивают Content Factory.

Ответить | Правка | ^ к родителю #45 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру