Problem mit SendNetworkString(...)

Für allgemeine Fragen zur Programmierung mit PureBasic.
Graffiti
Beiträge: 173
Registriert: 30.08.2004 08:34
Wohnort: Thailand

Problem mit SendNetworkString(...)

Beitrag 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
Benutzeravatar
alen
Beiträge: 107
Registriert: 09.04.2007 17:38
Computerausstattung: Main Hardware: AMD Ryzen 5 1600 - 6 Core / Gigabyte B450 Aorus Pro / Sapphire RX580 8GB
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64 on various Hardware Platforms
Wohnort: Duisburg
Kontaktdaten:

Re: Problem mit SendNetworkString(...)

Beitrag 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
---
Main Hardware: AMD Ryzen 5 1600 - 6 Core / Asus B350M-A / Nvidia GTX650
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64
on various Hardware Platforms (Notebook and Desktop)
Graffiti
Beiträge: 173
Registriert: 30.08.2004 08:34
Wohnort: Thailand

Re: Problem mit SendNetworkString(...)

Beitrag 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
Benutzeravatar
alen
Beiträge: 107
Registriert: 09.04.2007 17:38
Computerausstattung: Main Hardware: AMD Ryzen 5 1600 - 6 Core / Gigabyte B450 Aorus Pro / Sapphire RX580 8GB
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64 on various Hardware Platforms
Wohnort: Duisburg
Kontaktdaten:

Re: Problem mit SendNetworkString(...)

Beitrag 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
---
Main Hardware: AMD Ryzen 5 1600 - 6 Core / Asus B350M-A / Nvidia GTX650
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64
on various Hardware Platforms (Notebook and Desktop)
Graffiti
Beiträge: 173
Registriert: 30.08.2004 08:34
Wohnort: Thailand

Re: Problem mit SendNetworkString(...)

Beitrag 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
Benutzeravatar
alen
Beiträge: 107
Registriert: 09.04.2007 17:38
Computerausstattung: Main Hardware: AMD Ryzen 5 1600 - 6 Core / Gigabyte B450 Aorus Pro / Sapphire RX580 8GB
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64 on various Hardware Platforms
Wohnort: Duisburg
Kontaktdaten:

Neuer Versuch

Beitrag 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
---
Main Hardware: AMD Ryzen 5 1600 - 6 Core / Asus B350M-A / Nvidia GTX650
PB 5.61 and earlier @ Manjaro Linux XFCE x64/ Fedora Linux Cinnamon x64 / Windows 10 x64
on various Hardware Platforms (Notebook and Desktop)
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: Problem mit SendNetworkString(...)

Beitrag 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")
Signatur und so
Graffiti
Beiträge: 173
Registriert: 30.08.2004 08:34
Wohnort: Thailand

Re: Problem mit SendNetworkString(...)

Beitrag 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
Graffiti
Beiträge: 173
Registriert: 30.08.2004 08:34
Wohnort: Thailand

Re: Problem mit SendNetworkString(...)

Beitrag 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
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: Problem mit SendNetworkString(...)

Beitrag 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.
Signatur und so
Antworten