Seite 1 von 2

Problem mit SendNetworkString(...)

Verfasst: 22.03.2012 12:01
von Graffiti
Hallo Leute

ich programmiere gerade eine Routine für meinen Asus Mediaplayer
um IPTV aus verschiedenen Online-Quellen einzulesen, fuktioniert auch soweit

jetzt habe ich allerdings ein Problem mit SendNetworkString(...

wenn ich im Browser diesen Link aufrufe, rebootet der Player
http://192.168.2.105/?page=reboot&act=reboot

mit SendNetworkString(...) habe ich schon x Kombinationen versucht, die ich im Forum gefunden habe
geht aber nicht.

kann mir einer verraten wie es funktioniert

Danke und Gruß Gerhard

momentan verwende ich 2 unschöne Codes die aber funktionieren

Code: Alles auswählen

  Select MessageRequester("Reboot Device", "Are you sure to reboot player?", #MB_OKCANCEL)
    Case #IdOK 
        OpenWindow(0, 0, 0, 0, 0, "", #PB_Window_Invisible) 
        WebGadget(1, 0, 0, 0, 0, "http://192.168.2.105/?page=reboot&act=reboot") 
    Case #IdCancel
  EndSelect


  Select MessageRequester("Reboot Device", "Are you sure to reboot player?", #MB_OKCANCEL)
    Case #IdOK
        RunProgram("http://192.168.2.105/?page=reboot&act=reboot")
    Case #IdCancel
  EndSelect

Re: Problem mit SendNetworkString(...)

Verfasst: 22.03.2012 14:11
von alen
Hallo Graffiti,

vielleicht wäre das ein Ansatz.

Der Code sendet ohne das Ergebnis oder die Verbindung genauer zu prüfen, daher nicht optimal und ausbauwürdig.

Kann es hier aber auch nicht testen, da ich nur über einen Proxy rauskomme. Also der Code ist ein kompletter Blindflug.

Viel Spaß beim Fummeln.
Teste mal.

Grüße
Alen

Code: Alles auswählen

EnableExplicit

Procedure RunNetCommand()
  Protected.S HttpHeader, params, ResultData, Server
  Protected.l *Buffer, ConnectionID, Recv
  
  #CRLF = Chr(10) + Chr(13)
  
  Server = "192.168.2.105"
  params = "/?page=reboot&act=reboot"
  
  HttpHeader = ""
  HttpHeader + "GET " + params +" HTTP/1.0" + #CRLF
  HttpHeader + #CRLF+#CRLF
  
  ConnectionID = OpenNetworkConnection( Server, 80 , #PB_Network_TCP )
  
  If ConnectionID
    SendNetworkString(ConnectionID, HttpHeader)
    *Buffer = AllocateMemory(20000)
    
    Repeat
      Recv = ReceiveNetworkData(ConnectionID, *Buffer, MemorySize(*Buffer))
      ResultData + PeekS(*Buffer, Recv)
    Until NetworkClientEvent(ConnectionID) = 0
    
    FreeMemory(*Buffer)
    CloseNetworkConnection(ConnectionID)
  EndIf 
EndProcedure

Select MessageRequester("Reboot Device", "Are you sure to reboot player?", #MB_OKCANCEL)
  Case #IdOK
    RunNetCommand()
  Case #IdCancel
    End
EndSelect

Re: Problem mit SendNetworkString(...)

Verfasst: 22.03.2012 14:46
von Graffiti
funktioniert auch nicht, da..... jetzt die Überraschung
ich habe einen sniffer mitlaufen lassen, und das kommt raus:

http://192.168.2.25/?page=reboot&act=reboot

irgendwie wird aus 192.168.2.105 -> 192.168.2.25

das kappier ich jetzt gar nicht ????????????
192.168.2.25 ist die IP von meinem Rechner

Re: Problem mit SendNetworkString(...)

Verfasst: 22.03.2012 15:20
von alen
Hallo Graffiti,

im Moment sitze ich hier auf der Arbeit und kann das nicht unter echten Bedingungen testen.
Heute Abend wenn ich wieder an eine direkte DSL Leitung komme kann ich Dir ggf. weiterhelfen.

Wie bist Du denn vorgegangen ? Welcher Sniffer ? Gib mal ein paar mehr Details.

Grüße
Alen
Graffiti hat geschrieben:funktioniert auch nicht, da..... jetzt die Überraschung
ich habe einen sniffer mitlaufen lassen, und das kommt raus:

http://192.168.2.25/?page=reboot&act=reboot

irgendwie wird aus 192.168.2.105 -> 192.168.2.25

das kappier ich jetzt gar nicht ????????????
192.168.2.25 ist die IP von meinem Rechner

Re: Problem mit SendNetworkString(...)

Verfasst: 22.03.2012 15:50
von Graffiti
Sniffer Proggi: URL Snooper v2.30.01 by DonationCoder
der zeichnet die Links auf die aus der Netzwerkkarte rein und raus gehen

was aus deinem Code rauskommt,
und das habe ich bei meinen Versuchen mit SendNetworkString auch gehabt :


http://192.168.2.25/?page=reboot&act=reboot
GET /?page=reboot&act=reboot HTTP/1.1

was mit dem WebGadget rauskommt (die 3.Zeile sollte aber nicht interessieren) :

http://192.168.2.105/?page=reboot&act=reboot
GET /?page=reboot&act=reboot HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, applicat

Neuer Versuch

Verfasst: 23.03.2012 08:46
von alen
Hallo Graffiti,

hier nochmal ein etwas ausgearbeitete Version des Test Codes.
Konnte hiermit auch meinen Router abfragen und auch Befehle absetzen.
Vielleicht hilft es Dir weiter.

Grüße
Alen

Edit:
- GUI mit Eingabefeldern und Knopf versehen für mehr Spaß.
- EditorGadget eingefügt damit man alle Ergebnisse besser ansehen kann

Code: Alles auswählen

EnableExplicit

#CRLF = Chr(10) + Chr(13)

Procedure.S CreateHttpHeader(get_url.S = "")
  If get_url = "": ProcedureReturn "": EndIf
  
  Protected.S HttpHeader, UserAgent, Referer
  
  UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20100101 Firefox/11.0"
  Referer   = "http://purebasic.de"
  
  HttpHeader = "GET " + get_url + " HTTP/1.0"   + #CRLF
  HttpHeader + "Referer: " + Referer            + #CRLF
  HttpHeader + "User-Agent: " + UserAgent       + #CRLF
  HttpHeader + #CRLF + #CRLF
  
  ProcedureReturn HttpHeader
EndProcedure

Procedure.S GetHttpRequestDataFromServer(Server.S="", HttpRequestHeader.S ="",Port.l=80)
  If Server = "" Or HttpRequestHeader = "": ProcedureReturn "": EndIf
  
  Protected Received.S
  Protected *Buffer, CID.l, sent_bytes.l, received_bytes.l, cEvent.l
  Protected raw_received.l, file_received.l
  
  *Buffer     = AllocateMemory(8192)
  
  CID = OpenNetworkConnection(Server, Port, #PB_Network_TCP)
  
  If CID > 0 
    sent_bytes = SendNetworkString(CID, HttpRequestHeader)
    
    If sent_bytes > 0
      Repeat
        cEvent = NetworkClientEvent(CID)
        Select cEvent
          Case #PB_NetworkEvent_Data
            Repeat
              received_bytes = ReceiveNetworkData(CID, *Buffer, MemorySize(*Buffer))
              If received_bytes > 0
                Received + PeekS(*Buffer, received_bytes)
              EndIf
            Until received_bytes = -1 Or received_bytes = 0
            raw_received  = #True
          Case #PB_NetworkEvent_File
            file_received = #True
        EndSelect
      Until raw_received = 1 Or file_received = 1 
    EndIf
    CloseNetworkConnection(CID) 
    FreeMemory(*Buffer) 
    ProcedureReturn Received
  EndIf
  
  ProcedureReturn ""
EndProcedure

Enumeration
  #window
  #editor
  #button
  #server_text
  #server_input
  #url_text
  #url_input
EndEnumeration

If OpenWindow(#window, 100, 100, 800, 600, "PureBasic Window", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  ButtonGadget(#button, 10,10, 80,25, "Run Now")
  EditorGadget(#editor, 10,50,780, 540, #PB_Editor_ReadOnly)
  TextGadget(#server_text, 100,13, 30, 20, "Server")
  StringGadget(#server_input, 140,10, 130,25, "api.flickr.com")
  TextGadget(#url_text, 285,13, 25, 20, "URL")
  StringGadget(#url_input, 320,10, 470,25, "/services/feeds/groups_pool.gne?id=807213@N20&lang=en-us&format=json&jsoncallback=?") 
EndIf

  


InitNetwork()

Define.S get_url, header, result, Server
Define.l Event, Quit

Repeat
  Event = WaitWindowEvent()
  
  If Event = #PB_Event_CloseWindow
    Quit = 1
  EndIf
  
  If Event = #PB_Event_Gadget
    Select EventGadget()
      Case #button
        get_url  = GetGadgetText(#url_input) 
        header   = CreateHttpHeader(get_url)
        
        Server  = GetGadgetText(#server_input)
        If get_url <> "" And Server <> ""
          result  = GetHttpRequestDataFromServer(Server, header)
          SetGadgetText(#editor, result) 
        Else
          SetGadgetText(#editor, "Bitte Server und URL eingeben !") 
        EndIf
    EndSelect 
  EndIf
  
Until Quit = 1

Re: Problem mit SendNetworkString(...)

Verfasst: 23.03.2012 15:49
von Derren
Vielleicht läuft auf deinem Rechner ein Server, der die nötigen Befehle weiterleitet (in einem proprietären Protokoll).

Versuch doch mal das:

Code: Alles auswählen

ReceiveHTTPFile("http://192.168.2.105/?page=reboot&act=reboot", "temp.txt")

Re: Problem mit SendNetworkString(...)

Verfasst: 24.03.2012 19:51
von Graffiti

Code: Alles auswählen

ReceiveHTTPFile("http://192.168.2.105/?page=reboot&act=reboot", "temp.txt")
super das funktioniert, jetzt rebootet der Player

Danke nochmals für eure Hilfe

Re: Problem mit SendNetworkString(...)

Verfasst: 25.03.2012 16:30
von Graffiti
nächstes Problem

ich wollte eigentlich noch eine Fernsteuerung über PC realisieren
aber wenn ich den Befehl mit einem Button im Fenster aufrufe, dauert es ca. 10 Sekunden bis der Button wieder gedrückt werden kann.

wenn ich dagegen (siehe unten) dies ausführe mit compile/starten gehts eigentlich fix,
das kann ich x-mal hintereinander drücken und der Player reagiert auch

Code: Alles auswählen

InitNetwork()
ReceiveHTTPFile("http://192.168.2.105/cgi-bin/IpodCGI.cgi?id=0&command=right", "c:\rclog.log")
gibts keinen Befehl der auf jegliche Rückmeldung verzichtet, kann auch eine Api sein

sendnetworkstring funktioniert auf jeden Fall bei mir nicht, er sendet immer auf die IP von meinem Notebook - komischerweise

gruß Gerhard

Re: Problem mit SendNetworkString(...)

Verfasst: 25.03.2012 17:54
von Derren
Wenn es so schnell geht, und mit einem Button ewig dauert, hast du einen Wurm in deinem Eventloop.

Wie sieht's aus, wenn du das hier ausführst?

Code: Alles auswählen

InitNetwork()
ReceiveHTTPFile("http://192.168.2.105/cgi-bin/IpodCGI.cgi?id=0&command=right", "c:\rclog.log") : Debug 1
ReceiveHTTPFile("http://192.168.2.105/cgi-bin/IpodCGI.cgi?id=0&command=right", "c:\rclog.log") : Debug 2
ReceiveHTTPFile("http://192.168.2.105/cgi-bin/IpodCGI.cgi?id=0&command=right", "c:\rclog.log") : Debug 3
ReceiveHTTPFile("http://192.168.2.105/cgi-bin/IpodCGI.cgi?id=0&command=right", "c:\rclog.log") : Debug 4
ReceiveHTTPFile("http://192.168.2.105/cgi-bin/IpodCGI.cgi?id=0&command=right", "c:\rclog.log") : Debug 5
ReceiveHTTPFile("http://192.168.2.105/cgi-bin/IpodCGI.cgi?id=0&command=right", "c:\rclog.log") : Debug 6
;....

Oder versuch mal

Code: Alles auswählen

GetHTTPHeader(URL$)
Das sollte eigentlich schon ausreichen um ein Script auf einem Server auszuführen.