GoodbyeDPI icon indicating copy to clipboard operation
GoodbyeDPI copied to clipboard

PowerTunnel can circumvent ISP torrent throttling but not goodbyeDPI?

Open AlawamiAZ opened this issue 2 years ago • 7 comments

Operating system / операционная система

Windows 11 22000.493

Running as service / Запуск программы как сервис

I run it as a regular program / Запускаю программу обычным образом

Describe the issue / Опишите проблему

Although PowerTunnel is based on goodbyeDPI, I was surprised that only PowerTunnel seems to circumvent my ISP's bittorrent throttling. goodbyeDPI can unlock all blcoked website so it works but it can't do anything to bittorrent throttling. I tried all presets (1-6) all of them had no effect on bittorrent throttling.

Are there any paramaters that I can try changing to make it able to circumvent my ISPs throttling just like PowerTunnel does. I'm using qBittorrent. BTW, PowerTunnel has an option called "https: full chunking mode" that when disabled it doesn't circumvent the throttling. So is there an equivalent to powertunnel's "https: full chunking mode" in goodbyeDPI?

edit: I think this is the relevant code for full chunking from power tunnel:

    public static Collection<byte[]> _powerTunnelChunk(ByteBuf buf, int chunkSize, boolean fullChunking) {
        byte[] bytes = new byte[buf.readableBytes()];
        buf.readBytes(bytes);
        int len = bytes.length;
        Collection<byte[]> byteChunks = new ArrayList<>();
        if(fullChunking) {
            // Full Chunking
            int i = 0;
            while (i < len) {
                byteChunks.add(Arrays.copyOfRange(bytes, i, i += chunkSize));
            }
        } else {
            byteChunks.add(Arrays.copyOfRange(bytes, 0, chunkSize));
            byteChunks.add(Arrays.copyOfRange(bytes, chunkSize, len));
        }
        return byteChunks;
    }

Thanks for the great work on this project.

Additional information / Дополнительная информация

No response

AlawamiAZ avatar Mar 06 '22 19:03 AlawamiAZ

GoodbyeDPI applies circumvention techniques only on port 80 and 443 by default, and additional ports could be added with --port option, but only for each individual port. I have plans to apply GoodbyeDPI to every connection of individual programs/processes, but that's not implemented yet.

ValdikSS avatar Mar 08 '22 14:03 ValdikSS

Oh great, thanks for clarifiation.. from my understanding -w apply goodbyeDPI on all ports?

Are there any plans to implement something similar to "full chunking mode" of powertunnel? as it seems to be the crucial part of powertunnel that confuses my ISPs throttling mechanism.. unfortunately i'm not familiar with c language so I wasn't able to play around much with goodbyeDPI code.

AlawamiAZ avatar Mar 08 '22 20:03 AlawamiAZ

from my understanding -w apply goodbyeDPI on all ports?

No, it only starts to search for HTTP requests on all additional ports passed with --port.

Are there any plans to implement something similar to "full chunking mode" of powertunnel?

I don't know what is full chunking mode, but this may be already implemented by shrinking the window size. I'll think how it could be implemented.

ValdikSS avatar Mar 12 '22 21:03 ValdikSS

Hope you are having a nice day valdik. do you know why goodbyedpi crashes after few seconds of working when compiled with edited line 288 to WinDivertOpen("true", 0, 0, 0) in goobyedpi.c ? i was trying to make it capture all traffic.. it works for first few seconds then crashes with this edit.. unfortuantly i'm not versed in C language at all so i've been stepping on a minefield :(

AlawamiAZ avatar Aug 18 '22 12:08 AlawamiAZ

Since modification of the TCP header, which includes Window Size, is impossible without administrator rights and without access to the low-level network, PowerTunnel, upon receiving the packet data, manually splits them into two packets - the first from 0 to N and the second from N to the end, which was recently implemented in GoodbyeDPI as Native Fragmentation, opposed to setting Window Size. What is called "Full Chunking Mode" splits the packet not into 2, but into (packet length / N), where N is the fragment (or chunk) size. I didn't think it had any practical use, this option was never enabled by default and I thought about removing it altogether.

goodbyedpi crashes after few seconds of working when compiled with edited line 288 to WinDivertOpen("true", 0, 0, 0) in goobyedpi.c ? i was trying to make it capture all traffic.. it works for first few seconds then crashes with this edit..

~~Your filter is wrong and does not comply with WinDivert filter language.~~ Also, after a very cursory look at the filter, it seems to me that the program only listens for packets that meet certain conditions (the TCP SYN/ACK flags). Perhaps you can achieve what you want by removing the check for ports in FILTER_STRING_TEMPLATE and FILTER_PASSIVE_STRING_TEMPLATE.

krlvm avatar Aug 18 '22 13:08 krlvm

IGNORE THIS REPLY.

AlawamiAZ avatar Aug 21 '22 21:08 AlawamiAZ

I think you should look into lines 1291 and 1296 and rewrite send_native_fragment (or create a new option for that) as a loop which sends packets each sized N (except the last one) like ~~this, but without using arrays and with sending packets instantly (it's something I should have done to save memory)~~ this, but @ValdikSS knows better.

krlvm avatar Aug 21 '22 22:08 krlvm