1

Как и в curL, у нас есть опция адреса привязки, которую мы можем загрузить с помощью определенного интерфейса.

Например, для загрузки из eth0:0 мы используем $ curl --interface eth0:0 http://www.google.com

Таким образом, моя цель - скачивать файлы, но поскольку curL не поддерживает сегментированную загрузку, я не хочу его использовать. У нас есть ограничение скорости на каждом IP. Чтобы преодолеть это ограничение, я могу запустить много подобных интерфейсов и загрузить некоторую часть файла с каждого интерфейса.

Как сделать так, чтобы любой другой менеджер загрузок, например AXEL, привязывался к определенному адресу? Я спрашиваю о некоторой идее, такой как изменение переменных в оболочке BASH, чтобы вся оболочка связывалась с определенным интерфейсом, скажем, eth0:1 ...

3 ответа3

3

Похоже, что вы действительно хотите, это приложение, которое может загрузить файл по частям из разных интерфейсов и объединить их в конце. Например, если вы знали, что размер вашего файла составляет 100 МБ, и вы хотели получить фрагменты размером примерно 10 МБ, вам нужно сделать следующее:

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

Я знаю, что wget может возобновить частично загруженный файл. Я уверен, что это работает, читая до конца существующего файла и затем запрашивая файл, начиная со следующего байта, с сервера.

Похоже, что curl поддерживает частичную загрузку, например, с помощью параметра --range <byterange> . Таким образом, вы можете написать приведенные выше шаги следующим образом:

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

Предостережения: это не всегда работает; если на сервере HTTP/1.1 не включена функция частичной загрузки, вы получите полный файл при каждом вызове. Смотрите man curl для подробностей о параметре --range .

Редактировать: фиксированные байтовые диапазоны в примерах

1

Вот сообщение в блоге о разделении загрузки с помощью curl. Я пробовал в Windows, но не смог заставить его работать, но у вас может быть успех с Linux.

-1

Сделайте eth0:0 маршрутом по умолчанию вместо eth0. Команда:

netstat -rn

покажет вам ваш текущий интерфейс по умолчанию. Если это не eth0:0, удалите его с помощью

route delete 0.0.0.0

затем добавить что-то вроде

route add default eth0:0

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .