Wie lasse ich eine Anwendung meine eth0: 0-Schnittstelle verwenden?

5235
Abhijeet Rastogi

Wie in curL haben wir eine Bindeadresse-Option, die wir über eine bestimmte Schnittstelle herunterladen können.

Zum Beispiel zum Herunterladen von eth0: 0 verwenden wir $ curl --interface eth0: 0 http://www.google.com

Auf diese Weise besteht mein Ziel darin, Dateien herunterzuladen, aber da curL kein segmentiertes Herunterladen unterstützt, möchte ich es nicht verwenden. Wir haben eine Geschwindigkeitsbeschränkung für jede IP. Um diese Einschränkung zu überwinden, kann ich viele Schnittstellen wie diese starten und von jeder Schnittstelle einen Teil der Datei herunterladen.

Wie mache ich einen anderen Download-Manager wie AXEL, um sich an eine bestimmte Adresse zu binden? Ich frage nach einer Idee wie das Ändern von Variablen in der BASH-Shell, sodass sich die gesamte Shell an eine bestimmte Schnittstelle bindet, sagen wir eth0: 1 ...

1

3 Antworten auf die Frage

3
quack quixote

Was Sie wirklich wollen, ist eine Anwendung, die eine Datei in Teilen von verschiedenen Schnittstellen herunterladen und am Ende zusammenfügen kann. Wenn Sie zum Beispiel wussten, dass Ihre Datei 100 MB groß ist und Sie Stücke von etwa 10 MB beschaffen möchten, möchten Sie Folgendes tun:

1. start a download of bytes 0..10000000 on eth0, saving to filename.part1 2. start a download of bytes 10000001..20000000 on eth0:0, saving to `filename.part2 3. start a download of bytes 20000001..30000000 on eth0:1, saving to filename.part3 ... N-1. wait for all downloads to complete N. join all filename.part* together to get filename.complete 

Ich wgetkann eine teilweise heruntergeladene Datei wieder aufnehmen. Ich bin mir ziemlich sicher, dass es funktioniert, indem Sie bis zum Ende der vorhandenen Datei lesen und dann die Datei ab dem nächsten Byte vom Server anfordern.

Es sieht so aus, als curlunterstütze es partielle Downloads mit dieser --range <byterange>Option. So könnten Sie die obigen Schritte wie folgt schreiben:

1. curl --interface eth0 --range 0,10000000 http://some.server.com/bigfile -o bigfile.part1 2. curl --interface eth0:0 --range 10000001,20000000 http://some.server.com/bigfile -o bigfile.part2 ...  N. cat bigfile.part* > bigfile 

Vorsichtsmaßnahmen: Das funktioniert nicht immer. Wenn auf dem HTTP / 1.1-Server die Funktion zum teilweisen Download nicht aktiviert ist, wird bei jedem Aufruf die gesamte Datei angezeigt. Weitere man curlInformationen zu dieser --rangeOption finden Sie hier.

Bearbeiten: feste Bytebereiche in Beispielen

1
Joe Internet

Hier ist ein Blogbeitrag zum Teilen eines Downloads mit curl. Ich habe es unter Windows versucht, konnte es aber nicht zum Laufen bringen, aber Sie haben vielleicht Erfolg mit Linux.

-1
kmarsh

Machen Sie eth0: 0 zur Standardroute anstelle von eth0. Der Befehl:

netstat -rn 

zeigt Ihnen, was Ihre aktuelle Standardoberfläche ist. Wenn es nicht eth0: 0 ist, löschen Sie es mit

route delete 0.0.0.0 

dann mit etwas hinzufügen

route add default eth0:0 
Ich möchte alle Schnittstellen gleichzeitig nutzen. Wie in einem Terminal verwende ich eth0: 0 und in dem anderen setze ich eth0: 1. Nun, bekommen Sie es, was ich eigentlich vorhabe. Abhijeet Rastogi vor 14 Jahren 1
Sie haben verschiedene Terminals, aber nur einen Kernel. Der Kernel verwendet einen Satz von Regeln für das Routing, unabhängig davon, aus welcher Anwendung der Datenverkehr stammt. Wenn Sie statische Routen für verschiedene Subnetze oder einzelne Hosts einrichten, kann der Kernel den Datenverkehr durch verschiedene Ports leiten, um dorthin zu gelangen. Oder Sie können Xen einrichten, wodurch Sie eine völlig neue IP-Adresse, einen neuen Portbereich und eine neue Routing-Tabelle erhalten. kmarsh vor 14 Jahren 1