Hallo zusammen.
Ich habe ein Problem, einen lwp-request auf eine einfache socket kommunikation abzubilden.
Über den lwp-request wird über Port 80 zum Webinterface der Fritz!Box verbunden
und anschließend ein Login und die Anwahl der entsprechend an das Script übergebebene Rufnummer vorgenommen. Nach einem bestimmten delay wird dann wieder aufgelegt.
Als normales Shellscript (bash mit lwp-request unix-cmd) funktioniert es einwandfrei.
Code:
PHP:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
#!/bin/bash
# Script meldet sich an der FritzBox an
# und ruft die uebergebene Rufnummer an.
# Hier klingelt das Script lediglich kurz an.
#
# @author Christian Felder
# @version 1.00-14.11.2007
#
##
# Constants
#
password="PWDSTRING" # Webinterface Password
dialport=${2:-"FON 2"} # Fon Port
delay=9 #Zeit zwischen waehlen und auflegen
#Es muss beachtet werden, dass eine bestimmte Zeit gebraucht wird,
#um ueberhaupt eine Verbindung herzustellen
##
# parameter Check and number format
#
if [ "${1}" = "" ]; then
echo "ERROR: Wrong Syntax"
echo "Use: ./$(basename ${0}) number [fon-port]"
exit 0
else
# format number
dialnumber=$(echo ${1} | sed -e '
s/+/00/
s/[^0-9]//g
')
fi
##
# commands definition
#
# Definition des Linux CMD: lwp-request
cmd_lwp="lwp-request -s -m POST http://fritz.box/cgi-bin/webcm"
# Definition des Login CMDs auf der Fritz!Box
cmd_login="getpage=../html/de/menus/menu2.html
&var:lang=de
&login:command/password=${password}
&telcfg:settings/UseClickToDial=1
"
# Definition des Anwahl CMDs (FON) auf der Fritz!Box
cmd_telcfg="getpage=../html/de/menus/menu2.html
&var:lang=de
&telcfg:settings/UseClickToDial=1
&telcfg:command/Dial=${dialnumber}
&telcfg:settings/DialPort=${dialport}"
# Definition des Auflegen CMDs (FON) auf der Fritz!Box
cmd_hangup="getpage=../html/de/menus/menu2.html
&var:lang=de
&telcfg:settings/UseClickToDial=1
&telcfg:command/Hangup=${dialnumber}
&telcfg:settings/DialPort=${dialport}"
##
# main-Methode
#
{ echo -e "$cmd_login" | $cmd_lwp 2>&1 | echo "-" #login
echo -e "$cmd_telcfg" | $cmd_lwp 2>&1 | echo "-" #call
sleep $delay #wait some seconds
echo -e "$cmd_hangup" | $cmd_lwp 2>&1 | echo "-" #cancel call
} | grep -v "^$" |
echo "Dialing ${dialnumber} on fon-port: ${dialport}" |
Nun möchte ich das Ganze entsprechend mit einem Python Script machen,
ohne
das lwp-request unix-cmd zu benutzen, da auf dem Server, auf dem das Script zum Einsatz kommen soll, dieser CMD nicht vorhanden ist.
Die Socketkommunikation in python zu schreiben usw. ist kein Problem. Das habe ich bereits getan. Den Code lasse ich mal aus, um zum wesentlichen zu kommen.
Über den Socket geht beim ausführen des Shellscripts folgendes.
POST /cgi-bin/webcm HTTP/1.1
TE: deflate,gzip;q=0.3
Connection: TE, close
Host: 127.0.0.1
User-Agent: lwp-request/2.07
Content-Length: 114
Content-Type: application/x-www-form-urlencoded
Zitat:
getpage=../html/de/menus/menu2.html&var:lang=de&login:command/password=PWDSTRING&telcfg:settings/UseClickToDial=1
was mir gerade auffällt. die Rufnummer ist im request garnicht enthalten.
scheinbar scheint dies nur der Login zu sein...
Mehr konnte ich jedoch nicht mitlesen.
Wenn ich das ganze per telnet absetze.
Bekomme ich ne html Seite zurück geschickt.
und der Socket wird geschlossen.
Kein Klingeln :(
Was muss ich noch tun... jemand ne idee..