1

Тема: AHK: Ограничение использования трафика силами АНК

Здраствуйте!
Имеется дома АДСЛ интернет через модем D-Link 2500U (не BRUТ). Он распределяется через свитч Planet FSD-803 на 2 компьютера и спутниковый ТВ тюнер.
Последнему для работы практически ничего не надо (постоянный доступ в интернет на минимальной скорости, примерно, в 2-3 кб/с).

Но проблема доступа интернета образовалась у меня. С недавних пор мой отец освоил торрент. Теперь скоростью закачки в программе он манипулирует моим доступом в интернет. uTorrent 1.7 съедает весь трафик до такой степени, что я не могу даже загрузить страницу в интернете. Меня это в последнее время оооочень стало напрягать.

Поэтому я хочу спросить у Вас, можно ли силами АНК создать скрипт, который мог бы на определенном компьютере ограничивать (по NAT IP или определенному порту) закачиваемый и отдаваемый трафик до необходимых мне значений? Если да, то как это можно организовать? Дайте, пожалуйста, ссылки на необходимые примеры.

Заранее благодарен!

Я не Мастер, я только учусь...

2

Re: AHK: Ограничение использования трафика силами АНК

Через AutoHotkey наверное никак.
Но мне кажется у Вас достаточно продвинутый маршрутизатор, чтобы сделать это прямо на нём. Зайдите через web-интерфейс в раздел ADVANCED, выберите пункт меню Traffic Management. Перед Вами появится  Bandwidth Control List For Host Zone (настройка минимальной полосы пропускания для входящего и исходящего трафика для конкретных компьютеров).
Я с этой железкой не знаком, поэтому меню может отличаться.

3

Re: AHK: Ограничение использования трафика силами АНК

Увы, мой свитч не имеет поддержки web-интерфейса. Посему и требуется сторонний софт. Но я слишком требователен к использованному софту для достижения необходимой цели.
Думал создать маленькую программу, которая не имеет интерфейса, не висит в трее и в видимых процессах Диспетчера задач, а её настройки задаются в файле конфига. Достижение этой цели отягощает и то, что кроме скриптового языка АНК я ничем не владею. Думал, его силами можно справится.
Может еще знает способ решения данной проблемы?

Я не Мастер, я только учусь...

4

Re: AHK: Ограничение использования трафика силами АНК

2 khaker: Ммм. Не совсем понял. Вам хочется ограничить скорость отцу без его на то согласия ? Если да, то можно в самом торрент клиенте поставить ограничение скорости на приём. А если без его согласия, то IMHO - это некорректное поведение. Но если всё же так - то делать для этого скрипт, особого смысла нет. Проще всё таки использовать готовые программные решения. Но опять же, IMHO - это извращение.

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

5

Re: AHK: Ограничение использования трафика силами АНК

khaker пишет:

Увы, мой свитч...

При чём тут свитч? Если Вы ничего не путаете, DSL-2500U является ADSL-маршрутизатором.

6 (изменено: khaker, 2011-03-14 18:41:41)

Re: AHK: Ограничение использования трафика силами АНК

Функция ограничения скорости в модеме не реализована.

Такой ответ мне дали на форуме D-link'a: D-Link • Просмотр темы - D-Link 2500U. Вопросы по настройке роутера.

Поэтому мне остается лишь программно ограничить трафик на компьютере. Но устанавливать громоздкие программы вроде TMeter, Trafic Inspector и другие нет смысла.
Можно ли такую программу написать на Питоне?

Я не Мастер, я только учусь...

7

Re: AHK: Ограничение использования трафика силами АНК

Ссылка в предыдущем посте оформлена тэгом «url».

8

Re: AHK: Ограничение использования трафика силами АНК

Про Питон лучше спросить на Портале Python-программистов.

9

Re: AHK: Ограничение использования трафика силами АНК

Мда, действительно:

Если в Вашей локальной сети находятся несколько компьютеров и необходимо каждому хосту выделить гарантированную полосу пропускания Downstream потока - данный функционал Вам сможет обеспечить только DSL-G804V, который путем создания соответствующих политик может делить полосу пропускания между несколькими хостами.

Устройства U-серии поддерживают только приоретизацию исходящего (Upstream) трафика, особенности использования которой я описал выше.
За подробностями работы различных реализаций QoS обращайтесь к описанию соответствующих механизмов работы и стандартов.

Тогда присоединяюсь к Xameleon. Почему нельзя настроить uTorrent 1.7 ? Почему нельзя использовать громоздкое ПО? Разве проще написать отдельную программу?

10 (изменено: predator, 2011-03-15 06:43:37)

Re: AHK: Ограничение использования трафика силами АНК

В данной и похожих ситуациях я использую NetLimiter 3.0 Программа шейпер. Можно настроить скорость загрузки и отправки информации для каждого отдельного приложения или соединения.
- ограничение скорости трафика для каждого приложения в отдельности;
- позволяет разделить трафик на внешний (интернет) и локальный (внутренняя сеть);
- поддержка х64.
Функционал данной программы не перегружен - все по минимуму...:)

11

Re: AHK: Ограничение использования трафика силами АНК

Отец давно подрывает мой доступ в интернет не ограниченной закачкой клиента. И где находятся опции управления скорости он знает.
Громоздкое ПО будет легко заметно опытному глазу. К счастью отец слабо разбирается в компьютерном ПО, но те знакомые, которые по каждому его зову приходят настраивать ему компьютер с легкостью, я думаю, обнаружат неладное.
Разве много требуется программного кода и "извращения" для ограничения всего входящего/исходящего трафика на ПК без графического интерфейса, трей-иконки и скрытым процессом? Мне кажется, что нет. Для опытного человека написание подобной программы займет совсем немного времени.

NetLimiter 3.0 достаточно много весит. А его предшественник в виде NetLimiter 1.3 не умеет "прятаться" с глаз долой и представляется легкой добычей для опытных пользователей. Но функционал программы мне очень понравился.

Сегодня, пока отец находился на работе, я реализовал свой коварный план. Установил BWMeter 2.6.4 rus + patch. Более ранней версии (выше версии 2.0, т.к. в неё впервые добавили шейпер) мне не удалось найти в сети. Да, к тому же даже в этой ранней версии программы включен лишний для меня функционал.
Но и тут не все так гладко. Я я так и не смог запустить программу как службу ОС, что бы не светиться процессом в Диспетчере задач. Пришлось программу с файлами закинуть в C:\Windows\system32\ и переименовать в ctfmon.exe. Теперь он не бросается в глаза в Диспетчере задач. Пытался я с помощью Windows Resourse Kit (а точнее с помощью модулей instsrv.exe и srvany.exe) из приложения сделать сервис, но до конца мне так и не удалось заставить запускаться таким образом программу.
Радует то, что программе весит всего менее 1го мб, а инсталл и того 300+кб. А так же можно спрятать иконку с трея и выключить окно с графиком. Жаль лишь то, что программа имеет закрытый исходный код.

На этом мои поиски не останавливаются. Я буду и дальше думать в этом направлении.

Я не Мастер, я только учусь...

12 (изменено: predator, 2011-03-15 20:40:08)

Re: AHK: Ограничение использования трафика силами АНК

Теперь ситуация мне предельно понятна. Но, увы решения она как такового не имеет. Любое решение, которое будет выполнено для ограничения трафика "папиного компьютера" будет деактивировано, Вы проницательно заметили: "...но те знакомые, которые по каждому его зову приходят настраивать ему компьютер с легкостью, я думаю, обнаружат неладное."
Увы, для начала надо в реальном мире обладать властью включать, либо выключать... а потом уже на программном уровне настраивать свои предпочтения.

Удачи в Вашем деле...

13 (изменено: Xameleon, 2011-03-15 22:58:17)

Re: AHK: Ограничение использования трафика силами АНК

Господа, Вы всё ещё "мусолите" эту тему ?

2 khaker:

Разве много требуется программного кода и "извращения" для ограничения всего входящего/исходящего трафика на ПК без графического интерфейса, трей-иконки и скрытым процессом? Мне кажется, что нет. Для опытного человека написание подобной программы займет совсем немного времени.

Вы уверены, что представляете о чём говорите ? На мой взгляд, Вы очень далеки от понимания какими способами можно регулировать трафик. И сам я не претендую на определение "знаю всё". Но как минимум надо понять, что для того, чтобы что то ограничивать, надо это что то получить и пропустить через "себя". Почти так же как с водой в трубах. Для того чтобы регулировать поток в трубе, нужен кран либо какое то другое подобное устройство. И выражаясь яснее - вода должна протекать через кран/клапан, чтобы можно было что то регулировать.

Когда же Вы пишите

для ограничения всего входящего/исходящего трафика на ПК

Для меня это звучит как - "Как бы мне во всём доме силой мысли перекрыть воду."

Возвращаясь от теории о том как "космические корабли бороздят просторы безграничного космоса" и переходя к сетевым технологиям, то Вам нужно приложение, которое будет пропускать через себя трафик по портам. Т.е получив на одном порту данные, транслировать их на другой порт. При этом не нагружая комп до 100% из-за перегрузки и обеспечивая нормальную связь. Вообще то для этого пишут драйверы. А уж как Вы выражаетесь "для ограничения всего входящего/исходящего трафика" надо писать ОЧЕНЬ хороший драйвер. Можно конечно попробывать собрать код на винсоках или AHK, но извините, Вы хотите получить этот код за бесплатно. А работа при этом не на один день и даже не на неделю. (ну на мой взгляд). И при этом ещё надо поизучать не хилый талмуд о TCP. Ну даже если и не драйвер, то как минимум - мультитредовое (многопоточное) приложение к примеру на Сишнике. чтобы обрабатывать сокеты асинхронно и их события.

Ко всему вы ещё хотите, чтоб этого "трансляции" / "перехвата" не было видно в системе. Ну РУТКИТ чистой воды. Троянец !

В кратце: khaker, поверьте мне на слово - джинов нет и золотых рыбок, исполняющих желания, тоже ) !

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

14

Re: AHK: Ограничение использования трафика силами АНК

Так чем все-таки не устраивает BWMeter?

15

Re: AHK: Ограничение использования трафика силами АНК

У меня схожая проблема, но без шпионских игр с прятками: 2 машины объединены роутером, раздающим интернет и uTorrent v2.2, забивающий весь канал.
Решил с помощью AHK, но не путём глобального регулирования трафика, а изменением максимальной скорости скачивания в самом торренте.
Идею взял достаточно давно, возможно на этом форуме, возможно на англоязычном http://www.autohotkey.com/. Так же использовал AHK: Доступ к памяти других процессов.

;Скрипт запускается на той машине, на которой необходимо ограничить скорость торрента.
;По сети проверяет .ini-файл, который создаётся и редактируется в ручную на другой машине
;и имеет вид:
;[main] 
;Power=1 - флаг включения скрипта.
;[Torrent]
;Speed=500 - скорость в килобайтах.


#persistent
#NoTrayIcon
#singleinstance force
#NoEnv
SetTitleMatchMode 1
INIAdress =\\loolz\диск С на ноуте\RemoteControl.ini ;адрес .ini-файла
ProcessName = uTorrent.exe ;название процесса
WriteAddress = 0x004C60C4 ;адрес ограничения скорости в торренте
Size = 8 ;размер узнаётся так же, как и адрес 

;немного допиленная функция из "Коллекции скриптов и идей"
WriteVar(WriteAddress,ID,Size,Data) 
{
Address := WriteAddress           ; Адрес, куда писать.
Data := Data                      ; Что писать.
Size := Size                      ; Сколько байт писать.

VarSetCapacity(Buf, Size, 0)      ; Буфер, для записываемых данных.

NumPut(Data, Buf, 0, "UInt")      ; Данные - в буфер.

PROCESS_VM_WRITE = 0x20           ; Права на процесс.
PROCESS_VM_OPERATION = 0x8

PID := ID

hProcess := DllCall("OpenProcess", "UInt", PROCESS_VM_WRITE | PROCESS_VM_OPERATION
                                 , "Int",  False
                                 , "UInt", PID)
If(!hProcess) {
  MsgBox, Не удалось открыть процесс.
  ExitApp
}

Ret := DllCall("WriteProcessMemory", "UInt", hProcess
                                   , "UInt", Address
                                   , "UInt", &Buf
                                   , "UInt", Size
                                   , "UInt", 0)

DllCall("CloseHandle", "UInt", hProcess) ; Освобождение хэндла процесса.

If(!Ret) {
  MsgBox, Не удалось записать.
  ExitApp
}
}

;тело скрипта
SetTimer, FileCheck, 1000 ;раз в секунду считывает содержимое .ini-файла

FileCheck:
{
IniRead, Power, %INIAdress%, main, Power, 0
If ( Power = 0 ) ;если флаг включения не стоит
    {
        return ; выходим
    }
IniRead, TorrentSpeed, %INIAdress%, Torrent, Speed, 0
Process, Exist, %ProcessName% ;проверяем наличие торрента
if ErrorLevel > 0
    {
    ID := ErrorLevel ;записываем его PID 
    WriteVar(WriteAddress,ID,Size,TorrentSpeed)
    }
}
return

Для того, чтобы скрипт работал, необходим настроенный доступ к файлам по сети. На машине 1 создаётся .ini-файл вида:

[main] 
Power=1 ; флаг включения скрипта.
[Torrent]
Speed=500 ; скорость в килобайтах (0 для отключения ограничения).

На машине 2 запускается скрипт и регулирует скорость торрента.
В ручную задаём скорость в .ini-файле, скрипт считывает значение и соответственно меняет скорость у торрента. Если нет возможности прочесть .ini-файл, по умолчанию ограничение снимается. Стоит ответить, что, возможно, в других версиях uTorrent адрес ограничения скорости будет изменён. Определяется он элементарно с помощью программы ArtMoney, переменная Size указана там же.