Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Warning: socket_set_option()

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Warning: socket_set_option()

    Guten Morgen zusammen,

    ich versuche momentan WoL auf Linux und Windoof zum laufen zu bringen. Die fsockopen Lösung aus dem Forum funktioniert auf dem Linux nicht (Permission denied). Die folgende Lösung funktioniert unter beiden Systemen, ich bekomme jedoch auf dem Windoof (php 5.5.3) immer die Meldung: "Warning: socket_set_option()".

    Code:
    PHP-Code:
    function wake_up ($mac_addr$broadcast) { 

        
    $addr_byte str_split($mac_addr,2); 
        
    $hw_addr ''

        for (
    $a=0$a 6$a++) $hw_addr .= chr(hexdec($addr_byte[$a])); 

        
    $msg chr(255).chr(255).chr(255).chr(255).chr(255).chr(255); 

        for (
    $a 1$a <= 16$a++) $msg .= $hw_addr

        
    // send it to the broadcast address using UDP 
        // SQL_BROADCAST option isn't help!! 
        
    $s socket_create(AF_INETSOCK_DGRAMSOL_UDP); 

        if (
    $s == false
        { 
            echo 
    "Error creating socket!\n"
            echo 
    "Error code is '".socket_last_error($s)."' - " socket_strerror(socket_last_error($s)); 
        } 
        else 
        { 
            
    // setting a broadcast option to socket: 
            
    $opt_ret socket_set_option($s16TRUE); //WARNING
            
    if($opt_ret
            { 
                
    nagios_return(2"setsockopt() failed, error: " strerror($opt_ret) . "\n"); 
            }
            
            
    $e socket_sendto($s$msgstrlen($msg), 0$broadcast2050); 
            
    socket_close($s); 
        } 

    Woran kann das liegen? Sollte man "socket_set_option" nicht verwenden, oder hat die Funktion eine gravierende Sicherheitslücke?

    Danke für eure Hilfe.

    Gruß
    Talker
    Alle Beiträge nach bestem Wissen und Gewissen.

    Lasse mich gerne von anderen verbessern.

  • #2
    Zitat von Talker Beitrag anzeigen
    Gich bekomme jedoch auf dem Windoof (php 5.5.3) immer die Meldung: "Warning: socket_set_option()".
    Und der Rest der Meldung?
    [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

    Kommentar


    • #3
      Zitat von tkausl Beitrag anzeigen
      Und der Rest der Meldung?
      Absoluter Dateipfad und Zeilennummer des Aufrufes. Mit //Warning im Code markiert.
      Alle Beiträge nach bestem Wissen und Gewissen.

      Lasse mich gerne von anderen verbessern.

      Kommentar


      • #4
        Keine Fehlermeldung? Sowas wie "socket_set_option() : Operation on a non-socket"
        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

        Kommentar


        • #5
          Genau, das ist es ja was mich verwirrt. Nur "Warning: socket_set_option(): in foo/bar.php on line 1337". Sonst nichts.
          Alle Beiträge nach bestem Wissen und Gewissen.

          Lasse mich gerne von anderen verbessern.

          Kommentar


          • #6
            PHP-Code:
            $opt_ret socket_set_option($s16TRUE); //WARNING 
            Welche Option soll die 6 darstellen?

            Das sind alle Optionen, die unter socket_get_option() aufgeführt sind
            PHP-Code:
            $x = array(
            SO_DEBUGSO_BROADCASTSO_REUSEADDRSO_KEEPALIVESO_LINGERSO_OOBINLINESO_SNDBUFSO_RCVBUFSO_ERROR,
            SO_TYPESO_DONTROUTESO_RCVLOWATSO_RCVTIMEOSO_SNDTIMEOSO_SNDLOWATTCP_NODELAYMCAST_JOIN_GROUP,
            MCAST_LEAVE_GROUPMCAST_BLOCK_SOURCEMCAST_UNBLOCK_SOURCEMCAST_JOIN_SOURCE_GROUPMCAST_LEAVE_SOURCE_GROUP,
            IP_MULTICAST_IFIPV6_MULTICAST_IFIP_MULTICAST_LOOPIPV6_MULTICAST_LOOPIP_MULTICAST_TTLIPV6_MULTICAST_HO
            );
            print_r($x); 
            Code:
            Array
            (
                [0] => 1
                [1] => 32
                [2] => 4
                [3] => 8
                [4] => 128
                [5] => 256
                [6] => 4097
                [7] => 4098
                [8] => 4103
                [9] => 4104
                [10] => 16
                [11] => 4100
                [12] => 4102
                [13] => 4101
                [14] => 4099
                [15] => 1
                [16] => 12
                [17] => 13
                [18] => 17
                [19] => 18
                [20] => 15
                [21] => 16
                [22] => 9
                [23] => 9
                [24] => 11
                [25] => 11
                [26] => 10
                [27] => IPV6_MULTICAST_HO
            )
            Keine 6... auch keine 2, um mit der 4 zusammen eine Bitmaske zu bilden.. also, welche Option soll die 6 darstellen?
            Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

            Kommentar


            • #7
              Auf dem Windoof stimme ich dir zu, keine 6, aber auf dem Linux steht die 6 für SO_BROADCAST, wie der Kommentar eine Zeile darüber auch beschreibt.

              PHP-Code:
               // setting a broadcast option to socket:  
                      
              $opt_ret socket_set_option($s16TRUE); //WARNING 
              PHP-Code:
              $x = array(
              SO_DEBUGSO_BROADCASTSO_REUSEADDRSO_KEEPALIVESO_LINGERSO_OOBINLINESO_SNDBUFSO_RCVBUFSO_ERROR,
              SO_TYPESO_DONTROUTESO_RCVLOWATSO_RCVTIMEOSO_SNDTIMEOSO_SNDLOWATTCP_NODELAYMCAST_JOIN_GROUP,
              MCAST_LEAVE_GROUPMCAST_BLOCK_SOURCEMCAST_UNBLOCK_SOURCEMCAST_JOIN_SOURCE_GROUPMCAST_LEAVE_SOURCE_GROUP,
              IP_MULTICAST_IFIPV6_MULTICAST_IFIP_MULTICAST_LOOPIPV6_MULTICAST_LOOPIP_MULTICAST_TTLIPV6_MULTICAST_HO
              );
              print_r($x); 
              Code:
              Array
              (
                  [0] => 1
                  [1] => 6
                  [2] => 2
                  [3] => 9
                  [4] => 13
                  [5] => 10
                  [6] => 7
                  [7] => 8
                  [8] => 4
                  [9] => 3
                  [10] => 5
                  [11] => 18
                  [12] => 20
                  [13] => 21
                  [14] => 19
                  [15] => 1
                  [16] => 42
                  [17] => 45
                  [18] => 43
                  [19] => 44
                  [20] => 46
                  [21] => 47
                  [22] => 32
                  [23] => 17
                  [24] => 34
                  [25] => 19
                  [26] => 33
                  [27] => IPV6_MULTICAST_HO
              )
              Wenn ich die 6 mit SO_BROADCAST ersetzte, bekomme ich immer noch die gleiche Warnmeldung
              Alle Beiträge nach bestem Wissen und Gewissen.

              Lasse mich gerne von anderen verbessern.

              Kommentar


              • #8
                Aus der Doku:
                PHP-Code:
                if (!socket_set_option($socketSOL_SOCKETSO_REUSEADDR1)) {
                    echo 
                'Unable to set option on socket: 'socket_strerror(socket_last_error()) . PHP_EOL;

                Wie wärs also mal, socket_strerror(socket_last_error()) auszugeben?
                [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

                Kommentar


                • #9
                  Zitat von tkausl Beitrag anzeigen
                  Wie wärs also mal, socket_strerror(socket_last_error()) auszugeben?
                  Ausgabe Windoof: "Ein ungültiges Argument wurde übergeben"
                  Ausgabe Linux: "Success"
                  Bevor ihr euch auf die 6 als Parameter stürzt, habe den Code bereits angepasst:
                  PHP-Code:
                  $opt_ret socket_set_option($s1SO_BROADCASTTRUE); 
                  Alle Beiträge nach bestem Wissen und Gewissen.

                  Lasse mich gerne von anderen verbessern.

                  Kommentar


                  • #10
                    Die 1 ist immernoch Fix.
                    [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

                    Kommentar


                    • #11
                      Ja, entspricht aber unter beiden systemen icmp. Aber um der Lesbarkeit willens:
                      PHP-Code:
                      $opt_ret socket_set_option($sgetprotobyname("icmp"), SO_BROADCASTTRUE); 
                      Warnung bleibt die selbe.

                      So ganz dumme Frage, php unterstützt Umwandlung bool nach int oder?
                      Das int nach bool geht weiß ich.
                      Alle Beiträge nach bestem Wissen und Gewissen.

                      Lasse mich gerne von anderen verbessern.

                      Kommentar


                      • #12
                        du schenkst und ja nur eine zeile code, aber must du bei broadcast nciht auch ne broadcast ip angeben?

                        Kommentar


                        • #13
                          Sonst hat sich der Code aus dem ersten Posting nicht verändert, aber da neue Seite und zusammenfassung und so:

                          Folgende Funktion gibt mir unter Windoof "Warning: socket_set_option(): in /foo/bar.php at line 1337"
                          Unter Linux kommt kein Warning.

                          PHP-Code:
                          function wake_up ($mac_addr$broadcast) { 

                              
                          $addr_byte str_split($mac_addr,2); 
                              
                          $hw_addr ''

                              for (
                          $a=0$a 6$a++) $hw_addr .= chr(hexdec($addr_byte[$a])); 

                              
                          $msg chr(255).chr(255).chr(255).chr(255).chr(255).chr(255); 

                              for (
                          $a 1$a <= 16$a++) $msg .= $hw_addr

                              
                          // send it to the broadcast address using UDP 
                              // SQL_BROADCAST option isn't help!! 
                              
                          $s socket_create(AF_INETSOCK_DGRAMSOL_UDP); 

                              if (
                          $s == false
                              { 
                                  echo 
                          "Error creating socket!\n"
                                  echo 
                          "Error code is '".socket_last_error($s)."' - " socket_strerror(socket_last_error($s)); 
                              } 
                              else 
                              { 
                                  
                          // setting a broadcast option to socket: 
                                  
                          $opt_ret socket_set_option($sgetprotobyname("icmp"), SO_BROADCASTTRUE); //Zeile mit dem WARNING
                                  
                          if($opt_ret
                                  { 
                                      
                          nagios_return(2"setsockopt() failed, error: " strerror($opt_ret) . "\n"); 
                                  }
                                  
                                  
                          $e socket_sendto($s$msgstrlen($msg), 0$broadcast2050); 
                                  
                          socket_close($s); 
                              } 

                          PHP-Code:
                          echo socket_strerror(socket_last_error()) . PHP_EOL
                          hat als Ausgabe unter Windoof "Ein ungültiges Argument wurde übergeben". Unter Linux "Success".

                          MAC und Broadcast Adresse sind gültige Angaben.
                          Alle Beiträge nach bestem Wissen und Gewissen.

                          Lasse mich gerne von anderen verbessern.

                          Kommentar


                          • #14
                            das script also funktioniert uinter linux ohne fehler und macht unter win ein warning?

                            http://www.hackernotcracker.com/2006...hp-script.html

                            Kommentar


                            • #15
                              Zitat von moma Beitrag anzeigen
                              das script also funktioniert uinter linux ohne fehler und macht unter win ein warning?
                              Exakt. Die URL kenne ich und wenn du die scripte vergleichst findest du eine sehr große Übereinstimmung.
                              Was aber an dem Warning nix ändert.
                              Alle Beiträge nach bestem Wissen und Gewissen.

                              Lasse mich gerne von anderen verbessern.

                              Kommentar

                              Lädt...
                              X