TOR : How To Switch To a New Identity Using PHP
TOR. Where would I be without it? TOR has helped me circumvent DNS issues and get around Google blocks more than once. I also use it in some of my programs/scripts. So here’s a simple PHP script that I use to switch TOR to a new identity.
Sidenote : In case you don’t know what TOR is, here are the important bits - it’s a free, volunteer-based netwok of anonymous proxies. There are three things I like about it - it’s free, it works, and it’s easy to switch to a new proxy chain - just get a “new identity”. No need to reconfigure your browser/whatever to use a new proxy address.
The PHP script itself is below, followed by an explanation on how to use it.
New Identity Script
/** * Switch TOR to a new identity. **/ function tor_new_identity($tor_ip='127.0.0.1', $control_port='9051', $auth_code=''){ $fp = fsockopen($tor_ip, $control_port, $errno, $errstr, 30); if (!$fp) return false; //can't connect to the control port fputs($fp, "AUTHENTICATE $auth_code\r\n"); $response = fread($fp, 1024); list($code, $text) = explode(' ', $response, 2); if ($code != '250') return false; //authentication failed //send the request to for new identity fputs($fp, "signal NEWNYM\r\n"); $response = fread($fp, 1024); list($code, $text) = explode(' ', $response, 2); if ($code != '250') return false; //signal failed fclose($fp); return true; } /** * Load the TOR's "magic cookie" from a file and encode it in hexadecimal. **/ function tor_get_cookie($filename){ $cookie = file_get_contents($filename); //convert the cookie to hexadecimal $hex = ''; for ($i=0;$i<strlen($cookie);$i++){ $h = dechex(ord($cookie[$i])); $hex .= str_pad($h, 2, '0', STR_PAD_LEFT); } return strtoupper($hex); }
Basic Usage
tor_new_identity() takes three optional parameters -
- $tor_ip - The IP address of the TOR server you want to access. Defaults to 127.0.0.1
- $control_port - The TOR control port. Defaults to 9051.
- $auth_code - The authentication code. Defaults to an empty string. See the next section for more details on this parameter.
The function returns TRUE if it successfuly sent the “new identity” command, FALSE otherwise. If your TOR proxy doesn’t require authentication you can force a new identity very easily :
if (tor_new_identity('127.0.0.01', '9051')) { echo "Identity switched!"; }
TOR Authentication
Depending on your configuration, the script may need to authenticate before it can signal TOR to switch to a new identity.
There are three authentication modes TOR supports :
- None - no authentication required. You don’t need to set the third parameter of tor_new_identity().
- Cookie - TOR stores a “magic cookie” in the control_auth_cookie file inside it’s data directory. You have to authenticate by sending this cookie encoded in hexadecimal form. You can use tor_get_cookie() to read and properly encode the cookie.
Example :$cookie = tor_get_cookie('/path/to/tor/data/dir/control_auth_cookie'); tor_new_identity('127.0.0.1', 9051, $cookie);
- Password - your basic password authentication. To authenticate you will need to use the password in “quotes” or a hex-encoded version of the password.
Example :tor_new_identity('127.0.0.1', '9051', '"secret_passw0rd"');
P.S.
Is this too dry? Add some milk. Reconciliation
July 21st, 2008 at 2:13 pm
Hey,
Just came across your blog, I’m looking to do something similar in Perl but I’ve not used TOR at all.
Google kept killing my script after the 2nd page of results, very dull..
Anyway looks like you have some interesting code snippets so I’m going to have a browse around.
Cheers [:
August 11th, 2008 at 5:10 am
Thank You…I was having trouble finding the command to change ident on a nix server. You answered that and give me the function . ++++ for you
Are there more commands to pass?
August 11th, 2008 at 8:00 pm
Yes, there are various commands available. See this exhaustive and not very helpful description : TOR control protocol.
August 13th, 2008 at 1:19 pm
i… don’t understand how to use this. at all.
My problem is, I just installed the Vidalia bundle, and once I ran Tor, I clicked Start. But it keeps asking me for a password. After going to the settings and trying all 3 options (no pass, cookie, pass), it never worked. The “Use A New Identity” button is black, and I can’t find any way to get this started.
“There are three things I like about it - it’s free, it works, and it’s easy to switch to a new proxy chain - just get a ‘new identity’.” –yeah, right.
August 13th, 2008 at 1:39 pm
You have to restart TOR after you change the authentication settings. Though you probably tried that already, right? Frankly, I’m not a TOR “guru” (if such a thing even exists), so I think you’d have better luck finding an answer in the TOR documentation.
August 18th, 2008 at 6:02 pm
Do you know which command will let me choose the exit node country. I know there must be a way, cause the GUI based vadalia will let you do it.
Im using straight linux, php, and tor.
Can you help?
August 18th, 2008 at 6:10 pm
Nope, I don’t know. I’m afraid you’ll have to do your research yourself
August 18th, 2008 at 6:20 pm
^ lies… JK
I have been scouring the docs and command and cannot find it..
Thanks