Re: datei zerhacken und per netcat verschicken
Hallo,
Am Fri, 13 May 2005, Michelle Konzack schrieb:
>Also hier wird nichts auch die Platte gekippt:
>----8<--------------------------------------------
>#!/bin/bash
>
>let SIZE=`cat $1 |wc -c`
useless use of let, useless use of cat
SIZE=`wc -c < "$1"`
>for SEEK in `seq 0 $SIZE` ; do
> dd if=$1 of=- bs=584 seek=$SEEK count=1 |\
Da fehlt die Umrechung in die Bloecke (s.u.)... Du rufst so dd fuer
jedes byte auf...
> netcat -u -q 0 127.0.0.1 2006
> if [ $? == "1" ] ; then break ; fi
Useless use of test (s.u.). Ausserdem sollte das, wenn schon, dann
if test $? -ne 0; then break; fi
oder meinetwegen auch per Stringvergleich
if test "x$?" != "x0"; then break; fi
sein. 'help test' hilft. Ausserdem sollte man beachten, ob man einen
String oder eine Zahl vergleicht. Und das dann auch passend umsetzen.
Ja, bei sowas bin ich ein Pedant ;)
>done
====
BLKSZ=584
SIZE=`wc -c < "$1"`
BLOCKS=`echo "($SIZE / $BLKSZ)+1" | bc`
for seek in `seq 0 $BLOCKS`; do
dd if="$1" bs="$BLKSZ" seek="$seek" count=1 | \
netcat -u -q 0 127.0.0.0 2006 || break
done
====
Diese Loesung hat allerdings den Nachteil, dass bei grossen Dateien
die Ausfuehrungszeit exponentiell steigt, weil fuer jedes Fragment a
$BLKSZ Bytes die Datei neu geoeffnet werden muss, an die richtige
Stelle ge"seek"t werden muss, und dann jeweils nur ein Block von
$BLKSZ Bytes gelesen und ausgegeben wird... Bei kleinen Dateien (sagen
wir, bis 100 * $BLKSZ) geht das noch, aber darueber wird's schnell
eklig.
"Meine" dd-Loesung mit dem cbs=584 conv=unblock scheitert uebrigens
wohl mindestens an Dateien, die ein '\n'-Byte enthalten.
Anders formuliert: man sollte evtl. eine andere Loesung, z.B. in Perl
o.ae. in Betracht ziehen.
Bastian: erzaehl doch noch ein bisserl mehr darueber, was du
eigentlich machen willst...
-dnh
--
The goal of Computer Science is to build something that will last at
least until we've finished building it. -- BSD fortune file
Reply to: