mm, bung adi, kok ngga nanya di bandung-pm-list? :-)

bila anda bisa menulis program perl tapi tidak familiar dengan socket,
mungkin socket bukan solusi yang tepat (tersimpel, tercepat di-hack).

bergantung program apa yang ingin dijalankan (privilege yang dibutuhkan,
misalnya), kita bisa aja jalanin satu httpd lagi di port tertentu sebagai
user tertentu. httpd ini di-set agar restriktif banget dan hanya nerima
perintah dari mereka2 yang berhak.

perintahnya bisa dilakukan nanti oleh script CGI. (ngga OOT kan jadinya
dengan topik milis ini? :-). misalnya aja: httpd dijalanin di serverB,
port 1234, hanya nerima dari ip serverA. trus, di direktori
documentroot-nya ada script seperti ini:

#!/usr/bin/perl

system "./program_lainnya.pl" ; # jangan lama-lama...
$status = $? ? 200 : 500 ;

print <<_ ;
Content-type: text/plain
Status: $status

Perintah telah dilaksanakan.
_

---

nanti dari server B kita tinggal me-request URL:

http://serverB:1234/namascript

authentication dll terserah Anda.


selain itu sebetulnya ada berbagai mekanisme lain untuk komunikasi
antarproses di Unix selain soket (NFS, misalnya). tapi, kalo mo pake
socket juga terserah. saya sertakan contohnya di attachment.

HTH

-- sh

On Sun, 2 May -1, [EMAIL PROTECTED] wrote:

> Hi,
> 
> Ada yang mau ditanya lagi nih, ceritanya begini :
> Ada 2 server, serverA(IP : abc.def.g.hij) dan serverB(IP : 
> abc.def.g.hik) nah saya mau bikin perl di serverA yang salah satu 
> tugasnya menjalankan command di serverB. Command tsb misalnya aja 
> "./program_lainnya.pl". 
> 
> Katanya sih bisa pake socket cuma saya nggak ngerti socket, ada yang 
> mau berbaik hati nggak buat ngebikinin script perlnya baik ?
> Oh ya serverA O/Snya Linux sedangkan serverB O/Snya Solaris.
> 
> Thanks buat yang mau bantu..!! :-)
#!/usr/bin/perl

use Socket ;

# setting
$|++ ;
$port = 1234 ;
$ip   = '167.205.24.5' ; # server A, ceritanya
$pass = 'PERLISH' ;      # kalo dikirimi ini, si server akan melakukan perintah
$debug= 1 ;

# buka soket dan konek
print $debug?"mencoba konek ke $ip di port $port.\n":"" ;
socket S, PF_INET, SOCK_STREAM, getprotobyname('tcp')
        or die "$!" ;
connect S, sockaddr_in($port, inet_aton $ip)
        or die "$!" ;

# kirim perintah
print $debug?"kirim perintah.\n":"" ;
syswrite S, $pass, length $pass ;

# tunggu kabar
sysread( S, $_, 1 ) ;
$hasil = unpack( "b", $_ ) ;
die "perintah gagal dilaksanakan!" if not $hasil ;
#!/usr/bin/perl

use Socket ;

# setting
$|++ ;
$port = 1234 ; 
@ip   = ('167.205.24.5') ; # hanya mau terima dari sini, yaitu server B
$pass = 'PERLISH' ;
$debug= 1 ;

# buka soket, bind, listen
socket S, PF_INET, SOCK_STREAM, getprotobyname('tcp')
        or die "$!" ;
setsockopt S, SOL_SOCKET, SO_REUSEADDR, pack('l', 1)
        or die "$!" ;
bind S, sockaddr_in($port, INADDR_ANY) 
        or die "$!" ;
listen S, SOMAXCONN 
        or die "$!" ;

print $debug?"siap nerima koneksi di port $port.\n":"" ;

$SIG{CHLD} = \&REAPER ;

# loop accept
while(1) {
        $hasil = 0 ;

        (undef, $_) = sockaddr_in( accept C, S ) ;
        $ip = inet_ntoa $_ ;

        print "ada yang konek dari $ip.\n" ;
        (print $debug?"ditolak!\n":"" and goto SKIP) 
                if not grep { $ip eq $_ } @ip ;

        sysread( C, $_, length $pass ) ;
        (print $debug?"salah password! ($_)\n":"" and goto SKIP)
                if $_ ne $pass ;
        
        &lakukan ;
        print $debug?"perintah gagal dilaksanakan!\n":"" if not $hasil ;
        syswrite( C, pack("b", $hasil), 1 ) ;

        SKIP:
        close C ;
}

# ini perintah yang harus dilakukan
# di sini, kita lakukan "pelimpahan wewenang" aja ke user yang
# sedang melihat layar... :)
sub lakukan {
        print "Ada perintah dari $ip!\n" ;
        $hasil = 1 ;
}
      Layanan Pertukaran Banner - http://www.indobanner.co.id

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
To unsubscribe, e-mail : [EMAIL PROTECTED]
To subscribe, e-mail   : [EMAIL PROTECTED]
Netika BerInternet     : [EMAIL PROTECTED]
UNLIMITED POP3 Account @ http://www.indoglobal.com

Kirim email ke