hufrea / byedpi

Bypass DPI
MIT License
1.72k stars 111 forks source link

Use memory instead of temp files for (fake) packets, please #102

Open EvgenKo423 opened 3 months ago

EvgenKo423 commented 3 months ago

Don't use the temp files for packets, please, it's bad for performance. On Windows temp files are just files and not mapped to memory as on Linux. It should be possible to use memory buffers instead, as you do with --split.


Пожалуйста не используйте временные файлы для пакетов, это очень не оптимально. В Windows временные файлы – просто файлы и не маппятся на память как в Linux. Это должно быть возможно реализовать с использованием буферов в памяти, как вы делаете со --split.

hufrea commented 3 months ago

Cache bevavior

Specifying the FILE_ATTRIBUTE_TEMPORARY attribute causes file systems to avoid writing data back to mass storage if sufficient cache memory is available, because an application deletes a temporary file after a handle is closed. In that case, the system can entirely avoid writing the data.

как вы делаете со --split

Обычный send скопирует буфер в пространство ядра (а значит их уже не изменить, отправку отменить нельзя), в таком случае ОС гарантированно доставит фейк, а это сломает протокол. Тут я объяснял как это работает.

ropucyka commented 3 months ago

Можно добавить возможность указать путь для временных файлов, чтобы ByeDPI работала с ними на RAM диске например. [здесь смайлик клоуна] но похоже на хорошую идею.

EvgenKo423 commented 3 months ago

@hufrea Крутяк, спасибо за пояснения. Про --split и --disorder я читал у bol-van'а, на уровне прокси это конечно дикие костыли...

В документации по TransmitFile ещё говорится:

Workstation and client versions of Windows optimize the TransmitFile function for minimum memory and resource utilization by limiting the number of concurrent TransmitFile operations allowed on the system to a maximum of two. On Windows Vista, Windows XP, Windows 2000 Professional, and Windows NT Workstation 3.51 and later only two outstanding TransmitFile requests are handled simultaneously; the third request will wait until one of the previous requests is completed.

Так что у любителей открывать несколько вкладок в фоне она может блокироваться.

@ropucyka Не работал с RAM-дисками, но можно наверно просто слинковать на него Temp на уровне файловой системы. ;-)