Datei mit kleiner Änderung übergeben

te one

Lt. Commander
Registriert
Apr. 2009
Beiträge
1.255
Hallo,

ich nutze nc zum einschleußen eines Datenpaketes ins Netzwerk. Dieses Paket habe ich als Datei abgelegt. Das Kommando zum versenden lautet wie folgt:
cat file | nc host port

Nun muss ich jedoch in der Datei bei jedem absenden eine kleine Änderung vornehmen (es werden Befehle versendet). Ich dachte ich könne das in etwa so machen:
cat file | sed -e "s/COMMAND/blablabla/" | nc host port
(COMMAND steht in der Datei anstelle des Befehls. blablabla wäre in dem Fall der abzusendende Befehl)
Leider hat das nicht funktioniert.
Ich habe nun versucht einfach mal die Datei im nano aufzumachen, ein Zeichen zu ändern, dieses wieder zurück zu ändern --> schon funktioniert die Datei nicht mehr. Ab einer Leerzeile scheinen sich alle Byte um eins verschoben zu haben (wieder hinten in der datei noch weitere Verschiebung).

Wie bekomme ich es hin, dieses eine Kommando in der datei dynamisch einzusetzen?

Sonst müsste ich für jedes Kommando ein extra Datenpaket abspeichern...Das wäre etwas langwierig...

Danke schonmal.
 
Grundsätzlich sehe ich nicht, warum sed -e "s/COMMAND/blablabla/" nicht funktionieren sollte. Stellt sich natürlich die Frage, was genau das Problem ist / was für ein Inhalt, ... Checksumme ev.? Vielleicht würde es helfen, wenn wir den Inhalt der Datei sehen könnten...

Und dein Gefrickel mit nano: Ist es ein Text File oder binary zeugs? Könnte sein, dass nano wegen Unicode etwas an der Datei "zerstört".

mal abgesehen davon, so als Tipp nebenbei:

anstatt: cat file | nc host port
einfach: nc host port < file

anstatt: cat file | sed ... | nc ...
einfach sed ... file | nc ...
 
Zuletzt bearbeitet:
Checksumme kann es eigentlich nicht sein, da ich den gleichen Befehl per sed an die Stelle geschrieben habe wie bei meinem statischen test.

Zu Nano: An sich ist das Text, allerdings hat der Hex-Editor gezeigt, dass es doch einige Unterschiede gibt, wenn ich mit Nano speichere (Datei stammt ursprünglich aus Windows, Wireshark).

Danke für die Tipps. Bin in Linux recht "frisch".
Hier mal die Datei, die ich übers Netz per NC schicke (Zeile 14 muss immer geändert werden):

Code:
POST /upnp/control/IRCC HTTP/1.1
content-type: text/xml; charset=utf-8
soapaction: "urn:schemas-sony-com:service:IRCC:1#X_SendIRCC"
User-Agent: Dalvik/1.6.0 (Linux; U; Android 4.2.2; Galaxy Nexus Build/JDQ39)
Host: 192.168.178.119:50001
Connection: Keep-Alive
Accept-Encoding: gzip
Content-Length: 317

<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle=                                                                             "http://schemas.xmlsoap.org/soap/encoding/">
  <s:Body>
    <u:X_SendIRCC xmlns:u="urn:schemas-sony-com:service:IRCC:1">
      <IRCCCode>AAAAAwAAHFoAAAA7Aw==</IRCCCode>
    </u:X_SendIRCC>
  </s:Body>
</s:Envelope>
 
Das sollte eigentlich keinerlei Problem darstellen. Aber: Passt du den Content-Length Header Wert an? Ich vermute mal, hier liegt dein Fehler.
 
Redest du von dem Content-Length in Zeile 8? (317)
Nein, den passe ich nicht an.

Auf was soll ich es sonst stellen, wenn es doch so geht, wenn ich das Paket direkt abschicke?

Ich hab leider das Problem, dass die Man-in-the-Middle-Attacke mit meinem Linux nicht richtig läuft (keine Ahnung warum...), deshalb kann ich mir auch nicht das ins Netz gespeißte Paket ansehen. Müsste höchstens nochmal probieren ob ich es zum laufen bekomme...
 
Content-Length besagt, wie gross (bytes) der Body ist. Wenn du also einen exakt gleich langen Wert einbaust, müsstest du Content-Length nicht anpassen - andernfalls eben schon.
 
Ja eben, deshalb hätte es ja funktionieren müssen mit SED... (Die Werte sind immer genau gleichlang. Es ändern sich nur 2-3 Stellen)
 
Zurück
Oben