Скрипт генерирует произвольный адрес 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
}
> Скрипт генерирует произвольный адрес 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$ _
> sh-3.2$ shuf -i 0-65535 -n 1
> 29285
# shuf -i 0-65535 -n 1
shuf: Команда не найдена.
> 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'
> 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
$ _
>[оверквотинг удален]
> 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="2001:0db8:11a3:09d7" rnd_ipv6_block () { HEX="tr -dc a-f0-9 < /dev/urandom | head -c 4"
#!/bin/sh
ipv6=$network_v6:$(eval $HEX):$(eval $HEX):$(eval $HEX):$(eval $HEX);
}
> tr -dc a-f0-9 < /dev/urandomКласс!
>> tr -dc a-f0-9 < /dev/urandom
> Класс!А то! :)
>> 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
Какие-то левые символы проскакивают...
> Какие-то левые символы проскакивают...# tr -dc a-f0-9 < /dev/urandom | tr "[=2=]" "2" | head -c 256
>> Какие-то левые символы проскакивают...
> # 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
>>> Какие-то левые символы проскакивают...Кривая консоль у тя.
>[оверквотинг удален]
> Замечательно, спецсимволы не появляются, но время генерации 20 ipv6 заметно тормозит.dd if=/dev/urandom bs=256 count=1 conv=ascii,lcase | tr -dc a-f0-9 | head -c 4
>>>> Какие-то левые символы проскакивают...
> Кривая консоль у тя.Добро пожаловать в мир совместимых консолей и кроссплатформенных команд.
>>[оверквотинг удален]
>> Замечательно, спецсимволы не появляются, но время генерации 20 ipv6 заметно тормозит.
> dd if=/dev/urandom bs=256 count=1 conv=ascii,lcase | tr -dc a-f0-9 | head -c
> 4Это быстро генерится.
>>>>> Какие-то левые символы проскакивают...
>> Кривая консоль у тя.
> Добро пожаловать в мир совместимых консолей и кроссплатформенных команд.
>>>[оверквотинг удален]
>>> Замечательно, спецсимволы не появляются, но время генерации 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 :)
> Но есть косяк, точнее вероятность того, что из 256 случайных байт
> не будет 4-х из множества A-Fa-f0-9 :)И, судя по манам, есть смысл 0-9 заменить на [:digit:]
>> Но есть косяк, точнее вероятность того, что из 256 случайных байт
>> не будет 4-х из множества A-Fa-f0-9 :)
> И, судя по манам, есть смысл 0-9 заменить на [:digit:]Там же ...
[:xdigit:]
# tr -dc [:xdigit:] < /dev/urandom | head -c 4
>>> Но есть косяк, точнее вероятность того, что из 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 4P.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
>>>> Но есть косяк, точнее вероятность того, что из 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Нафига? :)
>
> # 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
# Copyright Andrey Mitrofanov
# Copyright pavlinux http://pavlinux.rurnd_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
># Copyright Andrey Mitrofanov
># Copyright pavlinux http://pavlinux.ruМитрофаныч, нас закопирайтили... =)
> 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
>> 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
> Для портабильности придётся так:
> # 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
>> Для портабильности придётся так:
>> # 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
> А просто -f2
> # od -N2 -x /dev/urandom | head -1 | cut -d" "
> -f2В линуксе отступ один пробел.
Во фряхе аж 5!
>> А просто -f2
>> # od -N2 -x /dev/urandom | head -1 | cut -d" "
>> -f2
> В линуксе отступ один пробел.
> Во фряхе аж 5!Пля... :)
А так
# od -N2 -x /dev/urandom | head -1 | cut -d" " -f2-
> Пля... :)
> А так
> # 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
>[оверквотинг удален]
>> А так
>> # 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'
:)
>[оверквотинг удален]
>> А так
>> # 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:2fb9real 0m0.010s
user 0m0.020s
sys 0m0.000s
$ _
> ---
> $ 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))
Неверное имя переменной.
> У меня фряха не понимает
> $((8*25))
> Неверное имя переменной.Кто тут переходит с bash-а, я или ты?!
$[8*25] //fixed
>>[оверквотинг удален]
> О! Предлагаю дописать 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.oall:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modulesclean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
test.sh
#!/bin/shinsmod ./ipv6_suffix.ko;
IPNET="2001:0db8:11a3:09d7"
for ((i=0; i < 1000; i++))
do
echo $IPNET:`cat /proc/ipv6_suffix` >> randomip.txt;
donermmod ipv6_suffix;
time ./test.sh
real 0m2.940s
user 0m0.606s
sys 0m1.955s-----
Митрофаныч, с тебя под BSD или чистый asm :)
1///
> ---
> $ 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-тый символ?
> tr -dc "[:xdigit:]" < /dev/urandom | head -c 16|sed 's/..../:&/g;s/^://'
Если : в начале можно использовать дальше, то второй s/ сократиткя.
Может, ещё s/:0+/:/g;s/::+/:/ добавить...
>> 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
>[оверквотинг удален]
>> Если : в начале можно использовать дальше, то второй 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
# 2011MAXCOUNT=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 секунды.
fork()
>> Какие-то левые символы проскакивают...
> # tr -dc a-f0-9 < /dev/urandom | tr "[=2=]" "2" | head
> -c 256Может быть,
# LANG=C tr -dc a-f0-9 < /dev/urandom | head ...
поможет? (А может, на UNIX-ах всё не так.)
>>> Какие-то левые символы проскакивают...
>> # 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 - ибо всплывает куч проблем с кодировкой отличной от дефолтной.
>[оверквотинг удален]
> 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)
> Цену решения огласи (http://www.opennet.me/openforum/vsluhforumID9/9126.html)0$
> Скрипт генерирует произвольный адрес 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К адресов будет достаточно в _любом_ сегменте!" %)))
**> ...кстати, "пролетая над Череповцом"(с), придумалось:
>> Скрипт генерирует произвольный адрес 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...
> Только в баше есть рандом.
> Тебе выдали блок /64 на сервер и тебе надо каждому сайту выделить
> свой Ipv6.
> Ладно создать ручками пару ip, а когда сайтов сотни?Отдай их последовательно, нафига там RANDOM?
PREFIX=$1
DT=$(date +%s)
DATE=$(printf %x $(expr $DT % 65536))
TIME=$(printf %x $(expr $DT % 65536))
CNT=1rnd_ipv6_block ()
{
X=$(printf %x $CNT)
(( CNT += 1 ))
ipv6=$network_v6:$PREFIX:$DATE:$TIME:${X}0
}
>[оверквотинг удален]
> 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
> }
>Сеошники не любят последовательно.
Они надеются, что если выдавать произвольный адрес из пула - гугл не спалит, что блок привязан к одному серверу :)
> Сеошники не любят последовательно.
> Они надеются, что если выдавать произвольный адрес из пула - гугл не
> спалит, что блок привязан к одному серверу :)А если этот последовательный список потом перемешивать с помощью все того же shuf?
>> Сеошники не любят последовательно.
>> Они надеются, что если выдавать произвольный адрес из пула - гугл не
>> спалит, что блок привязан к одному серверу :)
> А если этот последовательный список потом перемешивать с помощью все того же
> shuf?Не поможет - гуглу всё равно, из чего кластер данных лепить. Общий провайдер, общий движок общие темплеты, общая подсеть, просто ссылаются только друг на друга без учёта смысла. Вычисляет тесный мир, а потом всю шоблу - в конец поисковой выдачи.
SEOшники разве что на некропостах трафик отжимают, когда к ним приходят по старым ссылкам. Гуглы уже вполне прилично отсеивают Content Factory.