Programmé en Python, TinyP2P fonctionne bien sûr exclusivement en ligne de commande, et selon son inventeur Ed Felten, « le programme est principalement utile pour prouver le concept« . « J’ai écrit TinyP2P pour illustrer la difficulté de réguler les applications peer-to-peer« , ajoute t-il. « Les applications peer-to-peer peuvent être très simples, et n’importe quel programmeur modérément doué peut en écrire une, donc tenter de bannir leur création serait infructueux« .
Le professeur Felten s’était fait connaître en cassant l’initiative SDMI, un projet de DRM uniformisé entre toutes les industries, depuis abandonné. Le groupe avait lancé un défi aux hackers qui parviendraient à casser leur système qu’ils pensaient inviolables. Edward Felten, professeur à l’université de Princeton, avait alors non seulement relevé le défi, mais en plus annoncé qu’il publierait les résultats de ses travaux. Dans sa grande bonté, la SDMI et la RIAA avaient décidé de porter plainte contre le chercheur, avant que l’affaire ne se règle finalement hors tribunal, sous la pression médiatique.
Ci-dessous, le code-source de TinyP2P :
# 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"))
En savoir plus sur TinyP2P :
http://www.freedom-to-tinker.com/tinyp2p.html
+ rapide, + pratique, + exclusif
Zéro publicité, fonctions avancées de lecture, articles résumés par l'I.A, contenus exclusifs et plus encore.
Découvrez les nombreux avantages de Numerama+.
Vous avez lu 0 articles sur Numerama ce mois-ci
Tout le monde n'a pas les moyens de payer pour l'information.
C'est pourquoi nous maintenons notre journalisme ouvert à tous.
Mais si vous le pouvez,
voici trois bonnes raisons de soutenir notre travail :
- 1 Numerama+ contribue à offrir une expérience gratuite à tous les lecteurs de Numerama.
- 2 Vous profiterez d'une lecture sans publicité, de nombreuses fonctions avancées de lecture et des contenus exclusifs.
- 3 Aider Numerama dans sa mission : comprendre le présent pour anticiper l'avenir.
Si vous croyez en un web gratuit et à une information de qualité accessible au plus grand nombre, rejoignez Numerama+.
Vous voulez tout savoir sur la mobilité de demain, des voitures électriques aux VAE ? Abonnez-vous dès maintenant à notre newsletter Watt Else !