MSN-bot in PHP

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Eric Cartman

Eric Cartman

08/03/2006 18:33:00
Quote Anchor link
Hallo allemaal,
Een tijdje geleden dacht ik erover een MSN bot te maken. Nou, daar ben ik vandaag aan begonnen, alleen snap ik niet helemaal precies welke commando's je nou naar de server moet sturen en hoe je moet inloggen. Ik hoopte dat jullie mij konden helpen...
Hier is overigens de 'code' waarmee ik contact mee maak (probeer te maken).

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
    // Maak contact met de server:
    fsockopen($this->_msnserver, $this->_msnpoort, $errno=0, $errstr='', 60);
?>
 
PHP hulp

PHP hulp

25/04/2024 12:24:24
 

08/03/2006 18:34:00
Quote Anchor link
Volg de link van je code (klik dus op fsockopen) en je ziet een voorbeeld
 
Eric Cartman

Eric Cartman

08/03/2006 18:41:00
Quote Anchor link
Ja, maar dat is niet wat ik zoek... Ik moet bepaalde commando's versturen, die ik inmiddels half weet, maar ik weet alleen niet met welke functie...
 

08/03/2006 18:42:00
Quote Anchor link
Zo aan je stukje code te zien maak je gebruik van een bepaalde class. Staat hier niet wat bij?

In het voorbeeld op php.net werken ze met fwrite()
 

08/03/2006 18:46:00
 
Eric Cartman

Eric Cartman

08/03/2006 18:48:00
Quote Anchor link
Ja, een zelfgemaakt class, alleen hij is wel erg, ehm, abstract =p

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php

class msn_bot {
  var
$_msnserver = 'messenger.hotmail.com';
  var
$_msnpoort  = 1863;
  
  function
msn_bot() {
  
    $this->msn_connect();
  }
  
  
  
  function
msn_connect($username, $password) {
  
    // Maak contact met de server:
    fsockopen($this->_msnserver, $this->_msnpoort, $errno=0, $errstr='', 60);  
  
  }
  
  
  
  function
msn_login() {
  
    // Verstuur autentificatie
  
  }
  
  
  
  function
send_command($commando) {
  
    
  
  }
}

?>
 
Jelmer -

Jelmer -

08/03/2006 19:00:00
Quote Anchor link
Commandoos achterhalen kan mooi met Ethereal. Echt een heerlijk programma. Even doorhebben hoe het werkt, maar je hebt wel precies door wat er allemaal gebeurt en hoe het wordt verzonden.

fsockopen() geeft een resource handle terug, die weer kan worden gebruikt door fgets(), fwrite(), fputs(), fclose() enzovoord. Daarmee kan je dus de berichten naar de server sturen. Met fgets() kan je je antwoorden binnenhalen. met feof() kan je het einde aan zien komen, ik weet niet of dat hier van toepassing is. Ik denk het niet.

Maar weet waar je aan begint. MSN(v8?) is niet bepaald een goed gedocumenteerd protocol. Ik zal even kijken of ik er nog een goede bron voor kan vinden.

edit: Gaim(.sf.net) wordt veel gebruikt in programma's om verbinding te maken via MSN. Enige probleem is dat Gaim niet al te best gedocumenteerd is, iig hun protocolbeschrijvingen niet. Misschien dat je nog wat uit hun broncode kan pluizen. deze website verwezen zij naar.
Gewijzigd op 08/03/2006 19:08:00 door Jelmer -
 
Eric Cartman

Eric Cartman

08/03/2006 19:07:00
Quote Anchor link
Ethereal was ik toevallig al aan het downloaden =p Maar bedankt Jelmer, ik denk dat ik nu wel verder kan!

@Webmakerij: Ik heb even snel gekeken, maar de class die ik bekeken heb, heeft een Chinese documentatie :s
 
Winston Smith

Winston Smith

08/03/2006 19:08:00
Quote Anchor link
Zoek op MSNP8 (weet niet of dat het meest recente is, wellicht MSNP9?) en dan komt het protocol naar boven met commando's.
 

08/03/2006 19:11:00
Quote Anchor link
http://msnpiki.msnfanatic.com/index.php/Main_Page
@Kasper
Zo te zien zijn ze bezig met versie 13
 
Winston Smith

Winston Smith

08/03/2006 19:15:00
Quote Anchor link
Ik kon me inderdaad herinneren dat ze een tijdje terug al bij MSNP12 waren, maar dat was voor mobiele telefoons of iets dergelijks. In ieder geval een ander protocol dan de anderen.
 
Eric Cartman

Eric Cartman

08/03/2006 19:53:00
Quote Anchor link
Hoe kan ik die commands vanaf de MSN-server uitlezen; wat voor parameter(s) moet ik meegeven?
 
Winston Smith

Winston Smith

08/03/2006 20:19:00
Quote Anchor link
Als je goed zoekt (en wellicht staat het ook op die hypothetic site), zie je hier en daar wel voorbeelden over hoe je verbinding moet maken en jezelf moet authoriseren. Maar bereid je maar vast voor: het is veel, heel veel lezen. Ik zelf heb ook nog wel eens een poging gewaagd, maar heb er maar vanaf gezien omdat het zoveel was en het risico hebt dat het bij het volgende protocol weer geheel veranderd is (en die protocollen komen vrij snel uit).

En daarnaast is het niet makkelijk om zo'n bot te maken; ik raad je aan eerst meer met sockets te doen, voordat je aan de slag gaat met MSNPxx.
Begin bijvoorbeeld met een IRC botje, die zijn relatief simpel in vergelijking met een MSN bot.
 
Eric Cartman

Eric Cartman

08/03/2006 20:44:00
Quote Anchor link
Misschien gaat het allemaal wel wat te snel, ik begin eerst wel met een IRC-bot... Alleen, waar kan je een IRC-kanaal openen, zodat ik mijn bot kan testen?
 
Pieter van Linschoten

Pieter van Linschoten

09/03/2006 00:45:00
Quote Anchor link
download eerst mIRC of een dergelijk programma, ga naar een host server en typ /j #jouwkanaal...

tada...
 
Eric Cartman

Eric Cartman

09/03/2006 11:26:00
Quote Anchor link
Kan dat ook gewoon via Chatzilla (firefox extensie?)
 
Eric Cartman

Eric Cartman

09/03/2006 20:04:00
Quote Anchor link
Ik heb een beginnetje gemaakt van een IRC-bot, ik heb alleen een probleempje, hij blijft maar laden...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<?php

class irc {

  var
$_botnaam = 'Jip-bot';
  var
$_host    = 'http://www.babaluji.nl/';
  var
$_irchost = 'irc://irc.chat4all.com';
  var
$_poort   = '80';
  var
$_kanaal  = '#jipchannel';
  var
$_verbinding;
  var
$_data;
  
  
  function
irc() {
  
    // Contact maken met IRC-server:
    $this->connect();
    $this->ping();
  
  }
  
  
  
  function
connect() {
  
    // Verbinding met IRC-server openen:
    if ($this->_verbinding = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) == false)
      die('De verbinding (socket) kon niet gemaakt worden');
    
    // De IRC-verbinding een naam geven:
    if (socket_bind($this->_verbinding, $this->_host) == false)
      die('De verbinding (socket) kon niet gekoppeld worden aan' .$this->_host);
      
    // Uiteindelijke verbinding maken:
    if (socket_connect($this->_verbinding, $this->_irchost, $this->_poort) == false)
      die('Het is niet mogelijk om een verbinding (socket) met ' .$this->_irchost. ' te maken');
  
  }
  
  
  
  function
write($data) {
  
    // Data wegschrijven:
    socket_write($this->_verbinding, $data);
  
  }
  
  
  
  
  function
ping() {
  
    $kanaal = 0;    // 0 = geen kanaal
                   // 1 = wel kanaal

  
    while ($data = socket_read($this->_verbinding, 65000, PHP_NORMAL_READ)) {
    
      // Zoek regeleinde: (?)
      if ($data == "\n")
        continue;

      // Binnengekregen data opsplitsen:  
      $_this->data = explode(' ', $data);
      
      
      // Whitespaces aan begin en einde verwijderen:
      for ($i = 0; isset($edata[$i]); $i++)
        $edata[$i] = trim($edata[$i]);
        
      // Controleren of bot al in een channel zit:
      if ($kanaal == 0) {
      
        $this->write('/join ' .$this->_kanaal);
        $channel = 1;
      }

      
      // Controleren of er een ping is ontvangen:
      if ($edata[0] == 'PING')
        $this->_write('PONG ' .$edata[1]);
          
    }
  
  }

}


?>
Gewijzigd op 09/03/2006 20:06:00 door Eric Cartman
 
PurpleMadness -

PurpleMadness -

09/03/2006 20:18:00
Quote Anchor link
Hij hoort ook te blijven laden..
Dan isie al bezig ;)
Je ziet niks in die PHP pagina, maar wel in IRC ;)
 
Winston Smith

Winston Smith

09/03/2006 20:32:00
Quote Anchor link
Ik denk dat je de verkeerde instellingen gebruikt: je moet de IRC-poort invullen (meestal 6666~6669), je host is je eigen ip-adres.

Daarnaast moet je continu controleren of de server jou PING't, zodat jij kan antwoorden met PONG. Ik denk dat je dat nu maar één keer doet, waardoor je de verbinding zal verliezen.

En ik krijg een foutmelding van socket_bind, maar ik kan zo gauw niet zien waar de fout zit.
 
Eric Cartman

Eric Cartman

09/03/2006 20:44:00
Quote Anchor link
Mmm, ik krijg geen foutmelding voor socket_bind...
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.