Dies ist der Befehl ooniprobe, der beim kostenlosen Hosting-Anbieter OnWorks mit einer unserer zahlreichen kostenlosen Online-Workstations wie Ubuntu Online, Fedora Online, dem Windows-Online-Emulator oder dem MAC OS-Online-Emulator ausgeführt werden kann
PROGRAMM:
NAME/FUNKTION
ooniprobe – ein Tool zur Messung der Netzwerkzensur.
ZUSAMMENFASSUNG
ooniprobe [-hnsp] [--Version] [--speien] [-o Datei melden] [-i Testdeck] [-c Sammler] [-b
Türsteher] [-l Logdatei] [-O PCAP-Datei] [-f Konfigurationsdatei] [-d datadir] Testname
BESCHREIBUNG
ooniprobe ist ein Tool zur Durchführung von Internet-Zensurmessungen. Unser Ziel ist es zu erreichen
ein gemeinsames Datenformat und eine Reihe von Methoden zur Durchführung zensurbezogener Forschung.
OPTIONAL
-h or --help
Diese Hilfe anzeigen und beenden.
-n or --kein Sammler
Deaktivieren Sie die Meldung der Nettotestergebnisse an einen Oonib-Kollektor.
-s or --aufführen
Listen Sie alle verfügbaren Netztests auf.
-p or --printdeck
Gibt die angegebenen Befehlszeilenoptionen als ooniprobe-Test in der Standardausgabe aus
Deck.
-o or --Datei melden
Geben Sie den Pfad zur zu schreibenden Berichtsdatei an.
-i or --testdeck
Geben Sie als Eingabe ein Testdeck an: eine Yaml-Datei, die die auszuführenden Tests und deren enthält
Argumente.
-c or --Kollektor
Geben Sie die Adresse des Sammlers der Nettotestergebnisse an. Es empfiehlt sich immer
Geben Sie einen Bouncer an und lassen Sie ihn einen Sammler für den Test oder das Testdeck zurückgeben, das Sie sind
läuft.
-b or --Türsteher
Adresse des Bouncers, der die Sonde darüber informiert, welcher Collector verwendet werden soll
Adressen von Testhelfern. Standard: httpo://nkvphnp3p6agi5qq.onion
-l or --Logdatei
Pfad zur zu schreibenden Protokolldatei
-O or --pcapfile
Präfix für den PCAP-Dateinamen.
-f or --Konfigurationsdatei
Geben Sie einen Pfad zur ooniprobe-Konfigurationsdatei an.
-d or --datadir
Geben Sie einen Pfad zum ooniprobe-Datenverzeichnis an
--speien Drucken Sie ein wahnsinnig ausführliches Protokoll über alles, was passiert. Nützlich beim Debuggen
friert komplexen Code ein oder sperrt ihn.
--Version
Zeigen Sie die Ooniprobe-Version an und beenden Sie den Vorgang.
OONIPROBE
Ist das Tool, mit dem Freiwillige und Forscher Daten zum Projekt beitragen können
sollte laufen.
Mit ooniprobe kann der Benutzer auswählen, welcher Test ausgeführt werden soll und welches Backend sein soll
Wird zum Speichern des Testberichts und/oder zur Unterstützung bei der Durchführung des Tests verwendet.
ooniprobe-Tests sind in zwei Kategorien unterteilt: Traffic Manipulation und Inhalt
Blockierung.
Traffic Manipulation Tests zielen darauf ab, das Vorhandensein irgendeiner Art von Manipulation zu erkennen
Internetverkehr zwischen dem Probe und einem Remote-Testhelfer-Backend. Als solche normalerweise
erfordern die Auswahl einer Oonib-Backend-Komponente zum Ausführen des Tests.
Inhalt Blockierung zielen darauf ab, die Art von Inhalten aufzuzählen, die blockiert werden
untersucht das Netzwerk aus Sicht. Daher ist in der Regel die Angabe einer Eingabeliste erforderlich
für die Durchführung des Tests.
Bedrohung Modell
Unser Gegner ist in der Lage, landesweite Netzwerküberwachungen und -manipulationen durchzuführen
Netzwerktraffic.
Die Ziele unseres Gegners sind:
· Beschränken Sie den Zugriff auf bestimmte Inhalte, ohne die Gesamtqualität zu beeinträchtigen
Netzwerk
· Überwachen Sie das Netzwerk so, dass Missbrauch in Echtzeit erkannt werden kann
Spezifischer für die Durchführung von Netzwerkfilter-Erkennungstests:
1. Erkennen Sie Akteure, die Zensurerkennungstests durchführen
2. Machen Sie Leuten, die solche Tests durchführen, vor, dass das Netzwerk uneingeschränkt sei
Note dass zwar 2) => 1) nicht wahr ist, dass 1) => 2) als Identifikation solcher Akteure gilt
muss nicht unbedingt in Echtzeit geschehen. Während unsere Absicht darin besteht, die zu minimieren
Es besteht das Risiko, dass Benutzer, die eine OONI-Sonde ausführen, identifiziert werden. Dies geht jedoch mit einem Kompromiss bei der Genauigkeit einher.
Daher ist es bei bestimmten Tests erforderlich, zugunsten der Fingerabdruckbarkeit einen Kompromiss einzugehen
testet die Genauigkeit.
Aus diesem Grund unterteilen wir Tests danach, welchem Risiko der Benutzer ausgesetzt sein kann, der sie ausführt
Der Benutzer kann frei wählen, welchem Bedrohungsmodell er folgen möchte.
Installation
Lesen Sie mehr fehlen uns die Worte. bevor Laufen ooniprobe!
Das Ausführen von ooniprobe ist eine potenziell riskante Aktivität. Dies hängt stark davon ab
Gerichtsstand, in dem Sie sich befinden und welchen Test Sie durchführen. Es ist technisch gesehen
Es ist möglich, dass eine Person, die Ihre Internetverbindung beobachtet, sich der Tatsache bewusst ist, dass Sie
führen ooniprobe aus. Dies bedeutet, dass es sinnvoll ist, Netzwerkmesstests durchzuführen
Wenn Sie in Ihrem Land als illegal gelten, könnten Sie entdeckt werden.
Darüber hinaus trifft ooniprobe keine Vorsichtsmaßnahmen, um den Zielcomputer der Installation zu schützen
forensische Analyse. Wenn die Tatsache, dass Sie die Ooni-Sonde installiert oder verwendet haben, eine Haftung darstellt
Bitte seien Sie sich dieses Risikos bewusst.
Debian basierend Systeme
sudo sh -c 'Echo „deb http://deb.ooni.nu/ooni keuchend hauptsächlich" >> / Etc / apt / sources.list'
gpg - Schlüsselserver pgp.mit.edu --recv-key 0x49B8CDF4
gpg --Export 89AB86D4788F3785FE9EDA31F9E2D9B049B8CDF4 | sudo apt-Schlüssel hinzufügen -
sudo apt-get Aktualisierung && sudo apt-get installieren ooniprobe
Linux
Wir glauben, dass ooniprobe auch unter Debian GNU/Linux wheezy einigermaßen gut läuft
Versionen von Ubuntu wie Natty und spätere Versionen. Ooniprobe ohne Installation ausführen
es wird mit den folgenden Befehlen unterstützt:
git klonen https://git.torproject.org/ooni-probe.git
cd Ooni-Sonde
./setup-dependencies.sh
python setup.py installieren
Rahmen up Entwicklung -Umgebung
Auf Debian-basierten Systemen kann dies erfolgen mit:
Vsudo apt-get installieren libgeoip-dev python-virtualenv virtueller Wrapper
mkvirtualenv ooniprobe
python setup.py installieren
Pip installieren -r Anforderungen-dev.txt
Andere Plattformen (mit Landstreicher)
Installieren Landstreicher und Installieren Virtualbox
On OS X:
Wenn Sie es nicht haben, installieren Sie es Homebrew
brauen installieren git
On debian/ubuntu:
sudo apt-get installieren git
1. Öffnen Sie ein Terminal und führen Sie Folgendes aus:
git klonen https://git.torproject.org/ooni-probe.git
cd ooni-sonde/
Landstreicher up
2. Melden Sie sich bei der Box an mit:
Landstreicher ssh
ooniprobe wird installiert in /ooni.
3. Sie können Tests durchführen mit:
ooniprobe blocking/http_requests -f /ooni/inputs/input-pack/alexa-top-1k.txt
Die richtigen ooniprobe
Netto- Test ist eine Reihe von Messungen, um zu beurteilen, welche Art von Internet-Zensur stattfindet.
Decks sind Sammlungen von Ooniprobe-Nettests mit einigen zugehörigen Eingaben.
Sammler ist ein Dienst zur Meldung von Messergebnissen.
Test Helfer ist ein Dienst, den eine Sonde für die erfolgreiche Durchführung ihrer Messungen nutzt.
Türsteher ist ein Dienst zur Ermittlung der Adressen von Testhelfern und Sammlern.
Konfigurieren ooniprobe
Sie können die Konfiguration für ooniprobe bearbeiten, indem Sie die gefundene Konfigurationsdatei bearbeiten
Innen ~/.ooni/ooniprobe.conf.
Standardmäßig schließt ooniprobe keine personenbezogenen Daten in das Testergebnis ein.
noch eine PCAP-Datei erstellen. Dieses Verhalten kann personalisiert werden.
Laufen Decks
Im Inneren finden Sie alle installierten Decks /usr/share/ooni/decks.
Anschließend können Sie mithilfe der Befehlszeilenoption ein Deck ausführen -i:
Als Wurzel:
ooniprobe -i /usr/share/ooni/decks/mlab.deck
Oder als Benutzer:
ooniprobe -i /usr/share/ooni/decks/mlab_no_root.deck
Oder:
Als Wurzel:
ooniprobe -i /usr/share/ooni/decks/complete.deck
Oder als Benutzer:
ooniprobe -i /usr/share/ooni/decks/complete_no_root.deck
Die Durchführung der oben genannten Tests dauert je nach Netzwerk etwa 20 bis 30 Minuten
Geschwindigkeit.
Wenn Sie lieber einige schnellere Tests ausführen möchten, sollten Sie Folgendes ausführen: Als Root:
ooniprobe -i /usr/share/ooni/decks/fast.deck
Oder als Benutzer:
ooniprobe -i /usr/share/ooni/decks/fast_no_root.deck
Laufen Netto- Tests
Sie können alle installierten stabilen Netztests auflisten mit:
ooniprobe -s
Anschließend können Sie einen Nettotest ausführen, indem Sie beispielsweise seinen Namen angeben:
ooniprobe manipulation/http_header_field_manipulation
Es ist auch möglich, Eingaben für Tests als URLs anzugeben:
ooniprobe blocking/http_requests -f httpo://ihiderha53f36lsd.onion/input/
37e60e13536f6afe47a830bfb6b371b5cf65da66d7ad65137344679b24fdccd1
Das Ergebnis des Tests finden Sie in Ihrem aktuellen Arbeitsverzeichnis.
Standardmäßig wird das Berichtsergebnis vom Standard-Ooni-Collector und dem erfasst
Adressen von Testhelfern werden vom Standard-Türsteher bezogen.
Sie können mit den Optionen auch Ihren eigenen Sammler oder Bouncer angeben -c und -b.
(Optional) Installieren obfsproxy
Installieren Sie die neueste Version von obfsproxy für Ihre Plattform.
Herunterladen Obfsproxy
Brücken und obfsproxy Brücken
ooniprobe sendet Berichte über Tor an einen versteckten Dienst an oonib-Berichtssammler
Endpunkt. Standardmäßig verwendet ooniprobe das installierte System Tor, kann aber auch konfiguriert werden
um Tor zu starten (siehe die Option advanced.start_tor in ooniprobe.conf) und ooniprobe
unterstützt Bridges (und obfsproxy-Bridges, wenn obfsproxy installiert ist). Die tor.bridges
Die Option in ooniprobe.conf legt den Pfad zu einer Datei fest, die eine Reihe von „Brücken“ enthalten soll.
Zeilen (im gleichen Format wie in torrc verwendet und wie von zurückgegeben
https://bridges.torproject.org). Wenn obfsproxy-Brücken verwendet werden sollen, ist der Pfad zu
obfsproxy-Binärdatei muss konfiguriert sein. Siehe Option advanced.obfsproxy_binary, in
ooniprobe.conf.
Rahmen Ressourcen on deine virtualenv python binär
Wenn Ihre Distribution Funktionen unterstützt, können Sie OONI nicht als Root ausführen müssen:
Setcap cap_net_admin,cap_net_raw+eip /path/to/your/virtualenv's/python
Core ooniprobe Tests
Die Quelle für Inhalt Sperrung Tests und Traffic Manipulation Tests finden Sie im
Nettests/Blocking- und Nettests/Manipulation-Verzeichnisse.
Inhalt Blockierung Tests
· DNS-Konsistenz
· HTTP Produktanfragen
· TCP Verbinden
Traffic Manipulation Tests
· HTTP Ungültig PREISANFRAGE (Request) Line:
· DNS Parodie
· HTTP Kopfzeile Feld Manipulation
· Traceroute
· HTTP Gastgeber
Andere Tests
Wir haben auch einige andere Tests, die derzeit nicht vollständig unterstützt werden oder noch durchgeführt werden
experimentiert mit.
Diese finden Sie in:
· ooni/nettests/experimental
Tests, die keine Messung durchführen, aber zum Scannen nützlich sind, finden Sie in:
· ooni/nettests/scanning
Tests, bei denen Tools von Drittanbietern ausgeführt werden, finden Sie in:
· ooni/nettests/third_party
Meldungen
Die von ooniprobe gesammelten Berichte werden auf gespeichert https://ooni.torproject.org/reports/0.1/
CC /
Wo CC ist der aus zwei Buchstaben bestehende Ländercode, wie von angegeben ISO 31666 2 .
Zum Beispiel die Berichte für Italien (CC is it) davon finden Sie in:
https://ooni.torproject.org/reports/0.1/IT/
Dieses Verzeichnis soll die verschiedenen Berichte für den Test enthalten, wobei Folgendes verwendet wird
Konvention:
Testname - dateInISO8601Format - probeASNumber .yamloo
Das Datum wird ausgedrückt mit ISO 8601 inklusive Sekunden und mit Nr : Stunden abgrenzen,
Minuten, Tage.
Wie so:
JAHR - MONAT - TAG T STUNDEN MINUTEN SECONDS Z
aussehen HIER für up zu Datum Liste of ISO 8601 Land Codes
Es ist ____ Uhr immer ausgedrückt in UTC.
Wenn eine Kollision erkannt wird, wird ein int (beginnend mit 1) an den Test angehängt.
Wenn beispielsweise zwei Berichte am 2012. Januar XNUMX um XNUMX:XNUMX Uhr (UTC-Zeit) erstellt werden
Sharp vom MIT (AS3) wird hier gespeichert:
https://ooni.torproject.org/reports/0.1/US/2012-01-01T120000Z_AS3.yamloo
https://ooni.torproject.org/reports/0.1/US/2012-01-01T120000Z_AS3.1.yamloo
Hinweis: Es ist höchst unwahrscheinlich, dass Berichte mit genau demselben Zeitstempel erstellt werden
die gleiche genaue ASN. Wenn dies geschieht, könnte es sich um einen Hinweis auf einen schädlichen Bericht handeln
Vergiftungsanschlag im Gange.
Profil melden Format Version Changelog
Hier finden Sie Einzelheiten zu den wichtigsten Änderungen am Berichtsformat.
Version 0.1
Ursprüngliche Formatversion.
Schreiben OONI Tests
Die OONI-Test-API ist stark von Python beeinflusst und basiert teilweise darauf Gerätetest
Modul und verdrehter.Prozess.
Test Projekte
Das Atom des OONI-Tests wird als Testfall bezeichnet. Eine Testfallklasse kann mehrere enthalten
Testmethoden.
Klasse ooni.nettest.NetTestCase
Dies ist die Basis des OONI-Nettest-Universums. Wenn Sie ein Nettest schreiben, werden Sie es tun
Unterklasse dieses Objekts.
· Eingaben: können auf einen statischen Satz von Eingaben eingestellt werden. Alle Tests (die Methoden beginnen
mit dem Präfix „test“) wird einmal pro Eingabe ausgeführt. Bei jedem Lauf wird die _Eingabe_
Das Attribut der TestCase-Instanz wird auf den Wert des aktuellen gesetzt
Iteration über Eingaben. Jedes iterierbare Python-Objekt kann auf Eingaben festgelegt werden.
· inputFile: Das Attribut sollte auf ein Array gesetzt werden, das die Befehlszeile enthält
Argument, das als Eingabedatei verwendet werden soll. Ein solches Array sieht folgendermaßen aus:
["commandlinearg", "C", "Ursprünglich Wert" "Die Beschreibung"]
Der zweite Wert eines solchen Arrays ist die Abkürzung für das Befehlszeilenargument. Der
Der Benutzer kann dann Eingaben für den Test angeben über:
ooniprobe mytest.py --commandlinearg Pfad/zur/Datei.txt
or
ooniprobe mytest.py -c Pfad/zur/Datei.txt
· inputProcessor: sollte auf eine Funktion eingestellt werden, die einen Dateinamen und als Argument verwendet
Es gibt die Eingabe zurück, die an die Testinstanz übergeben werden soll.
· Name: sollte auf den Namen des Tests eingestellt werden.
· Autor: sollte den Namen und die Kontaktdaten des Testautors enthalten. Der
Das Format für eine solche Zeichenfolge lautet wie folgt:
Die Name <[E-Mail geschützt] >
· Version: ist die Versionszeichenfolge des Tests.
· requireRoot: auf True setzen, wenn der Test als Root ausgeführt werden muss.
· useOptions: eine Unterklasse von twisted.python.usage.Options zur Verarbeitung von
Kommandozeilenargumente
· localOptions: enthält die analysierten Befehlszeilenargumente.
Macken: Jede Klasse, der test vorangestellt ist sollen Rückgabe a
twisted.internet.defer.Deferred.
Wenn der Test, den Sie schreiben möchten, nicht aufgeführt ist Tor OONI trac Seite, sollten Sie es hinzufügen
Fügen Sie der Liste eine Beschreibung hinzu und fügen Sie anschließend eine Beschreibung dazu hinzu Test Template
Tests werden durch Eingaben gesteuert. Für jede Eingabe wird intern eine neue Testinstanz erstellt
_setUp-Methode aufgerufen wird, die in Testvorlagen definiert ist, dann die setUp-Methode
Das ist von Benutzern überschreibbar.
Fallstricke: niemals Rufen Sie „reactor.start“ oder „reactor.stop“ innerhalb Ihrer Testmethode auf und alle werden es tun
gut sein.
Eingänge
Eingaben sind die Eingaben für jede Iteration des Testfalls. Wenn Sie 100 haben
Eingaben, dann wird jeder Testfall 100 Mal ausgeführt.
Um einen statischen Satz von Eingängen zu konfigurieren, sollten Sie Folgendes definieren ooni.nettest.NetTestCase
Attribut Eingänge. Der Test wird durchgeführt len(Eingaben) mal. Jedes iterierbare Objekt ist gültig
Eingänge Attribut.
Wenn Sie möchten, dass Eingaben aus einer benutzerdefinierten Eingabedatei ermittelt werden, dann sind Sie hier richtig
muss die einstellen Eingabedatei Attribut. Dies ist ein Array, das die Befehlszeilenoption angibt
kann verwendet werden, um diesen Wert zu steuern.
Standardmäßig ist der Eingabeprozessor ist so eingestellt, dass die Datei Zeile für Zeile gelesen und Zeilenumbrüche entfernt werden
Figuren. Um dieses Verhalten zu ändern, müssen Sie Folgendes festlegen Eingabeprozessor Attribut zu a
Funktion, die einen Dateideskriptor als Argument verwendet und das nächste Element liefert. Der Standard
Eingabeprozessor sieht aus wie das:
def lineByLine(dateiname):
fp = open(Dateiname)
für x in fp.xreadlines():
Ausbeute x.strip()
fp.close()
Einrichtung und Befehl Linie Bestehen
Tests können das definieren installieren Methode, die jedes Mal aufgerufen wird, wenn das Testfallobjekt vorhanden ist
instanziiert, hier können Sie allen Ihren Testmethoden eine gemeinsame Logik hinzufügen, die dies tun soll
ausgeführt werden, bevor Tests durchgeführt werden.
Befehlszeilenargumente können dank des Twisted analysiert werden
Twisted.python.usage.UsageOptions Klasse.
Sie müssen dies in eine Unterklasse umwandeln und das NetTestCase-Attribut „usageOptions“ auf den Punkt definieren
zu einer Unterklasse davon.
Klasse UsageOptions(usage.Options):
optParameters = [['backend', 'b', 'http://127.0.0.1:57001',
'URL des zu verwendenden Test-Backends']
]
Klasse MyTestCase(nettest.NetTestCase):
useOptions = UsageOptions
inputFile = ['file', 'f', None, "Some foo file"]
erforderlichOptions = ['backend']
def test_my_test(self):
self.localOptions['backend']
Anschließend können Sie über das Klassenattribut auf die geparsten Befehlszeilenargumente zugreifen
lokale Optionen.
Die erforderliche Optionen attributes gibt ein Array von Parametern an, die für erforderlich sind
Testen Sie, ob es ordnungsgemäß läuft.
Eingabedatei ist ein spezielles Klassenattribut, das für die Verarbeitung der Eingabedatei verwendet wird.
Der hier gelesene Dateiname wird dem übergeben
ooni.nettest.NetTestCase.inputProcessor Methode, die standardmäßig eine Zeile von ergibt
die Datei nach der anderen.
Test Methoden
Diese werden innerhalb Ihres definiert ooni.nettest.NetTestCase Unterklasse. Das wird sein
Klassenmethoden.
Alle Klassenmethoden, denen test_ vorangestellt ist, sollen ausgeführt werden. Relevante Funktionen
Für Ihren Test sollten alle Kleinbuchstaben durch einen Unterstrich getrennt sein.
Um dem Testbericht Daten hinzuzufügen, können Sie wie folgt direkt in das Berichtsobjekt schreiben:
def test_my_function():
result = do_something()
self.report['something'] = Ergebnis
OONI übernimmt dann das Schreiben der Daten in den endgültigen Testbericht.
Um auf die aktuelle Eingabe zuzugreifen, können Sie die verwenden Varianten des Eingangssignals: Attribut, zum Beispiel:
def test_with_input():
do_something_with_input(self.input)
Dadurch wird bei jeder Iteration über die Liste der Eingaben etwas mit der Eingabe gemacht.
Test Template
Testvorlagen unterstützen Sie beim Schreiben von Tests. Sie enthalten bereits alles Gemeinsame
Funktionalität, die zum Ausführen eines Tests dieser Art nützlich ist. Sie kümmern sich auch darum
Schreiben der von ihnen gesammelten Daten, die für den Testlauf relevant sind, in die Berichtsdatei.
Derzeit implementierte Testvorlagen sind ooni.templates.scapyt für Tests basierend auf Scapy,
ooni.templates.tcpt für Tests basierend auf TCP, ooni.templates.httpt für Tests basierend auf HTTP,
und ooni.templates.dnst für Tests basierend auf DNS.
schlau basierend Tests
Scapy-basierte Tests werden eine Unterklasse von sein ooni.templates.scapyt.BaseScapyTest.
Es bietet einen Wrapper um die Scapy-Sende- und Empfangsfunktion, die das Gesendete schreibt
und empfangene Pakete an den Bericht mit Bereinigung der Quell- und Ziel-IP
Adressen.
Sie hat die gleiche Syntax wie die Scapy-sr-Funktion, mit der Ausnahme, dass sie ein verzögertes Ergebnis zurückgibt.
Um einen einfachen ICMP-Ping basierend auf dieser Funktion zu implementieren, können Sie wie folgt vorgehen (entnommen aus
nettest.examples.example_scapyt.ExampleICMPPingScapy)
aus der Twisted.python-Importverwendung
Von scapy.all importieren IP, ICMP
aus ooni.templates Scapyt importieren
Klasse UsageOptions(usage.Options):
optParameters = [['target', 't', '127.0.0.1', "Geben Sie das Ziel für den Ping an"]]
Klasse BeispielICMPPingScapy(scapyt.BaseScapyTest):
name = „Beispiel ICMP-Ping-Test“
useOptions = UsageOptions
def test_icmp_ping(self):
definitiv fertig(Pakete):
Pakete drucken
beantwortet, unbeantwortet = Pakete
für snd, rcv in antwortete:
rcv.show()
packets = IP(dst=self.localOptions['target'])/ICMP()
d = self.sr(Pakete)
d.addCallback(fertig)
zurück d
Die von self.sr() verwendeten Argumente sind genau die gleichen wie beim Scapy-Senden und -Empfangen
Funktion, der einzige Unterschied besteht darin, dass sie anstelle des regulären Scapy-Super-Sockets verwendet wird
verwendet unseren gedrehten angetriebenen Wrapper um ihn herum.
Alternativ kann dieser Test auch mit geschrieben werden twisted.defer.inlineCallbacks()
Dekorator, wodurch es dem regulären sequentiellen Code ähnlicher wird.
aus der Twisted.python-Importverwendung
von Twisted.Internet Import Defer
Von scapy.all importieren IP, ICMP
aus ooni.templates Scapyt importieren
Klasse UsageOptions(usage.Options):
optParameters = [['target', 't', '127.0.0.1', "Geben Sie das Ziel für den Ping an"]]
Klasse BeispielICMPPingScapyYield(scapyt.BaseScapyTest):
name = „Beispiel ICMP-Ping-Test“
useOptions = UsageOptions
@defer.inlineCallbacks
def test_icmp_ping(self):
packets = IP(dst=self.localOptions['target'])/ICMP()
beantwortet, unbeantwortet = yield self.sr(packets)
für snd, rcv in antwortete:
rcv.show()
Profil melden Format
###########################################
# OONI-Probebericht für Beispiel-ICMP-Ping-Testtest
# Do 22. Nov. 18:20:43 2012
###########################################
---
{probe_asn: null, probe_cc: null, probe_ip: 127.0.0.1, software_name: ooniprobe, software_version: 0.0.7.1-alpha,
Startzeit: 1353601243.0, Testname: Beispiel für einen ICMP-Ping-Test, Testversion: 0.1}
...
---
Eingabe: null
Bericht:
Antwortflags: [ipsrc]
beantwortete_Pakete:
- - raw_packet: !!binary |
RQAAHAEdAAAuAbjKCAgICH8AAAEAAAAAAAAAAA==
Zusammenfassung: IP / ICMP 8.8.8.8 > 127.0.0.1 echo-reply 0
gesendete_Pakete:
- - raw_packet: !!binary |
RQAAHAAABAABAAevPfwAAAQgICAgIAPf/AAAAAA==
Zusammenfassung: IP / ICMP 127.0.0.1 > 8.8.8.8 echo-request 0
Testname: test_icmp_ping
test_started: 1353604843.553605
...
TCP basierend Tests
TCP-basierte Tests werden in Unterklassen unterteilt ooni.templates.tcpt.TCPTest.
Diese Testvorlage erleichtert das Senden von TCP-Nutzdaten an die Leitung und deren Aufzeichnung
Antwort.
aus twisted.internet.error importiere ConnectionRefusedError
aus dem ooni.utils-Importprotokoll
aus ooni.templates tcpt importieren
Klasse BeispielTCPT(tcpt.TCPTest):
def test_hello_world(self):
def got_response(response):
print „Diese Daten %s erhalten“ % Antwort
def Connection_failed(Fehler):
fail.trap(ConnectionRefusedError)
print „Verbindung verweigert“
self.address = "127.0.0.1"
self.port = 57002
payload = „Hallo Welt!\n\r“
d = self.sendPayload(Nutzlast)
d.addErrback(connection_failed)
d.addCallback(got_response)
zurück d
Die möglichen Fehler für eine TCP-Verbindung sind:
twisted.internet.error.NoRouteError das entspricht errno.ENETUNREACH
twisted.internet.error.ConnectionRefusedError das entspricht errno.ECONNREFUSED
twisted.internet.error.TCPTimedOutError das entspricht errno.ETIMEDOUT
Profil melden Format
Der grundlegende Bericht eines TCP-Tests sieht wie folgt aus (dies ist ein Bericht, der von erstellt wurde).
Ausführen des obigen Beispiels gegen einen TCP-Echoserver).
###########################################
# OONI-Probebericht für Basis-TCP-Testtest
# Do 22. Nov. 18:18:28 2012
###########################################
---
{probe_asn: null, probe_cc: null, probe_ip: 127.0.0.1, software_name: ooniprobe, software_version: 0.0.7.1-alpha,
Startzeit: 1353601108.0, Testname: Basis-TCP-Test, Testversion: '0.1'}
...
---
Eingabe: null
Bericht:
Fehler: []
erhalten: ["Hallo Welt!\n\r"]
gesendet: ["Hallo Welt!\n\r"]
Testname: test_hello_world
test_started: 1353604708.705081
...
Beenden Sie dies mit weiteren Details
HTTP basierend Tests
HTTP-basierte Tests werden eine Unterklasse von sein ooni.templates.httpt.HTTPTest.
Es stellt Methoden bereit ooni.templates.httpt.HTTPTest.processResponseBody() und
ooni.templates.httpt.HTTPTest.processResponseHeaders() für die Interaktion mit der Antwort
Textkörper und Kopfzeilen.
Beispielsweise um einen HTTP-Test zu implementieren, der den sha256-Hash des Antworttexts zurückgibt
(beyogen auf nettests.examples.example_httpt):
aus dem ooni.utils-Importprotokoll
aus ooni.templates httpt importieren
aus hashlib import sha256
Klasse SHA256HTTPBodyTest(httpt.HTTPTest):
name = "ChecksumHTTPBodyTest"
Autor = „Aaron Gibson“
Version = 0.1
inputFile = ['url file', 'f', None,
'Liste der URLs, an die GET-Anfragen ausgeführt werden sollen']
erforderlichOptions = ['URL-Datei']
def test_http(self):
wenn Selbsteingabe:
url = self.input
return self.doRequest(url)
sonst:
raise Exception("Keine Eingabe angegeben")
def processResponseBody(self, body):
body_sha256sum = sha256(body).hexdigest()
self.report['checksum'] = body_sha256sum
Profil melden Format
###########################################
# OONI-Probebericht für ChecksumHTTPBodyTest-Test
# Do 6. Dezember 17:31:57 2012
###########################################
---
Optionen:
Kollektor: null
Hilfe: 0
Protokolldatei: null
PCAP-Datei: null
Berichtsdatei: null
Lebenslauf: 0
Unterargumente: [-f, Hosts]
Test: nettests/examples/example_http_checksum.py
probe_asn: null
probe_cc: null
probe_ip: 127.0.0.1
Softwarename: ooniprobe
Softwareversion: 0.0.7.1-Alpha
Startzeit: 1354786317.0
test_name: PrüfsummeHTTPBodyTest
test_version: 0.1
...
---
Eingang: http://www.google.com
Bericht:
Agent: Agent
checksum: d630fa2efd547d3656e349e96ff7af5496889dad959e8e29212af1ff843e7aa1
Anfragen:
- Anfrage:
Körper: null
Überschriften:
- - User-Agent
- - [Opera/9.00 (Windows NT 5.1; U; en), 'Opera 9.0, Windows XP']
Methode: GET
url: http://www.google.com
Antwort:
Körper: ' '
Code: 200
Überschriften:
- - X-XSS-Schutz
- [1; Modus=Block]
- - Set-Cookie
- ['PREF=ID=fada4216eb3684f9:FF=0:TM=1354800717:LM=1354800717:S=IT-2GCkNAocyXlVa;
expires=Sat, 06-Dec-2014 13:31:57 GMT; path=/; domain=.google.com', 'NID=66=KWaLbNQumuGuYf0HrWlGm54u9l-DKJwhFCMQXfhQPZM-qniRhmF6QRGXUKXb_8CIUuCOHnyoC5oAX5jWNrsfk-LLJLW530UiMp6hemTtDMh_e6GSiEB4GR3yOP_E0TCN;
läuft ab=Fr, 07 2013:13:31 GMT; path=/; domain=.google.com; HttpOnly']
- - Läuft ab
- ['-1']
- - Server
- [gws]
- - Verbindung
- [schließen]
- - Cache-Kontrolle
- ['privat, max-age=0']
- - Datum
- ['Do, 06. Dezember 2012 13:31:57 GMT']
- - P3P
- ['CP="Dies ist keine P3P-Richtlinie! Siehe http://www.google.com/support/accounts/bin/answer.py?hl=de&answer=151657
Für mehr Information."']
- - Inhaltstyp
- [text/html; Zeichensatz=UTF-8]
- - X-Frame-Optionen
- [SAMEORIGIN]
Sockenproxy: null
Testname: test_http
test_runtime: 0.08298492431640625
test_started: 1354800717.478403
...
DNS basierend Tests
DNS-basierte Tests werden eine Unterklasse von sein ooni.templates.dnst.DNSTest.
Es stellt Methoden bereit ooni.templates.dnst.DNSTest.performPTRLookup() und
ooni.templates.dnst.DNSTest.performALookup()
Zum Beispiel (entnommen aus nettests.examples.example_dnst):
aus ooni.templates.dnst DNSTest importieren
Klasse BeispielDNSTest(DNSTest):
def test_a_lookup(self):
def gotResult(result):
# Ergebnis ist ein Array, das alle Ergebnisse der A-Datensatzsuche enthält
Druckergebnis
d = self.performALookup('torproject.org', ('8.8.8.8', 53))
d.addCallback(gotResult)
zurück d
Profil melden Format
###########################################
# OONI-Probebericht für Basis-DNS-Testtest
# Do 6. Dezember 17:42:51 2012
###########################################
---
Optionen:
Kollektor: null
Hilfe: 0
Protokolldatei: null
PCAP-Datei: null
Berichtsdatei: null
Lebenslauf: 0
Unterargumente: []
Test: nettests/examples/example_dnst.py
probe_asn: null
probe_cc: null
probe_ip: 127.0.0.1
Softwarename: ooniprobe
Softwareversion: 0.0.7.1-Alpha
Startzeit: 1354786971.0
test_name: Basis-DNS-Test
test_version: 0.1
...
---
Eingabe: null
Bericht:
Anfragen:
- Adressen: [82.195.75.101, 86.59.30.40, 38.229.72.14, 38.229.72.16]
Antworten:
- [ ,
ttl=782>]
- [ ,
ttl=782>]
- [ ,
ttl=782>]
- [ ,
ttl=782>]
query: '[Query(''torproject.org'', 1, 1)]'
Abfragetyp: A
Resolver: [8.8.8.8, 53]
Testname: test_a_lookup
test_runtime: 0.028924942016601562
test_started: 1354801371.980114
...
Ein komplexeres Beispiel finden Sie unter: nettests.blocking.dnsconsistency
GLOSSAR
Hier fassen wir einige der für OONI typischen Fachsprache zusammen.
Test Referenzen: eine Reihe von Messungen, die an einem zu testenden Netzwerk durchgeführt werden und logisch sind
zusammen gruppiert
Profil melden: ist die Ausgabe eines Testlaufs, die alle für a erforderlichen Informationen enthält
Forscher, um zu beurteilen, was das Ergebnis eines Tests ist.
Yamlooni: Das Format, das wir für Berichte verwenden, das auf YAML basiert.
Eingang: Was als Eingabe an einen Testfall übergeben wird, um eine Messung durchzuführen.
Nutzen Sie ooniprobe online über die Dienste von onworks.net