P2P in sole 9 righe di codice
Slashdot come al solito offre ottimi spunti. Un botta e risposta tra un professore di informatica di Princeton e un giovane programmatore Canadese ha prodotto il più piccolo programma di file sharing mai concepito: solo 9 righe di codice.
Inizialmente il professor Ed Felten di Princeton coadiuvato dallo studente J. Alex Halderman ha realizzato quello che sembrava essere la più piccola applicazione P2P al mondo. TinyP2P, questo il nome del programma, è racchiuso in sole 15 righe di codice in linguaggio Python. Lavora sul protocollo HTTP e sul protocollo XML-RPC e non consente l’utilizzo su network molto estesi.
Ecco il listato:
# tinyp2p.py 1.0 (documentation at http://freedom-to-tinker.com/tinyp2p.html)
import sys, os, SimpleXMLRPCServer, xmlrpclib, re, hmac # (C) 2004, E.W. Felten
ar,pw,res = (sys.argv,lambda u:hmac.new(sys.argv[1],u).hexdigest(),re.search)
pxy,xs = (xmlrpclib.ServerProxy,SimpleXMLRPCServer.SimpleXMLRPCServer)
def ls(p=""):return filter(lambda n:(p=="")or res(p,n),os.listdir(os.getcwd()))
if ar[2]!="client": # license: http://creativecommons.org/licenses/by-nc-sa/2.0
myU,prs,srv = ("http://"+ar[3]+":"+ar[4], ar[5:],lambda x:x.serve_forever())
def pr(x=[]): return ([(y in prs) or prs.append(y) for y in x] or 1) and prs
def c(n): return ((lambda f: (f.read(), f.close()))(file(n)))[0]
f=lambda p,n,a:(p==pw(myU))and(((n==0)and pr(a))or((n==1)and [ls(a)])or c(a))
def aug(u): return ((u==myU) and pr()) or pr(pxy(u).f(pw(u),0,pr([myU])))
pr() and [aug(s) for s in aug(pr()[0])]
(lambda sv:sv.register_function(f,"f") or srv(sv))(xs((ar[3],int(ar[4]))))
for url in pxy(ar[3]).f(pw(ar[3]),0,[]):
for fn in filter(lambda n:not n in ls(), (pxy(url).f(pw(url),1,ar[4]))[0]):
(lambda fi:fi.write(pxy(url).f(pw(url),2,fn)) or fi.close())(file(fn,"wc"))
Per tutta risposta Matthew Skala, insoddisfatto del risultato di Felten, ha prodotto un programma di sole 9 righe di codice scritto nel linguaggio Perl. Si tratta di Molester, probabilmente il più piccolo programma di file sharing mai realizzato.
Ecco il listato:
$p=shift;$a=shift;i(shift);use Socket;socket S,PF_INET,SOCK_STREAM,6;
bind S,&a($a);listen S,5;$/=undef;while(@ARGV&&($_="$p $a f".shift)||
accept(C,S)&&($_=<c>)&&close C){m!^(.*?) (.*?) ([e-i])([^/]*)/(.*)$!s&&
$1 eq$p&&&$3($2,$4,$5);}sub e{open F,'>',$_[1];print F $_[2];close F}
sub f{&s($_,@_)foreach keys %k}sub g{open(F,'<',$_[1])&&&s($_[0],$a,
"e$_[1]",<f>);close F}sub h{&s($_[0],$_,'i')foreach keys %k}sub i{$k{
$_[0]}=1}sub a{$_[0]=~/^(.*):(\d+)$/&&$2>2e3&&sockaddr_in($2,inet_aton(
$1))}sub s{socket X,PF_INET,SOCK_STREAM,6;$w=shift;if(connect X,&a($w)
){print X "$p $_[0] $_[1]/$_[2]";close X}else{undef $k{$p}}}Post correlati:
Newsletter
I più visti
- Groupon Citydeal: le truffe sono in agguato (aggiornato)
- Già possibile attivare Windows 7 Ultimate RTM con Hazar Activator
- Multiboot: installare Windows 7 dopo XP e Ubuntu
- Installare Mac OS X 10.7 Lion in VMware su Windows
- Dispositivo MTP non riconosciuto in Windows XP: ecco come fare
- Vista, hard disk e pendrive USB: problema risolto
Categorie
Archivi
Commenti recenti
- matteoca su Bucare una rete Wi-Fi protetta con Ubuntu usando Reaver
- Hiroshi su Pagelines Platform in italiano per WordPress
- jovy60 su Pagelines Platform in italiano per WordPress
- MICHELA su Groupon Citydeal: le truffe sono in agguato (aggiornato)
- michela su Groupon Citydeal: le truffe sono in agguato (aggiornato)
Twitter
- How To Setup SiriServer On Ubuntu For Use With Spire Tweak http://t.co/lmVnVb1Q 12 ore fa
- Oil industry sees no threat from electric car http://t.co/gcQal70v 12 ore fa
- Integrating Google Analytics into your Company Loop with a Microsoft Excel Add-on http://t.co/OBQgDLNf 12 ore fa
- F.B.I. Admits Hacker Group’s Eavesdropping http://t.co/qiHZEcRa 12 ore fa
- Want 4.5GB of free Dropbox space? Be a guinea pig http://t.co/nWCaV301 13 ore fa






