[gelöst] POST-Request mit nc

fritzchen

Aktives Mitglied
Mitglied seit
29 Dez 2004
Beiträge
813
Punkte für Reaktionen
0
Punkte
16
edit:
meine Lösung findet sich hier:
http://www.ip-phone-forum.de/forum/viewtopic.php?p=205225



Hallo Leute,

ich versuche mich an einer Möglichkeit mit nc Daten per POST an meinen Webserver zu schicken

Hiermit:
Code:
#!/bin/sh
#--------------------------------------------------------------------
# Reboot FBF
#--------------------------------------------------------------------

echo "POST /posteingang.php HTTP/1.0
Content-Type: multipart/form-data; boundary=---------------------------7d43ae9c022e
User-Agent: fli4l-status
Host: xyz.net
Content-length: 999

-----------------------------7d43ae9c022e
Content-Disposition: form-data; name=\"reboot\"

das ist aber schön
1
2
3
4
5
6
7
8
9

-----------------------------7d43ae9c022e--
" |
nc xyz.net 80

komme ich auch zum gewünschten Ergebnis.

Nun möchte ich den Inhalt einer Textdatei statt der sinnfreien Zahlen als Inhalt des Request haben.
Kann mir jemand sagen, wie ich den Inhal
t der textdatei in den Request reinbekomme?


Zweite Frage:
Kennt sich jemand mittlerweile mit webcm aus? Besteht eine Möglichkeit an webcm auch in der Shell Variablen zu übergeben?
Im Moment rufe ich per wget die Anrufliste des Webinterfaces auf, damit ich dann mit enriks journal die aktuelle Anrufliste bekomme. Etwas umständlich...

Besten Dank für Eure Hilfe!
 
Versuch mal folgendes:
Code:
#!/bin/sh
#--------------------------------------------------------------------
# Reboot FBF
#--------------------------------------------------------------------


(
CONTENT_LENGTH=`cat textdatei | wc -c`
echo "POST /posteingang.php HTTP/1.0
Content-Type: multipart/form-data; boundary=---------------------------7d43ae9c022e
User-Agent: fli4l-status
Host: xyz.net
Content-length: $CONTENT_LENGTH

-----------------------------7d43ae9c022e
Content-Disposition: form-data; name=\"reboot\"

"
cat textdatei
echo "

-----------------------------7d43ae9c022e--
"
) | nc xyz.net 80

Den Content length könntest du dir eventuell auch so richtig berechnen (EDIT: oben mit eingebaut):
Code:
LEN=`cat textdatei | wc -c`
 
funktioniert wunderbar, danke!

habe leider vergessen die richtige url zu löschen, kannst Du das auch noch nachholen? besten dank!

LEN ist irgendwie nicht lang genug, die Textdatei kommt nur abgeschnitten an...

Besten Dank schon mal!
 
Ich habs mit CONTENT_LENGTH oben eingebaut. Ob der HTTP Header 100% konform ist, müßte ich erst nachlesen, aber wenns klappt, dann passts ja. Schau mal ob nun alle Zeichen ankommen, eventuell mußt du noch ein oder zwei Zeichen zu CONTENT_LENGTH dazuaddieren.

Wieviele Zeichen fehlen denn? Ist es ein gewisser Bruchteil der Gesamtlänge oder eine konstante Anzahl von Zeichen (egal wie lange der Text ist)?

Mfg,
Daniel
 
hi daniel,

da fehlt glaube immer eine gewisse Anzahl, schätze mal dass mein Request nicht ganz Regelkonform ist. Wahrscheinlich fällt in meinem Fall unter Content-length auch die
Content-Disposition: form-data; name=\"reboot\"
Zeile.
Ich werde das bei Zeiten überprüfen,

bis hierher besten Dank für die Hilfe, jetzt habe ich eine POST-Möglichkeit ohne wget!
 
Wieviele Zeichen fehlen denn?
Es dürften einige fehlen, zum Content des Requests gehört alles nach der ersten Leerzeile:
Code:
-----------------------------7d43ae9c022e
Content-Disposition: form-data; name="reboot"

...
-----------------------------7d43ae9c022e--
Die vier Zeilen müssen also mitgezählt werden (am besten in einer Datei zusammenbauen und dann im Ganzen zählen).

Viele Grüße.
 
Re: POST-Request mit nc

fritzchen schrieb:
Kennt sich jemand mittlerweile mit webcm aus? Besteht eine Möglichkeit an webcm auch in der Shell Variablen zu übergeben?
Ja, man muss nur die richtige Menge an Variablen kennen. Ein Beispiel für einen POST-Request habe ich hier mal beschrieben. Für einen GET-Request musst du QUERY_METHOD auf GET setzen und den Query-String (der Teil der URL hinter dem Fragezeichen) in QUERY_STRING übergeben; CONTENT_LENGTH und die Standardeingabe fallen dann weg. Frag einfach nach, wenn du ein Beispiel brauchst; momentan kann ich es nicht ausprobieren.

Viele Grüße.
 
hi buehmann, besten Dank!

ich blicke es nicht ganz, habe jetzt mal:
Code:
export REQUEST_METHOD="GET"
export REMOTE_ADDR="127.0.0.1"
export CONTENT_TYPE="application/x-www-form-urlencoded"

QUERY_STRING="getpage=../html/de/menus/menu2.html&var:lang=de&var:menu=fon&var:pagename=foncalls"
#POST_DATA="login:command/password=test"
#POST_DATA="box:settings/expertmode/activated=1"
#export CONTENT_LENGTH=${#POST_DATA}

echo -n "$QUERY_STRING" | /usr/www/html/cgi-bin/webcm

probiert, da bekomme ich dann als Ergebnis den Hinweis, dass das Webinterface auf xhtml-frames basiert... [s:142623472e]
am wichtigsten dabei dürfte jedoch sein, dass es an javascript fehlt...[/s:142623472e]
ich probiere weiter :wink:
 
Hi fritzchen, ich bekomme mit folgendem die komplette Seite mit der Anrufliste:
Code:
export REQUEST_METHOD="GET"
export REMOTE_ADDR="127.0.0.1"
export QUERY_STRING="getpage=../html/de/menus/menu2.html&var:lang=de&var:menu=fon&var:pagename=foncalls"
cd /usr/www/html/cgi-bin
./webcm
 
cool, funktioniert auch mit vorgeschaltetem Passwort senden nach Deiner Lösung!

[s:80b9ff7d58]
Aber es werden keine Anrufe angezeigt, die Seite behauptet, es seien keine Anrufe getätigt worden.
Das Problem habe ich auch oft im Webinterface, erst nach ein paar Aufrufen werden die Anrufe angezeigt - und sind dementsprechend auch nur selten per journal auslesbar...

ich habe allerdings den Verdacht, dass es sich hier um ein Problem des m3.21 handelt
[/s:80b9ff7d58]

es war ein Problem mit dem mod, wohl ein bißchen viel gelöscht...
 
@fritzchen

fritzchen schrieb:
cool, funktioniert auch mit vorgeschaltetem Passwort senden nach Deiner Lösung!

Könntest Du die Lösung hier posten ? :wink:

Ich habe es durch Deinen anderen Script hier zwar hinbekommen.
Allerdings besteht hier ja das Passwort-"Problem". :cry:

fritzchen schrieb:
[s:b540a4cab8]
...
ich habe allerdings den Verdacht, dass es sich hier um ein Problem des m3.21 handelt
[/s:b540a4cab8]

es war ein Problem mit dem mod, wohl ein bißchen viel gelöscht...

Da supamicha gerade den m4.22 MOD erstellt hat (hier), wäre es vielleicht gut, wenn Du das in dem Thread posten könntest,
damit supamicha das abändern kann.

Gruß

Obi
 
hier mein aktueller Stand:

Code:
# hat die Box ein Passwort, kommt es hier hin 
	export REQUEST_METHOD="POST"	
	export REMOTE_ADDR="127.0.0.1"
	export CONTENT_TYPE="application/x-www-form-urlencoded"
	POST_DATA="login:command/password=wasauchimmer" # hier ist das richtige Passwort einzutragen
	export CONTENT_LENGTH=${#POST_DATA}
	echo -n "$POST_DATA" | /usr/www/html/cgi-bin/webcm > /dev/null

# jetzt wird einmal die Anrufliste aufgerufen, damit journal es aktuell bekommt
	export REQUEST_METHOD="GET"
	export REMOTE_ADDR="127.0.0.1"
	export QUERY_STRING="getpage=../html/de/menus/menu2.html&var:lang=de&var:menu=fon&var:pagename=foncalls"
	cd /usr/www/html/cgi-bin
	./webcm > /dev/null

#journal in txt speichern
	echo "-----------------------------7d43ae9c022e" > /var/tmp/fritzchen.txt
	echo "Content-Disposition: form-data; name=\"telefon\"" >> /var/tmp/fritzchen.txt
	echo "" >> /var/tmp/fritzchen.txt
	/var/tmp/journal >> /var/tmp/fritzhen.txt
	echo "-----------------------------7d43ae9c022e--" >> /var/tmp/fritzchen.txt
	echo "" >> /var/tmp/fritzchen.txt

#und  jetzt per POST an den webserver, kann aber auch durch den mailer verschickt werden... 
STR=$(cat /var/tmp/fritzchen.txt)
LEN=`cat /var/tmp/fritzchen.txt | wc -c` 

(
echo "POST /posteingang.php HTTP/1.0
Content-Type: multipart/form-data; boundary=---------------------------7d43ae9c022e
User-Agent: fon-status
Host: xyz.net
Content-length: $LEN 

$STR

" ) | nc xyz.net 80
 
@fritzchen

Vielen Dank, werde Deine Lösung mal ausprobieren.

Ich habe mir journal per add_on mit in den m4.25 Mod gepackt.
Funktioniert soweit auch ganz gut.
Das einzige war/ist das Passwort "Problem". :-(

Aber Dein Script ist jetzt die Lösung... :D

Danke und Gruß

Obi
 
es direkt in die firmware zu packen ist wohl das einfachste. Im Moment lade ich noch nach, natürlich ohne das Passwort, das habe ich so gelöst:

Code:
echo "PASSW='passwort' > /var/tmp/telefonjournal.txt
cat journ.sh >> /var/tmp/telefonjournal.txt
chmod +x /var/tmp/telefonjournal.txt

wobei journ.sh das oben angegebene Skript ist und das Passwort "wasauchimmer" natürlich durch $PASSW zu ersetzen ist.

Ich habe keinen Überblick darüber wie groß das Interesse an einer solchen Lösung ist, daher muss es auch nicht unbedingt in den mod von micha, kostet auch nur Platz.
Aber wenn sich doch Interessenten finden können sie sich ja hier kurz melden...
 
Hi
Deine Lösung ist Super.
Ne frage noch...
Was soll ich ändern damit ich eine Nummer auswählen kann bzw ruf auslösen?
 
on_the_way_with_fbf schrieb:
Was soll ich ändern damit ich eine Nummer auswählen kann bzw ruf auslösen?

sorry, keine Ahnung - Ich habe hier keine 7050. Du musst mal schauen was die Box macht um einen Anruf auszulösen.

Aber hiermit hast du schon mal das einloggen mit dem Passwort ;)
 
neuer Beitrag, neuer Sinn:

ein Blick auf die neue Firmware offenbart die Exportmöglichkeit in eine csv-Datei. Diese Möglichkeit löst dann wohl das schöne journal von enrik ab...

Hiermit:
Code:
PASSW='ichbinsicher.de'


        export REQUEST_METHOD="POST"
        export REMOTE_ADDR="127.0.0.1"
        export CONTENT_TYPE="application/x-www-form-urlencoded"
        POST_DATA="login:command/password=$PASSW"
        export CONTENT_LENGTH=${#POST_DATA}
        echo -n "$POST_DATA" | /usr/www/html/cgi-bin/webcm > /dev/null


        export REQUEST_METHOD="GET"
        export REMOTE_ADDR="127.0.0.1"
        export QUERY_STRING="getpage=../html/de/FRITZ!Box_Anrufliste.csv"
        cd /usr/www/html/cgi-bin
        ./webcm > /var/tmp/test.txt

erhalte ich so etwas:
Code:
Content-type: application/octet-stream;
Pragma: no-cache
Cache-Control: no-cache
Expires: -1
Content-Disposition: attachment; filename=FRITZ!Box_Anrufliste.csv

Typ;Datum;Rufnummer;Nebenstelle;Eigene Rufnummer;Dauer
2;07.10.05 08:40;0179xyz;;Internet: 0xyz;0:00

Muss ich mal schauen was ich damit mache, melde mich dann wieder.
 
@fritzchen

nicht schlecht, was Du da wieder rausgefunden hast. :!:

Ich habe das ganze gerade mal ausprobiert.

Man müßte jetzt nur noch die csv Datei richtig formatieren (die ; in Tabs umwandeln).

Gruß

Obi

P.S.: Vielleicht finden sich ja doch noch mehr Leute, die an dieser Sache Intresse haben und
micha baut es irgendwann mit in seinen Mod ein ? :wink:
 
Obi schrieb:
Man müßte jetzt nur noch die csv Datei richtig formatieren (die ; in Tabs umwandeln).
Hi, mal eine ganz dumme Frage: Was ist an Tabs richtiger als an Semikolons? Es gibt noch viele andere Varianten von comma-separated values (csv) ;-) Die meisten Programme lassen dich deswegen beim Im-/Export das Trennzeichen einstellen.

Viele Grüße.
 
@buehmann

Sorry, natürlich hast Du Recht. War von mir vielleicht etwas voreilig geschrieben.

Ich habe einen Hiptop II und lasse mir im Moment per Journal (das von enrik) eine EMail mit der Anrufliste schicken.
(nicht per Anhang, sondern der Text in der EMail)

Es sieht so aus:
Journal0 1 06.10.05 18:21 05xxxxxxxxx 0 0:09
Journal1 3 0 06.10.05 15:15 05xxxxxxx 0 0:02
Journal2 1 0 06.10.05 13:29 05xxxxxxx 0 0:55

Die FRITZ!Box_Anrufliste.csv sieht so aus:
Typ;Datum;Rufnummer;Nebenstelle;Eigene Rufnummer;Dauer
1;07.10.05 11:23;05xxxxxxx;FON 1;;0:02
1;07.10.05 10:44;05xxxxxxx;FON 1;Internet: 05xxxxxxx;0:20

Mein Wunsch wäre das ganze optisch nur etwas anzupassen, damit man es leichter lesen kann.

Gruß

Obi
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.