Zeitüberschreitung der Verbindung beim Verbinden mit einem IRC-Server mit PHP

8

Ich versuche, mein PHP-Skript mit dem IRC zu verbinden, aber es hält das Timing aus. Ich bin auf der Server, also weiß ich, dass es läuft und läuft, ich kann nicht sagen, was das Problem ist.

Könnte es ein Fehler in meinem Code sein?

%Vor%

UPDATE: Anscheinend funktioniert es auf einigen Servern, aber nicht auf anderen. fsockopen ist erlaubt, wie auch set_time_limit. Ich kann nicht herausfinden, was das Problem ist.

UPDATE: Hier ist eine Trace-Route:

%Vor%

Und die Ausgrabung:

%Vor%

NETCAT:

nc: connect to hub.malvager.com port 6667 (tcp) failed: Connection timed out

    
Rob 16.09.2010, 14:01
quelle

12 Antworten

2

Sie haben einige Fehler.

Ist fehlerhaft, weil das Ergebnis zuerst explodiert wird, explodiert man durch Leerzeichen und im IRC-Implementierungsprotokoll müssen alle Befehle mit einem Newline-Zeichen beendet werden und der Server sendet dir "PING\n" nicht "PING" dann ist Ihr $exData -Array in diesem Zustand.

%Vor%

Dann ist Ihr $exData[0] == "PING" falsch , weil "PING" nicht gleich "PING\n" ist. Gute Lösung ist nicht add "\n" am Ende des Befehls im Parser, weil "\n" nicht nur Newline-Marker ist (für schlechte IRC-Protokoll-Implementierung empfehle ich das, man weiß nie, was Newline-Marker IRC-Protokoll-Entwickler verwenden kann, denke über Delphi INDY Buggy IRC Server Kontrolle ), bessere Lösung überprüft sie nicht.

%Vor%

Ich werde die while($data = fgets($ircSocket, 128)) in die while ($data = fgets($ircSocket)) ändern, weil bei langen Servernamen einfach 128 Bytes überlaufen können.

Und Ihre fwrite($ircSocket, "JOIN " . $ircChannel . "\n"); -Zeile tut nicht genau das, was Sie wollen, weil Ihr JOIN -Befehl nach dem USER und NICK -Befehl gesendet wurde. Dann parse Server Ihre Anfrage, bevor der Benutzer registriert wurde und wenn der Benutzer nicht registriert Sie können JOIN zu Kanal, IRC-Server nicht QUEUE fehlgeschlagenen Befehl, weil dies keinen Sinn haben. Die beste Vorgehensweise ist der Befehl send JOIN , nachdem der Befehl MOTD vom Server empfangen wurde und nachdem der Befehl left from channel empfangen wurde, wenn Sie einige Funktionen wie AUTOJOIN implementieren möchten.

%Vor%

Über Ihr Skript-Design, wenn Sie einfache Bot schreiben, dann habe ich nichts zu sagen in diesem Thema, aber wenn Sie planen, ein großes Stück Code zu schreiben, sollten Sie Ihr Skript auf andere Weise entwerfen. Sie müssen einige Schichten wie die Implementierung des IRC-Protokolls und Ihre IRC-Bot-Aktionen trennen. Sie sollten eine Klasse verwenden, um die Verantwortung des IRC-Protokolls in sie zu übertragen, denn in einem größeren Code ist die IRC-Protokollsteuerung mit Ihrem Bot-Aktionscode eine nette technische Schuld .

    
Svisstack 21.09.2010 11:59
quelle
1
  1. Installiere netcat
  2. Auf demselben Gerät ausgeführt nc hub.malvager.com 6667
  3. Ergebnisse analysieren.

Wenn Ihr Ergebnis lautet:

%Vor%
  1. Installieren frisch PHP Version von Source-Dateien (das ist wichtig, weil in Binärversionen von apt oder etwas Versionen veraltet ist) von php.net
  2. Dann können Sie Standard PHP.ini Datei abzustimmen ändern fsockopen Einstellungen, wenn das Problem noch nicht gelöst hat (ich glaube, mit Standard- .ini Datei Ihr Skript gut funktionieren).

Wenn Ihr Ergebnis einen Verbindungsfehler darstellt, denken einige wie dieses Beispiel:

%Vor%
  1. Sie tracert hub.malvager.com und post-Ergebnisse in Frage, dann muss ich diese Zeilen lesen und meine Antwort aktualisieren.

  2. Wenn Sie arbeiten auf POSIX zu tun dig hub.malvager.com und post-Ergebnisse in Frage, dann muss ich diese Zeilen lesen und meine Antwort aktualisieren.

  3. Wenn Sie arbeiten auf WINDOWS zu tun nslookup hub.malvager.com und post-Ergebnisse in Frage, dann muss ich diese Zeilen lesen und meine Antwort aktualisieren.

  4. Wenn Sie dieses Ergebnis allein wollen analysieren, praktisch von Ihrem Punkt ist meine Ergebnisse dieses Befehls dann diese i schreiben.

Ergebnis von dig hub.malvager.com :

%Vor%

Ergebnis von tracert hub.malvager.com auf POSIX :

%Vor%     
Svisstack 22.09.2010 16:15
quelle
0

Der Server benötigt möglicherweise eine Ident-Antwort. Außerdem habe ich dieses Skript ausgeführt, es hat gut funktioniert. Vielleicht ist es ein Firewall-Problem.

    
Petah 16.09.2010 15:33
quelle
0

Das Ende der Nachricht im IRC-Protokoll gemäß rfc1459 ist nicht nur "\ n". Einige Serverimplementierungen können Ihre Nachrichten deshalb ablehnen.

    
LarsV 27.09.2010 20:50
quelle
0

Haben Sie versucht, mit Telnet das Verhalten Ihres Bot zu simulieren und zu sehen, was passiert? Verbinden, tippen (oder kopieren-einfügen) Sie genau, was Ihr Bot ausgeben würde und schauen Sie für einige Minuten auf den Bildschirm.

    
Tom 29.09.2010 13:02
quelle
0

dies

code hat einen perfekt funktionierenden IRC Server. Ich würde diesen Weg gehen.

PS: Wenn du es nicht magst, sei nett und verschwende es nicht. Danke

    
Herr 14.10.2010 17:34
quelle
-1

Klingt so, als ob Sie blockiert werden, weil Sie IDENT nicht eingerichtet haben.

Listen auf Port 113, um zu sehen, ob es eine Ident-Anfrage vom IRC-Server gibt.

Auch ist eine gute Lektüre dafür, wie Mirc Identitätsanfragen behandelt , damit Sie leicht peitschen können etwas, um es funktionieren zu lassen.

    
Geekster 22.09.2010 03:15
quelle
-1

1) Wenn der Server einen Ping mit einer Nachricht sendet, sollten Sie mit einem Pong antworten, gefolgt von derselben Nachricht.
2) Senden Sie von Zeit zu Zeit (alle 30 Sekunden oder so) eine Ping-Nachricht an den Server. Wenn Sie in ein paar Minuten keine Antwort erhalten, können Sie wahrscheinlich in Betracht ziehen, dass der Client eine Zeitüberschreitung vom Server hat und sich erneut verbinden sollte.

    
Tom 27.09.2010 20:38
quelle
-1

Telnet gibt an, dass es für malvager.com, Port 6667

geschrieben werden sollte %Vor%     
NiDeep 26.09.2010 08:54
quelle
-1

Laufen Sie diesen Bot von Ihrem lokalen Rechner oder Ihrem Webserver? Wenn es von Ihrem Webserver stammt, könnte es sein, dass Ihr Webserver auf malvager.com blockiert ist, während auf anderen irc-Servern die Blockierung aufgehoben wurde.

Ich hatte dieses Problem in anderen IRC-Netzwerken und es stellte sich heraus, dass andere Leute den gleichen Hosting-Provider verwendeten, den ich zum Hosten von Botnets verwendete, bei dem der IRC-Server die IP von meinem Host blockieren musste.

Ich würde einen Administrator von malvager.com fragen, ob die IP-Adresse, von der aus Sie eine Verbindung herstellen, blockiert ist.

Versuchen Sie auch $ircSocket = fsockopen($ircServer, $ircPort, $eN, $eS, 30);

BEARBEITEN:

Ich benutze bluehost und es sieht so aus als würdest du es auch tun. Ich hatte Probleme mit meinem IRC auf ihren Servern arbeiten und ich sprach mit ihnen im Live Chat. Sie erwähnten, dass sie keine IRC-Bots in ihrem Netzwerk zulassen, daher haben sie die meisten Netzwerke blockiert. Sie erwähnten jedoch, wenn man vorbeirutscht und sie es fangen, werden sie Ihr Konto sperren.

    
Bot 27.09.2010 16:55
quelle
-1

Ich erinnere mich, dass ich in der MIRC-Ära einige Bots gemacht habe. Das Problem waren immer die Zeilenumbrüche, die ich gewohnt war nach der Nachricht senden.

Soweit ich mich erinnere, waren die Zeichen # 30 und # 32 oder so. Warum nicht versuchen, sie anstelle von \ n. Manche Server sind hübsch empfindlich auf diese Probleme.

Auch die Pong muss mit dem Text nach der Antwort beantwortet werden Ping, das ist sehr wichtig.

Viel Spaß!

    
Herr 03.10.2010 12:38
quelle
-1

bluehost.com hosting blocking IRC Verbindungen zu diesem IRC Server , dies sind geprüfte Informationen.

    
Svisstack 03.10.2010 19:23
quelle

Tags und Links