ADSL

Petr Spodniak pspodniak at broadnet.cz
Fri Apr 25 11:55:20 CEST 2003


Zdravim,


>      nezkousel jste nekdo napsat script na automaticke prihlseni?
> 

Zatim jsem takovy skript nepsal. Nemam k dispozici ADSL Basic.
Nicmene nemel by to byt problem. Jedna se v podstate o nasledujici
postup:

- open socket
- provedeni HTTP dotazu (GET ...)
- nacteni a dekodovani odpovedi
- sestaveni noveho HTTP dotazu (PUT...)
- nacteni a dekodovani odpovedi
- uzavreni socketu

To cele by melo byt spousteno na zaklade nejakeho mechanismu, ktery
kontroluje dostupnost nejakych zdroju na internetu (napr. pingem).

V perlu by to nemel byt problem. Staci pouzit class Net::Telnet, ktery
umoznuje pohodlnou praci s TCP streamem.

Pokud se nekdo rad "racha" v kodu na nizsi urovni tak tady je ideovy
navrh (okomentovany ;-) - je to vystrizeno/upraveno z funkcniho
programu; tak jak to je by to melo vypsat HTTP odpoved ze serveru;
vyzaduje pouze class Socket ketry by mel byt v zakladni distribuci
perlu):

#!/usr/bin/perl
use Socket;

$| = 1;

my $host = "adresa nebo hostname" 	# napr. "www.seznam.cz";
my $url  = "URL" 					# napr."http://www.seznam.cz/";
eval {											# kvuli timeoutu nutno pouzit eval (v podstate forkne
dalsi thread a ceka na jeho dokonceni)
	local $SIG{ALRM} = sub { die "timeout\n" };	# handler pro signal ALARM
- ukonci thread a nastavi navratovy kod na "timeout"
	alarm $timeout;								# system posle threadu signal ALARM za $timeout
sekund
	my $ip_addr = inet_aton( $host ) || die "unknown remote host";	#
resolvovani a konverze hostname na IP adresu
	socket(SOCK, AF_INET, SOCK_STREAM, 0) || die "cannot allocat socket";	#
vytvoreni socketu
	connect(SOCK, sockaddr_in(80, $ip_addr)) || die "cannot connectio to
$host:80\n";	# vytvoreni vlatniho spojeni
	select SOCK;								# zakaz buffering pro otevreny socket
	$| = 1;
	print SOCK "GET $path HTTP/1.0\n\n";	# posli dotaz
	select STDOUT;
	while (<SOCK>) {
		print ;		# jen vypis odpovedi
		if (/^HTTP.*200 OK/); {
			# tady je potreba nacist zbytek odpovedi
			# a poslat novy dotaz
		}
	}
	close (SOCK); 	# uzavri socket
};				  	# ukonci thread
alarm 0;		  	# zrus pozadavek na poslani signalu ALARM


-- 
Petr Spodniak <pspodniak at broadnet.cz>



More information about the Users-l mailing list