MSN-bot in PHP
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).
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)
1
2
3
4
2
3
4
<?php
// Maak contact met de server:
fsockopen($this->_msnserver, $this->_msnpoort, $errno=0, $errstr='', 60);
?>
// Maak contact met de server:
fsockopen($this->_msnserver, $this->_msnpoort, $errno=0, $errstr='', 60);
?>
Volg de link van je code (klik dus op fsockopen) en je ziet een voorbeeld
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...
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()
In het voorbeeld op php.net werken ze met fwrite()
Ja, een zelfgemaakt class, alleen hij is wel erg, ehm, abstract =p
Code (php)
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
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) {
}
}
?>
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) {
}
}
?>
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.
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 -
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
@Webmakerij: Ik heb even snel gekeken, maar de class die ik bekeken heb, heeft een Chinese documentatie :s
Zoek op MSNP8 (weet niet of dat het meest recente is, wellicht MSNP9?) en dan komt het protocol naar boven met commando's.
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.
Hoe kan ik die commands vanaf de MSN-server uitlezen; wat voor parameter(s) moet ik meegeven?
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.
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.
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?
download eerst mIRC of een dergelijk programma, ga naar een host server en typ /j #jouwkanaal...
tada...
tada...
Kan dat ook gewoon via Chatzilla (firefox extensie?)
Ik heb een beginnetje gemaakt van een IRC-bot, ik heb alleen een probleempje, hij blijft maar laden...
Code (php)
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
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]);
}
}
}
?>
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
Hij hoort ook te blijven laden..
Dan isie al bezig ;)
Je ziet niks in die PHP pagina, maar wel in IRC ;)
Dan isie al bezig ;)
Je ziet niks in die PHP pagina, maar wel in IRC ;)
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.
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.
Mmm, ik krijg geen foutmelding voor socket_bind...




