[39dll] Verbessertes IP-Skript

    • Skript

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • [39dll] Verbessertes IP-Skript

      Ich habe das beigelegte Script, welches im 39dll-Tutorial enthalten ist ein bisschen vereinfacht sowie leicht verbessert. Unter anderem wird das Spiel nicht angehalten, während die IP ermittelt wird.
      Das Script sieht folgendermaßen aus:

      GML-Quellcode

      1. // getip()
      2. var lineend,header,first,val,size;
      3. // Definiere das Zeichen für einen Zeilenumbruch
      4. lineend=chr(13)+chr(10);
      5. //Stelle eine Verbindung zum Server her, falls das noch nicht erfolgt ist.
      6. if !(variable_local_exists('_getip'))
      7. {
      8. _getip=tcpconnect("masterxy.bplaced.net",80,2);
      9. _send=0;
      10. }
      11. // Folgende 2 Abfragen überprüfen den Status der Verbindung. Befindet man sich noch im Verbindungsaufbau, wird '' zurückgegeben.
      12. if(!_getip)
      13. return "Error!";
      14. if !(tcpconnected(_getip))
      15. return '';
      16. // Sendet die Anfrage, falls noch nicht geschehen. Hier wird in den Textmodus geschaltet
      17. // und eine Abfrage mittels GET an eine Datei des Servers gestartet.
      18. if (_send=0)
      19. {
      20. setformat(_getip, 1, lineend);
      21. clearbuffer();
      22. writechars("GET /getip.php HTTP/1.0" +lineend);
      23. writechars("Host: masterxy.bplaced.net" +lineend);
      24. sendmessage(_getip);
      25. _send=1;
      26. }
      27. // Empfange den Header der Datei - in den meisten Fällen nicht gebraucht.
      28. // Erst nach Empfang des Headers wird der Rest der Datei empfangen, also im Prinzip, das was in ihr drinsteht.
      29. setformat(_getip,1,lineend);
      30. header = true;
      31. while(header)
      32. {
      33. receivemessage(_getip);
      34. first = readsep(" ");
      35. switch(first)
      36. {
      37. case "":
      38. header = false;
      39. break;
      40. }
      41. }
      42. setformat(_getip,2);
      43. val = "";
      44. // Hier wird der Inhalt empfangen
      45. while(1)
      46. {
      47. size=receivemessage(_getip,6000);
      48. if(size>0)
      49. val+=readchars(size);
      50. else break;
      51. }
      52. // Wird kein Inhalt mehr empfangen, kann die Verbindung geschlossen werden.
      53. if (val!='')
      54. closesocket(_getip);
      55. // Gibt die IP aus. Sollte der string eine IP unübliche Länge haben, wird Error ausgegeben.
      56. if (string_length(val)<=15)
      57. return val;
      58. else
      59. return 'Error!';
      Alles anzeigen


      Dieser Script verlangt natürlich ein ausführen im Step Event. Ganz einfach wäre das zb mit:

      GML-Quellcode

      1. // Create Event
      2. ip='Suche...'
      3. // Step Event
      4. if (ip='Suche...')
      5. {
      6. var tempip;
      7. tempip=getip();
      8. if (ip!='')
      9. ip=tempip;
      10. }
      Alles anzeigen


      So wird der Skript auch nur ausgeführt, solange die Anfrage dauert, oder bis ein Fehler auftritt.


      Zusatz:
      Spoiler anzeigen
      Im Skript stelle ich eine Verbindung zu meinem Server her. Um die IP zu ermitteln, indem ihr euren eigenen Server benutzt, braucht ihr eigentlich nur eine php-Datei, die die IP des Benutzers ausgibt:

      PHP-Quellcode

      1. <?php
      2. if (!isset($_SERVER['HTTP_X_FORWARDED_FOR']))
      3. $ip=$_SERVER['REMOTE_ADDR'];
      4. else
      5. $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
      6. echo($ip);
      7. ?>

      Wenn ihr diese Datei dann vom Skript aus ansprecht, solltet ihr die IP erhalten. Alternativ kann man aber auch zu whatismyip.org verbinden, die Seite macht genau das gleiche.
      Abschließender Hinweis: Auf diese Weise lassen sich natürlich alle Arten von Daten empfangen. Man könnte zb in der php-Datei noch Abfragen einbauen, welcher Wert ausgegeben werden soll.

      © 2008 by Teamgrill Productions

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von MasterXY ()