PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie Zufallszahlen mit Skript unter DD-WRT verarbeiten?



Noether
29.06.08, 17:51
In einem Startup-Skript brauche ich ein paar Zufallsbytes in Hexadezimal-Form, aber die Versuche, die auf dem PC funktionierten, funktionieren auf dem WLAN-Router nicht:



FOO=$(dd if=/dev/urandom bs=1 count=1 2>/dev/null | xxd | awk '{ print $2}')


geht nicht, weil DD-WRT kein xxd hat :(



FOO=$(($RANDOM % 16))


geht nicht, weil die Shell kein richtiges Modulo kennt (Fehlermeldung: -sh: syntax error: % 16). :(

Was empfehlen die Shell-Experten hier? :confused:

-----
edit: Schon $RANDOM geht nicht; ein echo $RANDOM liefert nur einer Leerzeile.
/dev/urandom funktioniert.

temir
29.06.08, 18:03
openssl rand 1024 -base64 -out ssl.rand.txt

erzeugt ein File mit 1024 Byte, gefüllt mit random Data.

EDIT:
für Hex "-base64"

Noether
29.06.08, 21:57
openssl rand 1024 -base64 -out ssl.rand.txt

erzeugt ein File mit 1024 Byte, gefüllt mit random Data.

EDIT:
für Hex "-base64"

Da ist leider kein openssl unter DD-WRT; das ist nur ein minimales Busybox-Linux.

403
29.06.08, 22:49
Du kannst ja mal mt dc experimentieren:
http://tldp.org/LDP/abs/html/mathc.html

Example 15-50. Converting a decimal number to hexadecimal

Gruss 403

Aqualung
29.06.08, 23:15
Was hindert Dich xxd cross-zu kompilieren?:



#
# Makefile for xxd
#

CC=openwrt/staging_dir/toolchain-mipsel_gcc4.1.2/bin/mipsel-linux-uclibc-gcc
CFLAGS=-O

all: xxd

xxd: xxd.c
$(CC) $(CFLAGS) -o xxd xxd.c


Tat hier auf Anhieb. Ergebnis im Anhang.

Noether
30.06.08, 00:28
Was hindert Dich xxd cross-zu kompilieren?:



#
# Makefile for xxd
#

CC=openwrt/staging_dir/toolchain-mipsel_gcc4.1.2/bin/mipsel-linux-uclibc-gcc
CFLAGS=-O

all: xxd

xxd: xxd.c
$(CC) $(CFLAGS) -o xxd xxd.c


Tat hier auf Anhieb. Ergebnis im Anhang.

Ok, danke, aber damit verlagert sich das Problem xxd persistent zu speichern. Wie bekomme ich xxd auf dem Router gespeichert?

Sidolin
30.06.08, 00:56
Rüberkopieren, mit scp oder sonstwas. Zur not halt telnet/netcat ;)

Aqualung
30.06.08, 08:05
Wie bekomme ich xxd auf dem Router gespeichert?

Das kommt auf die Konfiguration Deines openwrt an. Einfach rüberkopieren geht nur, wenn Du auch eine parttion rw montiert hast. Wenn Du "mount" postest, kann ich Dir genaueres sagen.
Ansonsten musst Du vllt. eine neue Firmware backen, mit dem executable im skeleton-Dateisystem.

Sidolin
30.06.08, 12:49
Das kommt auf die Konfiguration Deines openwrt an. Einfach rüberkopieren geht nur, wenn Du auch eine parttion rw montiert hast. Wenn Du "mount" postest, kann ich Dir genaueres sagen.
Ansonsten musst Du vllt. eine neue Firmware backen, mit dem executable im skeleton-Dateisystem.

Normalerweise gibts noch eine zweite Overlay-partition die dann schreibbar ist.

Noether
30.06.08, 23:29
Hier die Ausgabe von mount:

rootfs on / type rootfs (rw)
/dev/root on / type squashfs (ro)
none on /dev type devfs (rw)
proc on /proc type proc (rw)
ramfs on /tmp type ramfs (rw)
/dev/mtdblock/4 on /jffs type jffs2 (rw)

Allerdings kann ich nur in /tmp Dateien schreiben (wo es nach dem nächsten Booten verschwunden ist) und das Start-Skript wird mit einer speziellen Funktion in's Flash geschrieben.


Daneben habe ich ein paar andere Sachen probiert:



hexdump -n4 -e\"%u\" /dev/random


das zeigt schon auf dem PC nix an,



dd if=/dev/urandom count=1 2> /dev/null | cksum | cut -f1 -d" "


geht nicht, denn cksum fehlt auf dem Router,



tr -dc "[:alnum:][:punct:]" < /dev/urandom | head -c 6 && echo


auf dem Router kommt "head: illegal option -- c",



head -c4 /dev/urandom | od -N4 -tu4 | sed -ne '1s/.* //p'


auf dem Router kommt head: illegal option -- c; -sh: od: not found.

Was aber geht ist:



#!/bin/bash
AWKSCRIPT=' { srand(); print rand() } '
# Command(s) / parameters passed to awk
# Note that srand() reseeds awk's random number generator.
echo -n "Random number between 0 and 1 = "
echo | awk "$AWKSCRIPT"
exit 0


Mit ein bischen Ändern vom Skript sollte es kein Problem sein.

RubenKelevra
19.03.13, 01:19
Der Beitrag ist schon was älter, aber gibt kaum andere Beiträge die man findet, die sich mit dem Thema beschäftigen... daher:





hexdump -n4 -e\"%u\" /dev/random


das zeigt schon auf dem PC nix an,


Wenn man Hexdump mit dd koppelt klappts:


dd if=/dev/urandom bs=1 count=1 2>/dev/null | hexdump -e '"%02x\n"'

Mit count=x kann man eine beliebige Anzahl an Bytes ausgeben.


LG Ruben