[PHP / Sockets] IRC bot laten connecten via bouncer (proxy)

Pagina: 1
Acties:
  • 48 views sinds 30-01-2008

Acties:
  • 0 Henk 'm!

  • m33p
  • Registratie: September 2002
  • Laatst online: 05-09 15:26
Ik probeer een connectie te krijgen met psyBNC via de socket maar dit wil niet echt vlotten. Dit is de code die ik gebruik:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$this->con['socket']    = fsockopen($host[0], $host[1]);
        
        if (!$this->con['socket'])
            print(date("[d/m @ H:i]") . " -- ERROR: Could not connect to: " . $host[0] . " on port " . $host[1] . "\n\r");
        else
        {
            $this->Sync('users');
            $this->Sync('prefs');
            
            print date("[d/m @ H:i]") . " -> PASS pass\n";
            fputs($this->con['socket'], "PASS pass\n\r");
            print date("[d/m @ H:i]") . " -> NICK nick-die-niet-in-gebruik-is\n";
            fputs($this->con['socket'], "NICK nick-die-niet-in-gebruik-is\n\r");
            print date("[d/m @ H:i]") . " -> USER services mijnip bncip :hoi\n";
            fputs($this->con['socket'], "USER services mijnip bncip :hoi\n\r");


Ik heb de overige zooi (sync e.d.) al gecomment dus daar ligt het niet aan. Als ik dit via telnet doet gaat het perfect (ook vanaf de machine waar vanaf ik het draai). Doe ik het via het script, krijg ik de volgende output:

code:
1
2
3
4
[30/05 @ 14:29] <- :Welcome!psyBNC@lam3rz.de NOTICE * :psyBNC2.3.2-5
[30/05 @ 14:29] -> PASS pass
[30/05 @ 14:29] -> NICK nickname
[30/05 @ 14:29] -> USER username mijnip bncip :blabla


-> is voor uitgaande socket info, <- ingaand. Via telnet krijg ik dan de message of the day etc etc te zien, daar werkt het. In php daarintegen gebeurd er helemaal niks. Ik krijg een timeout (de bouncer disiconnect mij omdat ik idle ben) en dat is het... ik ben al een half uur flink aan het googlen geweest , maar veel nuttige results zijn er niet.

Volgens RFC1459 (IRC Protcol) moet ik eerst PASS sturen, en daarna USER en NICK.

Het relevante stukje uit de RFC:
code:
1
2
3
4
5
6
7
   The PASS command is used to set a 'connection password'.  The
   password can and must be set before any attempt to register the
   connection is made.  Currently this requires that clients send a PASS
   command before sending the NICK/USER combination and servers *must*
   send a PASS command before any SERVER command.  The password supplied
   must match the one contained in the C/N lines (for servers) or I
   lines (for clients).


Dit volg ik ook, dus dat zou het ook niet moeten zijn (het werkt ook gewoon in telnet).


Iemand hier toevallig ervaring mee? Want ik kom er eventjes niet meer uit :)

Alvast bedankt!

[ Voor 13% gewijzigd door m33p op 30-05-2005 11:51 ]


Acties:
  • 0 Henk 'm!

  • Cypher87
  • Registratie: Oktober 2004
  • Laatst online: 18-09 16:14
via php heb ik het nooit geprobeert, maar ik weet dat je eerst een PING krijgt (als het goed is weet niet of het via bnc ook zo werkt) en dat je PONG moet terug sturen. Misschien is dat het probleem?

Acties:
  • 0 Henk 'm!

  • Shadowman
  • Registratie: Januari 2002
  • Niet online
\n\r moet niet \r\n zijn?

Acties:
  • 0 Henk 'm!

  • Radiant
  • Registratie: Juli 2003
  • Niet online

Radiant

Certified MS Bob Administrator

Probeer eens

code:
1
PASS :wachtwoord


(alleen \n is genoeg als linebreak trouwens)

[ Voor 35% gewijzigd door Radiant op 30-05-2005 11:57 ]


Acties:
  • 0 Henk 'm!

  • m33p
  • Registratie: September 2002
  • Laatst online: 05-09 15:26
Shit, heb ik dan een uur van mn tijd mee verneukt door gewoon \r\n te vervangen door \n :( dank u het is opgelost :)

Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Het zou niet moeten uitmaken of je eerst naar de volgende regel springt, en dan naar het begin van de regel, of eerst naar het begin van de regel, en dan een regel naar onder (denk in typmachine stijl).

Acties:
  • 0 Henk 'm!

  • blaataaps
  • Registratie: Juli 2001
  • Niet online
frickY schreef op maandag 30 mei 2005 @ 15:15:
[...]

Het zou niet moeten uitmaken of je eerst naar de volgende regel springt, en dan naar het begin van de regel, of eerst naar het begin van de regel, en dan een regel naar onder (denk in typmachine stijl).
Als je een typmachine hebt niet, maar laten veel protocollen nou niet proberen een typmachine te emuleren maar te werken volgens hun eigen conventies. En een van die conventies van het irc-procol is dat een \n het einde van de regel aangeeft (zoals in de unix-wereld gebruikelijk is, onder msdos/windows zet men er wel eens een \r voor).

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:47

Creepy

Tactical Espionage Splatterer

Hmmja ;) Een \r\n of een \n.. dat is ook echt wel te vinden als je een beetje gaat zoeken naar voorbeelden voor het maken van een connectie naar een irc server etc. ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1

Dit topic is gesloten.