Re: datei zerhacken und per netcat verschicken

2005-05-14 Diskussionsfäden David Haller
Hallo,

Am Fri, 13 May 2005, Michelle Konzack schrieb:
Am 2005-05-13 03:29:15, schrieb David Haller:
 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`

Das macht einen arithmetischen Wert daraus

 useless use of let, useless use of cat
 
 SIZE=`wc -c  $1`

Das macht aber ne Zeichenkette

Stimmt ;) Da sollte 'declare' helfen, wenn man 'wc' nicht traut ;) Das
'cat' ist aber auch mit 'let' ueberfluessig.

Und fuetter deine Version mal mit nem Dateinamen, der z.B. ein '*'
enthaelt und wenn du in einem Verzeichnis bist, das passende
Dateinamen enthaelt. Quoten, quoten, quoten... *scnr*

Falls 'stat' vorhanden ist (bei mir nicht ;), ist stat -c '%s' wohl
die bessere Wahl.

man bash

Wenn Du Zeit hat den Schmöker mal durchzugehen.

*g* Hab ich nie, werde ich wohl auch nicht mehr. Ich hab das
abschnittsweise gelesen ;)

Ich habe unzählige scripts in denen es zu unerwarteten
fehlern bei Deiner Version kommt.

Ich keins (und ich hab durchaus einiges an scripten).

Bei Deiner version kommt dann sowas wie1234 also eine Zeichen-
ketteraus, während bei mir 1234 einer ein zahlenwert rauskommt.

 for SEEK in `seq 0 $SIZE` ; do
   dd if=$1 of=- bs=584 seek=$SEEK count=1 |\

*rausred*
Das ist in diesem Falle unkritisch, da $SIZE _nicht_ gequoted ist und
IFS das Leerzeichen enthaelt... ;)

Achso, ansonsten vertrete ich Quoten bis der Arzt kommt... ;)

(siehe die andere Mail wg. seek vs. skip)
 
 Da fehlt die Umrechung in die Bloecke (s.u.)... Du rufst so dd fuer
 jedes byte auf...

Ups, sollte

for SEEK in `seq 0 584 $SIZE` ; do

sein.

Ah!!! _Da_ hast du's versteckt. Immer diese bloeden unsichtbaren
Zeichen ;)

Dann ist's auch in deiner Version blockweise, also richtig.

 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

Nein, denn die Schleife rennt weiter wenn 'netcat'
einen Fehler hat. 'break' beendet die Schleife.

Ja eben. 'netcat ... || break'. Ok, wenn netcat auch exit-codes groesser
1 zurueckgibt, bei denen man die Schleife weiterlaufen lassen will, ist
es nicht aequivalent... Jedenfalls:

foo || break

ist ja (innerhalb einer while/for Schleife) gerade aequivalent zu:

foo; if test $? -ne 0; then break; fi

wie ich schon schrieb.

Falls man _explizt_ Fehlercodes != 1 anders behandeln will, dann sollte
man die eben auch behandeln, also z.B. per

case $? in
0) : ;;
1) break;;
2) exit;;
3) panic;;
*) continue;;
esac

oder wie auch immer... Ansonsten reicht aber eben das '|| break'.
 
 Ja, bei sowas bin ich ein Pedant ;)

Abgesehen vom 'seq' funktioniert mein Script

Jup ;)

Allerdings sind halt funktioniert und gut und gut und portabel
drei verschiedene Dinge (oder so)... *scnr*

Wobei ich explizit betonen will, dass ich nicht einmal andeuten will,
dass meine scripte/programme auch nur einen Deut besser waeren. ;)

-dnh

-- 
Jetzt kriege ich es echt mit der Angst: da gibt es Zeilen in meinem
Code der identisch mit dem von SCO ist, etwa ein include
stdio.h oder aber auch ein hinterlistiges default:break;.
-- Michael Karges in suse-linux


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: datei zerhacken und per netcat verschicken

2005-05-14 Diskussionsfäden David Haller
Hallo,

Am Fri, 13 May 2005, Martin Dickopp schrieb:
David Haller [EMAIL PROTECTED] writes:

  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...

Was meinst Du mit Umrechung in die Blöcke?

Das was du nicht zitiert hast. for SEEK in `seq 0 $SIZE`
d.h. fuer jedes Byte der Eingabedatei wird das dd aufgerufen.

Dieser Befehl führt eine einzige Leseoperation aus, in der er 584 Bytes
liest. Fehlerhaft ist allerdings, daß seek nicht im Input, sondern im
Output Blöcke überspringt. Gemeint war wohl skip.

Stimmt.

 BLKSZ=584
 [...]
 dd if=$1 bs=$BLKSZ seek=$seek count=1 | \

Abgesehen vom fehlenden of=-, Unterschieden im Quoting und unter-
schiedlichen Variablennamen unterscheidet sich das nicht von der Zeile,
die Du kritisiert hattest.

Du hast's wieder nicht zitiert.

Jetzt also nochmal richtig:


BLKSZ=584
SIZE=`wc -c  $1`
BLOCKS=`echo ($SIZE / $BLKSZ) | bc` ### das hier ist der
  ### Unterschied. Da seq ab 0
  ### kann das +1 doch wegfallen.

for skip in `seq 0 $BLOCKS`; do
dd if=$1 bs=$BLKSZ skip=$skip count=1 | \
netcat -u -q 0 127.0.0.0 2006 || break
done


-dnh

-- 
NT is the only OS that has caused me to beat a piece of hardware to death
with my bare hands.  -- Derry Hamilton


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: datei zerhacken und per netcat verschicken

2005-05-13 Diskussionsfäden Martin Dickopp
David Haller [EMAIL PROTECTED] writes:

  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...

Was meinst Du mit Umrechung in die Blcke?

Dieser Befehl fhrt eine einzige Leseoperation aus, in der er 584 Bytes
liest. Fehlerhaft ist allerdings, da seek nicht im Input, sondern im
Output Blcke berspringt. Gemeint war wohl skip.

 BLKSZ=584
 [...]
 dd if=$1 bs=$BLKSZ seek=$seek count=1 | \

Abgesehen vom fehlenden of=-, Unterschieden im Quoting und unter-
schiedlichen Variablennamen unterscheidet sich das nicht von der Zeile,
die Du kritisiert hattest.

 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 geseekt 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.

Die Zeit, um an eine bestimmte Stelle in einer Datei zu seeken, ist
ungefhr konstant, unabhngig davon, wo in der Datei die Stelle liegt.
Darum ist die Ausfhrungszeit des Skriptes _linear_ von der Dateigre
abhngig.

Davon, da dd tatschlich den Systemcall lseek verwendet, kann man
sich im Quellcode (coreutils 5.2.1) in Datei src/dd.c, Zeile 818
berzeugen.

Martin



Re: datei zerhacken und per netcat verschicken

2005-05-13 Diskussionsfäden Michelle Konzack
Am 2005-05-13 03:29:15, schrieb David Haller:
 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`

Das macht einen arithmetischen Wert daraus

 useless use of let, useless use of cat
 
 SIZE=`wc -c  $1`

Das macht aber ne Zeichenkette

man bash

Wenn Du Zeit hat den Schmöker mal durchzugehen.
Ich habe unzählige scripts in denen es zu unerwarteten
fehlern bei Deiner Version kommt.

Bei Deiner version kommt dann sowas wie1234 also eine Zeichen-
ketteraus, während bei mir 1234 einer ein zahlenwert rauskommt.

 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...

Ups, sollte

for SEEK in `seq 0 584 $SIZE` ; do

sein.

 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

Nein, denn die Schleife rennt weiter wenn 'netcat'
einen Fehler hat. 'break' beendet die Schleife.

 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.

Das macht nichts in diesem Fall (Exit Status),
kann entweder
if [ $? == 1 ] ; then break ; fi
oder
if [ $? -eq 9 ] ; then break ; fi
verwenden

 Ja, bei sowas bin ich ein Pedant ;)

Abgesehen vom 'seq' funktioniert mein Script

 -dnh

Greetings
Michelle

-- 
Linux-User #280138 with the Linux Counter, http://counter.li.org/
Michelle Konzack   Apt. 917  ICQ #328449886
   50, rue de Soultz MSM LinuxMichi
0033/3/8845235667100 Strasbourg/France   IRC #Debian (irc.icq.com)


signature.pgp
Description: Digital signature


Re: datei zerhacken und per netcat verschicken

2005-05-13 Diskussionsfäden Michelle Konzack
Am 2005-05-13 09:15:22, schrieb Martin Dickopp:
 David Haller [EMAIL PROTECTED] writes:
 
   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...
 
 Was meinst Du mit Umrechung in die Blöcke?
 
 Dieser Befehl führt eine einzige Leseoperation aus, in der er 584 Bytes
 liest. Fehlerhaft ist allerdings, daß seek nicht im Input, sondern im
 Output Blöcke überspringt. Gemeint war wohl skip.

Oops... genau, das war was vorhin auch noch korregieren wollte...

 Martin

Greetings
Michelle

-- 
Linux-User #280138 with the Linux Counter, http://counter.li.org/
Michelle Konzack   Apt. 917  ICQ #328449886
   50, rue de Soultz MSM LinuxMichi
0033/3/8845235667100 Strasbourg/France   IRC #Debian (irc.icq.com)


signature.pgp
Description: Digital signature


datei zerhacken und per netcat verschicken

2005-05-12 Diskussionsfäden Bastian Venthur
Hi Liste,

ich hab hier eine ziemlich große Datei (4mb), die per udp in
540Byte-Paketen mit einem abstand von 1/60s verschickt werden soll.

Wie ich die Daten mit netcat verschicke weis ich, aber nicht, wie ich für
die 540Byte-Häppchen sorgen soll. Für einfaches Split ist die Datei zu groß
(mit zwei Suffixbuchstaben können nicht genug Dateien erzeugt werden, wie
benötigt).

Kann mir einer auf die Schnelle nen kleinen Kommandozeilenhack schicken, der
ungefähr das hier leistet:

cat testdatei | zerhacke in 540Byte | netcat -u localhost 2006

Auf die 1/60s Pausse zwischen jedem Packet kommt es nicht an, obwohl es
natürlich das Sahnehäubchen wäre ;)


Schöne Grüße

Bastian


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: datei zerhacken und per netcat verschicken

2005-05-12 Diskussionsfäden Bernd Schwendele
Bastian Venthur schrieb:
Hi Liste,
ich hab hier eine ziemlich große Datei (4mb), die per udp in
540Byte-Paketen mit einem abstand von 1/60s verschickt werden soll.
Wie ich die Daten mit netcat verschicke weis ich, aber nicht, wie ich für
die 540Byte-Häppchen sorgen soll. Für einfaches Split ist die Datei zu groß
(mit zwei Suffixbuchstaben können nicht genug Dateien erzeugt werden, wie
benötigt).
 

*räusper*
[EMAIL PROTECTED]:~$ split --help
Aufruf: split [OPTION] [EINGABE [PRÄFIX]]
Stücke fester Größe der EINGABE auf PRÄFIXaa, PRÄFIXab, ... ausgeben;
Vorgabe
für PRÄFIX ist ,,x.  Wenn keine EINGABE angegeben wurde oder die
EINGABE ,,-
ist, Standardeingabe lesen.
Erforderliche Argumente für lange Optionen sind auch für kurze erforderlich.
 -a, --suffix-length=NSuffixe mit Länge N verwenden (Vorgabe 2)
Gruß
 Bernd

--
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)


Re: datei zerhacken und per netcat verschicken

2005-05-12 Diskussionsfäden Bastian Venthur
Bernd Schwendele wrote:

 Bastian Venthur schrieb:
 
Hi Liste,

ich hab hier eine ziemlich große Datei (4mb), die per udp in
540Byte-Paketen mit einem abstand von 1/60s verschickt werden soll.

Wie ich die Daten mit netcat verschicke weis ich, aber nicht, wie ich für
die 540Byte-Häppchen sorgen soll. Für einfaches Split ist die Datei zu
groß (mit zwei Suffixbuchstaben können nicht genug Dateien erzeugt werden,
wie benötigt).

  

 *räusper*
[...]
 
 Gruß
   Bernd

Autsch! Ich muss sagen, der hat gesessen. Ok das Problem mit den zwei
Suffixbuchstaben ist ja jetzt gelöst, aber das Problem ist, dass das ganze
immernoch ziemlich unelegant aussieht:

,---[schnipp]---
| #!/bin/sh
| 
| # Zerhacke die Datei in kleine Häppchen
| cat $1 | split --bytes=584 --suffix-length=5
| 
| # Sende die Häppchen
| for i in `ls x*`;
| do
| cat $i | netcat -u -q 0 127.0.0.1 2006
| done
|
| # Lösche die Häppchen
| rm x*
`---[schnapp]---

Das Splitten und Löschen kostet schon ziemlich viel zeit und wenn ich am
Emfpfänger (wo ich die Daten hinschicke) genug gesehen habe, und das Skript
abbreche bleiben natürlich die ganzen gesplitteten Dateien übrig, die dann
per Hand löschen muss.

Kann man nicht irgendwie die Ausgabe von split direkt an netcat leiten (Pipe
funktioniert in diesem Fall nicht), ohne die gesplitteten Dateien
tatsächlich *anlegen* zu müssen?


Schöne Grüße

Bastian


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: datei zerhacken und per netcat verschicken

2005-05-12 Diskussionsfäden Ulf Volmer
On Thu, May 12, 2005 at 09:27:11PM +0200, Bastian Venthur wrote:

 | for i in `ls x*`;

Was würde gegen

for i in x*

sprechen?

cu
ulf

-- 
Ulf Volmer
[EMAIL PROTECTED]
www.u-v.de


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: datei zerhacken und per netcat verschicken

2005-05-12 Diskussionsfäden David Haller
Hallo,

Am Thu, 12 May 2005, Bastian Venthur schrieb:
Autsch! Ich muss sagen, der hat gesessen. Ok das Problem mit den zwei
Suffixbuchstaben ist ja jetzt gelöst, aber das Problem ist, dass das ganze
immernoch ziemlich unelegant aussieht:

,---[schnipp]---
| #!/bin/sh
| 
| # Zerhacke die Datei in kleine Häppchen
| cat $1 | split --bytes=584 --suffix-length=5
| 
| # Sende die Häppchen
| for i in `ls x*`;
| do
| cat $i | netcat -u -q 0 127.0.0.1 2006
| done
|
| # Lösche die Häppchen
| rm x*
`---[schnapp]---

Das Splitten und Löschen kostet schon ziemlich viel zeit und wenn ich am
Emfpfänger (wo ich die Daten hinschicke) genug gesehen habe, und das Skript
abbreche bleiben natürlich die ganzen gesplitteten Dateien übrig, die dann
per Hand löschen muss.

Kann man nicht irgendwie die Ausgabe von split direkt an netcat leiten (Pipe
funktioniert in diesem Fall nicht), ohne die gesplitteten Dateien
tatsächlich *anlegen* zu müssen?

 UNGETESTET[1] 
#!/bin/sh
test -r $1 || exit 1
dd if=$1 bs=584 cbs=584 conv=unblock | while read -r frag; do
echo $frag | netcat -u -q 0 127.0.0.1 2006
done


Koennte trotz 'read -r' noch Probleme mit Sonderzeichen (binary?) geben...

HTH,
-dnh

[1] nur per:
echo -n '123456' | dd bs=2 cbs=2 conv=unblock | \
while read x; do echo $x; done

-- 
Rincewind groaned. His bones were very angry at the treatment they had
recently received and were queuing up to complain.
-- Terry Pratchett, The Light Fantastic


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: datei zerhacken und per netcat verschicken

2005-05-12 Diskussionsfäden Michelle Konzack
Am 2005-05-12 21:27:11, schrieb Bastian Venthur:

 | #!/bin/sh
 | 
 | # Zerhacke die Datei in kleine Häppchen
 | cat $1 | split --bytes=584 --suffix-length=5
 | 
 | # Sende die Häppchen
 | for i in `ls x*`;
 | do
 | cat $i | netcat -u -q 0 127.0.0.1 2006
 | done
 |
 | # Lösche die Häppchen
 | rm x*
 `---[schnapp]---
 
 Das Splitten und Löschen kostet schon ziemlich viel zeit und wenn ich am
 Emfpfänger (wo ich die Daten hinschicke) genug gesehen habe, und das Skript
 abbreche bleiben natürlich die ganzen gesplitteten Dateien übrig, die dann
 per Hand löschen muss.
 
 Kann man nicht irgendwie die Ausgabe von split direkt an netcat leiten (Pipe
 funktioniert in diesem Fall nicht), ohne die gesplitteten Dateien
 tatsächlich *anlegen* zu müssen?

Also hier wird nichts auch die Platte gekippt:

8
#!/bin/bash

let SIZE=`cat $1 |wc -c`

for SEEK in `seq 0 $SIZE` ; do
  dd if=$1 of=- bs=584 seek=$SEEK count=1 |\
netcat -u -q 0 127.0.0.1 2006
if [ $? == 1 ] ; then break ; fi
done

8

 Schöne Grüße
 
 Bastian

Greetings
Michelle

-- 
Linux-User #280138 with the Linux Counter, http://counter.li.org/
Michelle Konzack   Apt. 917  ICQ #328449886
   50, rue de Soultz MSM LinuxMichi
0033/3/8845235667100 Strasbourg/France   IRC #Debian (irc.icq.com)


signature.pgp
Description: Digital signature


Re: datei zerhacken und per netcat verschicken

2005-05-12 Diskussionsfäden Bastian Venthur
Michelle Konzack wrote:

 Also hier wird nichts auch die Platte gekippt:
 
 8
 #!/bin/bash
 
 let SIZE=`cat $1 |wc -c`
 
 for SEEK in `seq 0 $SIZE` ; do
   dd if=$1 of=- bs=584 seek=$SEEK count=1 |\
 netcat -u -q 0 127.0.0.1 2006
 if [ $? == 1 ] ; then break ; fi
 done
 
 8

Also danke an Alle für die Mühe, auf die Idee dd zu Missbrauchen bin ich
garnicht gekommen. Bei mir läuft folgende vereinfachte Version

dd if=testlauf bs=854 | netcat -u -q 0 127.0.0.1 2006 

Sehr gut und vor allem ca 100 mal schneller als die split-methode. Das
einzige Problem ist, dass die Statusmeldung am Ende auf diese Weise auch
ans über die Pipe an netcat geht. Aber wenn ich morgen wieder etwas wacher
bin, werd ich mir die dd-Beispiele hier nochmal genauer ansehen ;)

Danke nochmal und nächtsle

Bastian


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: datei zerhacken und per netcat verschicken

2005-05-12 Diskussionsfäden Michelle Konzack
Am 2005-05-13 00:46:13, schrieb Bastian Venthur:

 Also danke an Alle für die Mühe, auf die Idee dd zu Missbrauchen bin ich
 garnicht gekommen. Bei mir läuft folgende vereinfachte Version
 
 dd if=testlauf bs=854 | netcat -u -q 0 127.0.0.1 2006 
 
 Sehr gut und vor allem ca 100 mal schneller als die split-methode. Das
 einzige Problem ist, dass die Statusmeldung am Ende auf diese Weise auch
 ans über die Pipe an netcat geht. Aber wenn ich morgen wieder etwas wacher
 bin, werd ich mir die dd-Beispiele hier nochmal genauer ansehen ;)

Dann mach sie doch weg :-)

dd if=testlauf bs=854 2/dev/null | netcat -u -q 0 127.0.0.1 2006 

 Danke nochmal und nächtsle
 
 Bastian

Greetings
Michelle

-- 
Linux-User #280138 with the Linux Counter, http://counter.li.org/
Michelle Konzack   Apt. 917  ICQ #328449886
   50, rue de Soultz MSM LinuxMichi
0033/3/8845235667100 Strasbourg/France   IRC #Debian (irc.icq.com)


signature.pgp
Description: Digital signature


Re: datei zerhacken und per netcat verschicken

2005-05-12 Diskussionsfäden Bastian Venthur
Bastian Venthur wrote:

 Michelle Konzack wrote:
 
 Also hier wird nichts auch die Platte gekippt:
 
 8
 #!/bin/bash
 
 let SIZE=`cat $1 |wc -c`
 
 for SEEK in `seq 0 $SIZE` ; do
   dd if=$1 of=- bs=584 seek=$SEEK count=1 |\
 netcat -u -q 0 127.0.0.1 2006
 if [ $? == 1 ] ; then break ; fi
 done
 
 8
 
 Also danke an Alle für die Mühe, auf die Idee dd zu Missbrauchen bin ich
 garnicht gekommen. Bei mir läuft folgende vereinfachte Version
 
 dd if=testlauf bs=854 | netcat -u -q 0 127.0.0.1 2006
 
 Sehr gut und vor allem ca 100 mal schneller als die split-methode. Das
 einzige Problem ist, dass die Statusmeldung am Ende auf diese Weise auch
 ans über die Pipe an netcat geht. Aber wenn ich morgen wieder etwas wacher

Nene, da hab ich mich wohl geirrt. Die Statusinfo geht nicht über die Pipe,
insofern läuft der Einzeiler da oben perfekt durch. Das Problem ist hier,
das die Datei kein Vielfaches von 584Bytes groß ist, aber dass ist ein
anderes Problem.

Danke nochmal -- Problem gelöst ;)


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: datei zerhacken und per netcat verschicken

2005-05-12 Diskussionsfäden Bastian Venthur
Am Donnerstag, 12. Mai 2005 22:27 schrieb Bernd Schwendele:
 [...]

 ,---[schnipp]---
 
 | #!/bin/sh
 |
 | # Zerhacke die Datei in kleine Häppchen
 | cat $1 | split --bytes=584 --suffix-length=5
 |
 | # Sende die Häppchen
 | for i in `ls x*`;
 | do
 | cat $i | netcat -u -q 0 127.0.0.1 2006
 | done
 |
 | # Lösche die Häppchen
 | rm x*
 
 `---[schnapp]---
 
 Das Splitten und Löschen kostet schon ziemlich viel zeit und wenn ich am
 Emfpfänger (wo ich die Daten hinschicke) genug gesehen habe, und das
  Skript abbreche bleiben natürlich die ganzen gesplitteten Dateien übrig,
  die dann per Hand löschen muss.
 
 Kann man nicht irgendwie die Ausgabe von split direkt an netcat leiten
  (Pipe funktioniert in diesem Fall nicht), ohne die gesplitteten Dateien
  tatsächlich *anlegen* zu müssen?

 Sorry, mir stellt sich aber gerade die Frage, warum Du überhaupt die
 Dateien splitten willst?
 Macht für mich gerade keinen Sinn...
 Gruß
   Bernd

Weil die Anwendung die UDP-Pakete ungepuffert entgegen nimmt, d.h. sie liest 
ganz stumpf aus jeden eingehendem Datagram die ersten x Bytes, wirft den Rest 
weg und wartet auf neue Pakete. Das ist in sofern sinnvoll, da trotz aller 
Schwächen von UDP die Datagramme immer vollständig ankommen und die Anwendung 
an sich ca 60 mal pro Sekunde so ein Datagramm empfängt. Um das zu simulieren 
reicht es also nicht, die ganze Datei in einem Schub zu verschicken, da die 
Anwendung sonnst nur ein Datagramm sieht.




Re: datei zerhacken und per netcat verschicken

2005-05-12 Diskussionsfäden David Haller
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 geseekt 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


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)