PDA

Bekijk Volledige Versie : Perl Net::Telnet vraag..



Bodhi
18/09/06, 03:40
Hallo,

Ik probeer een SMTP sessie via Telnet te doen in een Perl script en ik
loop tegen het volgende probleem aan. Als ik een SMTP connect maak,
komt het voor dat de remote server niet e1n regel 'connect message'
stuurt, maar meerdere (dump heb ik bijgevoegd). Ik laat de response
van de server zien met e1n regel:
$line = $server->getline;
Nu heb ik om dit op te lossen al:
$match = $server->prompt;
$line = $server->waitfor($match);
gedaan, maar dat werkt niet. M'n vraag is: Hoe maak ik een loop die de
laatste regel herkent, zodat ik met de sessie verder kan èn ik alle
response kan printen. Of.. moet ik na de laatste regel opnieuw een
$server->getline doen en dan maar op een time-out wachten?

Alvast bedankt voor 't meedenken :-)

--8<--
> < 0x00000: 32 32 30 2d 61 6c 70 68 61 2e 6d 61 69 6e 2d 68 220-alpha.main-h
> < 0x00010: 6f 73 74 69 6e 67 2e 63 6f 6d 20 45 53 4d 54 50 osting.com ESMTP
> < 0x00020: 20 45 78 69 6d 20 34 2e 35 32 20 23 31 20 53 75 Exim 4.52 #1 Su
> < 0x00030: 6e 2c 20 31 37 20 53 65 70 20 32 30 30 36 20 32 n. 17 Sep 2006 2
> < 0x00040: 30 3a 35 39 3a 34 34 20 2d 30 34 30 30 20 0d 0a 0:59:44 -0400 ..
> < 0x00050: 32 32 30 2d 57 65 20 64 6f 20 6e 6f 74 20 61 75 220-We do not au
> < 0x00060: 74 68 6f 72 69 7a 65 20 74 68 65 20 75 73 65 20 thorize the use
> < 0x00070: 6f 66 20 74 68 69 73 20 73 79 73 74 65 6d 20 74 of this system t
> < 0x00080: 6f 20 74 72 61 6e 73 70 6f 72 74 20 75 6e 73 6f o transport unso
> < 0x00090: 6c 69 63 69 74 65 64 2c 20 0d 0a 32 32 30 20 61 licited. ..220 a
> < 0x000a0: 6e 64 2f 6f 72 20 62 75 6c 6b 20 65 2d 6d 61 69 nd/or bulk e-mai
> < 0x000b0: 6c 2e 0d 0a l...

> > 0x00000: 48 45 4c 4f 20 62 69 6f 68 61 7a 61 72 64 2e 78 HELO biohazard.x
> > 0x00010: 73 34 61 6c 6c 2e 6e 6c 0d 0a s4all.nl..

> < 0x00000: 32 35 30 20 61 6c 70 68 61 2e 6d 61 69 6e 2d 68 250 alpha.main-h
> < 0x00010: 6f 73 74 69 6e 67 2e 63 6f 6d 20 48 65 6c 6c 6f osting.com Hello
> < 0x00020: 20 62 69 6f 68 61 7a 61 72 64 2e 78 73 34 61 6c biohazard.xs4al
> < 0x00030: 6c 2e 6e 6c 20 5b 36 32 2e 32 31 36 2e 31 30 2e l.nl [62.216.10.
> < 0x00040: 33 38 5d 0d 0a 38]..

> > 0x00000: 51 55 49 54 0d 0a QUIT..

> < 0x00000: 32 32 31 20 61 6c 70 68 61 2e 6d 61 69 6e 2d 68 221 alpha.main-h
> < 0x00010: 6f 73 74 69 6e 67 2e 63 6f 6d 20 63 6c 6f 73 69 osting.com closi
> < 0x00020: 6e 67 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a ng connection..
--8<--

--
Constant change is here to stay.

Operator
18/09/06, 12:20
In article <3vrrg29r3gq15bgmnk7nrabh51vq414dqh@4ax.com>,
Bodhi <bodhi@usenet4all.invalid> writes:
> Hallo,
>
> Ik probeer een SMTP sessie via Telnet te doen in een Perl script en ik
> loop tegen het volgende probleem aan. Als ik een SMTP connect maak,
> komt het voor dat de remote server niet e1n regel 'connect message'
> stuurt, maar meerdere (dump heb ik bijgevoegd). Ik laat de response
> van de server zien met e1n regel:
> $line = $server->getline;
> Nu heb ik om dit op te lossen al:
> $match = $server->prompt;
> $line = $server->waitfor($match);
> gedaan, maar dat werkt niet. M'n vraag is: Hoe maak ik een loop die de
> laatste regel herkent, zodat ik met de sessie verder kan èn ik alle
> response kan printen. Of.. moet ik na de laatste regel opnieuw een
> $server->getline doen en dan maar op een time-out wachten?
>
> Alvast bedankt voor 't meedenken :-)
>
> --8<--
>> < 0x00000: 32 32 30 2d 61 6c 70 68 61 2e 6d 61 69 6e 2d 68 220-alpha.main-h
>> < 0x00010: 6f 73 74 69 6e 67 2e 63 6f 6d 20 45 53 4d 54 50 osting.com ESMTP
>> < 0x00020: 20 45 78 69 6d 20 34 2e 35 32 20 23 31 20 53 75 Exim 4.52 #1 Su
>> < 0x00030: 6e 2c 20 31 37 20 53 65 70 20 32 30 30 36 20 32 n. 17 Sep 2006 2
>> < 0x00040: 30 3a 35 39 3a 34 34 20 2d 30 34 30 30 20 0d 0a 0:59:44 -0400 ..
>> < 0x00050: 32 32 30 2d 57 65 20 64 6f 20 6e 6f 74 20 61 75 220-We do not au
>> < 0x00060: 74 68 6f 72 69 7a 65 20 74 68 65 20 75 73 65 20 thorize the use
>> < 0x00070: 6f 66 20 74 68 69 73 20 73 79 73 74 65 6d 20 74 of this system t
>> < 0x00080: 6f 20 74 72 61 6e 73 70 6f 72 74 20 75 6e 73 6f o transport unso
>> < 0x00090: 6c 69 63 69 74 65 64 2c 20 0d 0a 32 32 30 20 61 licited. ..220 a
>> < 0x000a0: 6e 64 2f 6f 72 20 62 75 6c 6b 20 65 2d 6d 61 69 nd/or bulk e-mai
>> < 0x000b0: 6c 2e 0d 0a l...

Achter niet laatste 220 staat een -

while ($line =~ /^220-/) {
$line = $server->getline;
}

Bodhi
18/09/06, 14:20
On 18 Sep 2006 10:01:25 GMT, root@mier.doktercom.nl (Operator) wrote:

<knip>

> Achter niet laatste 220 staat een -
> while ($line =~ /^220-/) {
> $line = $server->getline;
> }

En inderdaad, dat is zo te zien waar voor alle comments van die
server.. E1n hele grote blinde vlek zo laat. Hartelijk dank! :-)

--
Constant change is here to stay.

Bodhi
18/09/06, 15:00
On Mon, 18 Sep 2006 14:00:41 +0200, Bodhi <bodhi@usenet4all.invalid>
wrote:

> root@mier.doktercom.nl (Operator) wrote:

<knip>

>> Achter niet laatste 220 staat een -
>> while ($line =~ /^220-/) {
>> $line = $server->getline;
>> }

> En inderdaad, dat is zo te zien waar voor alle comments van die
> server.. E1n hele grote blinde vlek zo laat. Hartelijk dank! :-)

Ietsjes aangepast leest de routine nu alle errorcodes. Dat "-" staat
inderdaad in RFC 1425.. Ik heb alleen RFC 821 nagelezen en die is zie
'k nu weer obsoleted door RFC 2821. Genoeg te lezen in m'n vakantie
dus :-)

--
Constant change is here to stay.

Bodhi
18/09/06, 18:00
On Mon, 18 Sep 2006 03:26:38 +0200, Bodhi <bodhi@usenet4all.invalid>
wrote:

> Ik probeer een SMTP sessie via Telnet te doen in een Perl script ..

Dit is het voorlopige resultaat, als iemand is geinteresseerd.
http://biohazard.xs4all.nl/cgi-bin/checkemail.pl

--
Constant change is here to stay.