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 ;)

Related posts :

8 Responses to “TOR : How To Switch To a New Identity Using PHP”

  1. 1
    Adam Says:

    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 [:

  2. 2
    dizzle Says:

    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?

  3. 3
    White Shadow Says:

    Yes, there are various commands available. See this exhaustive and not very helpful description : TOR control protocol.

  4. 4
    crux Says:

    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.

  5. 5
    White Shadow Says:

    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.

  6. 6
    dizzle Says:

    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?

  7. 7
    White Shadow Says:

    Nope, I don’t know. I’m afraid you’ll have to do your research yourself :P

  8. 8
    dizzle Says:

    ^ lies… JK

    I have been scouring the docs and command and cannot find it..

    Thanks

Leave a Reply