[sage] BSD printf

Dirk Wetter dirk.wetter at guug.de
Wed Sep 26 08:57:19 CEST 2018


Hi,

ich habe da ein kleines Problem. Wie einige vielleicht
wissen, habe ich da ein FOSS-Projekt namens testssl.sh.

Eine Kernfunktion sind Sockets. Das Projekt ist abseits
ein paar weniger Unix-Tools drumherum in bash -- der kleinste
gemeinsamste Nenner für BSDs (inkl. OS X), WSL, Cygwin etc.

Auch die Sockets sind in bash programiert über /dev/tcp/*.
Das klappt sogar recht gut.

Leider nur hat das bash interne printf, womit die
Bytes in die Sockets gesendet werden, das Problem,
dass es bei jedem "\x0a" ein write flush macht wird, und
das ein neues Netzpaket wird -- mit dem Resultat, dass
TCP-Fragmentierung auftritt.

Eine elegante Lösung wäre ein externes printf zu benutzen.
Das klappt für Linux, da es genauso funktioniert wie das
bash-Interne, also:

/usr/bin/printf --  "\x16\x03\x01\x02\x00\x01\x00\x01\xfc\x03" | xxd
--> 0000000: 1603 0102 0001 0001 fc03                 ..........

aber leider nicht für BSD, hier FreeBSD:

-->
00000000: 7831 3678 3033 7830 3178 3032 7830 3078  x16x03x01x02x00x
00000010: 3031 7830 3078 3031 7866 6378 3033       01x00x01xfcx03

Frage: geht das mit dem FreeBSD printf überhaupt? Solaris sollte
ein ähnliches, externes printf haben IIRC.


VG, Dirk






More information about the SAGE mailing list