Skip to content

Instantly share code, notes, and snippets.

@flostellbrink
Last active April 25, 2024 01:09
Show Gist options
  • Save flostellbrink/2d1dc15a0133a0833934459961e8efe8 to your computer and use it in GitHub Desktop.
Save flostellbrink/2d1dc15a0133a0833934459961e8efe8 to your computer and use it in GitHub Desktop.
Script to get new IP addresses in JDownloader by reconnecting Private Internet Access

PIA JDownloader Reconnect

Windows

Script to get new IP addresses in JDownloader by reconnecting Private Internet Access.

  1. Go to Settings -> Reconnect
  2. Tick all three checkboxes.
  3. Set method to External Batch Reconnect
  4. Set interpreter to cmd /c
  5. Set script to
piactl.exe background enable
timeout 3
piactl.exe disconnect
piactl.exe connect
  1. Set application folder to C:\Program Files\Private Internet Access

Mac & Linux

  1. Go to Settings -> Reconnect
  2. Tick all three checkboxes.
  3. Set method to External Batch Reconnect
  4. Set interpreter to /bin/bash -c
  5. Set script to
./piactl background enable
./piactl disconnect
./piactl connect
  1. Set application folder to /usr/local/bin
@Alistair1231
Copy link

Is broken for me.
this works though:

piactl.exe background enable
timeout 3
piactl.exe disconnect
piactl.exe connect

@flostellbrink
Copy link
Author

Thanks @Alistair1231! That's a lot cleaner.
Updated the gist with your solution 👍

@aeonsavvy
Copy link

Hey thanks this worked like a charm, helped resume mega dl when nothing else was working

@bunitdown
Copy link

how can I use the script on a Mac?

@Alistair1231
Copy link

how can I use the script on a Mac?

According to pia

On Mac and Linux, piactl is symlinked into /usr/local/bin at installation time if possible, so normally piactl is sufficient from a command line.

so it should suffice to remove the .exe from piactl.exe

Instead of timeout 3 I would try sleep 3. I don't use Mac, but only Linux and Windows. I don't know what the default shell is, but if you have issues, maybe try explicitly calling sleep via bash: something like /bin/bash -c "sleep 3"

@flostellbrink
Copy link
Author

I've updated the gist with instruction that work on my MacBook.
@bunitdown Let me know if these work for you!

@Auncaughbove17 Are those close to what you have for linux? Is the sleep working or even necessary for you there?

@Alistair1231
Copy link

Alistair1231 commented Mar 26, 2023

Are those close to what you have for linux?

I don't use this script on Linux, but it should work the same as on Mac.

Is the sleep working or even necessary for you there?

I copied the timeout part from the original script, iirc. If it works without timeout for you on Mac, chances are it's going to be the same on Win/Linux

I doubt the implementation of piactl will be very different on the various OSes.
I use nordvpn these days so I also can't really test it 😄

@maravento
Copy link

maravento commented Oct 27, 2023

Works for ubuntu 22.04.
pia

and proton vpn? thanks.

@Alistair1231
Copy link

Alistair1231 commented Oct 28, 2023

and proton vpn? thanks.

I would check if there is a cli client for Proton VPN. Alternatively you could try downloading OpenVPN / Wireguard configs from Proton VPN and use the OpenVPN / WIreguard cli. That approach should be applicable irrespective of the OS. However it might be, that the OpenVPN configs are one for each server (and therefore IP), so you might need to do something like a script with a list of profiles where you randomly select one each time.

https://protonvpn.com/support/vpn-config-download/

I just gave up on that stuff a while back and use services like real-debrid and alldebrid now. Faster speeds and no IP refreshing all the time. If you are willing to spend ~3€ per month just go with that.

@lurkerman837
Copy link

New PIA update seems to have broken this, not sure why. Can anybody assist? This script was awesome.

@bigrober666
Copy link

Hallo,
could anyone share a script, or help to create auto reconnect with cyberghost?
Would much appreciate. Thanks in advance

@victoronlyarg
Copy link

Hi, is it possible to do this with Windscribe?
I use windows. I have tried to do it by simply substituting the name of the .exe. All it does is open the program but does not change the ip.

@farOverNinethousand
Copy link

@victoronlyarg
Someone shared a supposedly working Windows batch script for Windscribe CLI here: https://www.reddit.com/r/Windscribe/comments/y9hdop/command_line/

@lurkerman837
Copy link

Is broken for me. this works though:

piactl.exe background enable
timeout 3
piactl.exe disconnect
piactl.exe connect

Unfortunately this script still just isn't working for me. It worked perfectly fine before. It disconnects the vpn and does not reconnect back on its own.

This script was a game changer and was very useful for me. I don't really understand why it doesn't work.

I manually go into c:/program files/pia > open cmd > run the commands for disconect and connect manually, and they work. For whatever reason, the Jdownloader script doesn't work properly.

I have the correct options checked and the path is set correctly.

Any ideas?

@0x6E75
Copy link

0x6E75 commented Mar 3, 2024

Maybe try this in a batch file inside your PIA folder, triggering it with JDownloader2's "External Tool Reconnect" reconnect method.

@echo off
REM Reconnects PrivateInternetAccess (PIA) VPN.
REM - Waits for PIA to disconnect, then keeps trying to reconnect until PIA is connected.
REM - Plz be gentle, I suck at batch :P - nu
SET vStep=1

piactl.exe background enable
    sleep 1

piactl.exe disconnect
    ECHO Waiting for PIA to disconnect...
    sleep 1

REM This while loop waits for connection states
:check_connection
    REM Check connection state
    FOR /F %%i IN ('piactl.exe get connectionstate') DO SET vState=%%i
    ECHO State=%vState%

    REM Step #1: Keeping checking to see if we are disconnected yet.
    IF %vStep% == 1 (
        IF "%vState%" == "Disconnected" (
            ECHO PIA is now disconnected.
            SET vStep=2
        )
        GOTO :check_connection
    )

    REM Step #2: Keep checking to see if we have reconnected yet.
    IF %vStep% == 2 (
        IF "%vState%" == "Connected" (
            ECHO PIA has reconnected.
            GOTO :end
        )
        ECHO Attempting to reconnect...
        piactl.exe connect
        sleep 3
        GOTO :check_connection
    )

:end

If I paste this script into JDownloader2>Settings>Reconnect>Reconnect Method>"External Batch Reconnect" and set "Start in" to "C:\Program Files\Private Internet Access" then this seems to work better, but then connecting still gets stuck about 10% of the time. Folder/app permissions don't seem to matter.

If switch Reconnect Method to "External Tool Reconnect", save this exact same script into a batch file inside my PIA direcotry, then set Reconnect Method > Command > "C:\Program Files\Private Internet Access\reconnect.bat", the reconnection seems more reliable for some reason.

--
For noobs: How-to save this code into a batch file inside your PIA directory on Windows 11

  • Enable permission to add files to the PIA directory: In Windows 11, start File Explorer, go to "C:\Program Files", right-click on the "Private Internet Access" directory, then select "Properties". Go to the Security tab, find the top area labeled "Group or user names:", scroll down to "Users", then click "Edit...". In the new window that pops up, again find the top area labeled "Group or user names:", scroll down to "Users", then in the bottom area check the Allow box next to "Full control". Click Apply, then OK. Then OK again.
  • Create a new empty bat file: Now open the "C:\Program Files\Private Internet Access" directory, Right-click > New > Text Document. Rename the file from "New Text Document.txt" to "reconnect.bat". NOTE: The file's icon should change to a Command Prompt icon with gears on it. If the icon still looks like a notepad then you should google how to turn on file extensions and make the file is not named something like "reconnect.bat.txt" on accident.
  • Save our script into the empty bat file: Right-click "reconnect.bat" and select "Edit in Notepad". Copy the code above, paste into "reconnect.bat" and then save.
  • Set up JDownloader: In JDownloader2 (mine is the latest update as-of March 3, 2024), go to the Settings tab, then Settings. Find "Reconnect" on the left. Set "Reconnect Method" to "External Tool Reconnect", "Command (use absolute directory paths)" to "C:\Program Files\Private Internet Access\reconnect.bat", and make sure "Parameter (1 parameter per line)" is empty. You can now close the settings window.
  • Test your connection by clicking the reconnect button. Cross your fingers.

@EamonHendricks
Copy link

EamonHendricks commented Mar 5, 2024

Thank you so much for the link. You made my day. I also want to know it and I am glad I found your post. While searching for it online, I also found https://ukwritings.com/write-my-dissertation website link where I found an essay writer who will write my dissertation for me.

@gigovx
Copy link

gigovx commented Mar 9, 2024

Thought I'd add to this as I needed new IP address/location to download multiple files and simply reconnecting to the same VPN location didn't rotate my IP address;

setlocal enabledelayedexpansion

:: Get list of PIA regions into a temporary file
piactl get regions > c:\tmp_regions.txt

:: Initialize variables
set /a count=0
set /a randomLine=0

:: Count how many lines (regions) are in the file
for /F %%A in ('type c:\tmp_regions.txt ^| find /c /v ""') do set /a count=%%A

:: Generate a random number between 1 and the count of regions
set /a randomLine=%random% %% count + 1

:: Initialize loop variables
set /a currentLine=0

:: Read through the file until the random line is reached
for /F "tokens=*" %%A in (c:\tmp_regions.txt) do (
    set /a currentLine+=1
    if !currentLine!==!randomLine! (
        set RANDOMREGION=%%A
        goto connectVPN
    )
)

:connectVPN
:: Enable background connection
piactl background enable

:: Debug: Show the chosen region
echo Chosen region: !RANDOMREGION!

:: Trim and set the region to the randomly selected one
:: The next line is crucial: It removes any potential carriage return in the variable
:: which can be introduced by the way Windows handles text files
for /f "delims=" %%i in ("!RANDOMREGION!") do set RANDOMREGION=%%i

piactl set region !RANDOMREGION!

:: Connect to PIA
piactl connect

:: Clean up
del tmp_regions.txt

echo Connected to region: !RANDOMREGION!
endlocal

This script creates a temporary text file in root of the c drive (due to permissions needed to write it in the PIA folder) that outputs all the locations available to use, it then reads one of the locations randomly and connects you to one.

HOWEVER, when I tried to do this with Jdownloaders 'External Batch Reconnect' option it failed even though when running it as a batch script it works, for some reason it fails to use a random location and reconnects to the same location each time, so instead I copied the above into a bat file inside the PAI folder called 'random' and use Jdownloaders 'External Tool Reconnect' and then select the batch file in the PIA folder and it works! Annoyingly it does run the batch over the top of windows but I use this script on a headless box so it's no issue for me.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment