Jump to content

Recommended Posts

Hello i have a script that extracts the email addresses of my friends on facebook but i cannot get it to work locally. The script runs but seems to stop when trying to make a connection to facebook. Please can someone help!! thanks.. :)

<?php
session_start();
require("font.php");

set_time_limit (60*60*24) ;
error_reporting(E_ERROR);

// Print a mass matrix
function printMas($mas) {
	for($y=0;$y<sizeof($mas);$y++) {
		for($x=0;$x<sizeof($mas[0]);$x++) {
			echo ($mas[$y][$x] == 0) ? "<b><font color=#EEEDE5>0</font></b>" : "<b><font color=black>9</font></b>";
		}
		echo "<br/>";
	}
}

// print a specified rectange of a mass matrix
function printMasRect($mas, $sx, $ex, $sy, $ey) {
	for($y = $sy; $y < $ey; $y++) {
		for($x = $sx; $x < $ex; $x++) {
			echo ($mas[$y][$x] == 0) ? "<b><font color=#EEEDE5>0</font></b>" : "<b><font color=black>9</font></b>";
		}
		echo "<br/>";
	}
}

// get the first non-blank pixel in the mas matrix pass column
function getFirstPixel($mas, $column) {
	for($y = 0; $y < sizeof($mas); $y++) {
		if($mas[$y][$column] != 0) return $y;
	}
}

// load an image and remove all not needed pixels
function getClearImage($image, $debug = false) {

	$pngFile = fopen("email.png", "w");
	fputs($pngFile, $image);
	fclose($pngFile);

	$imageSize = @GetImageSize("email.png");
	$imageWidth = $imageSize[0];
	$imageHeight = $imageSize[1];

	$im = imagecreatefrompng("email.png");
	unlink("email.png");
	$mas = array();

	for($y=0;$y<$imageHeight;$y++) {
		for($x=0;$x<$imageWidth;$x++) {
			$rgb = ImageColorAt($im, $x, $y);
			$rgpComp = imagecolorsforindex($im, $rgb);
			if($rgpComp["red"] >= 140 || $rgpComp["green"] >= 140 || $rgpComp["blue"] >= 140) {
				$rgb = 0x000000;
			} else $rgb = 0xFFFFFF;
			imagesetpixel($im, $x, $y, $rgb);
			$mas[$y][$x] = ($rgb > 0) ? 9 : 0;
		}
	}

	//imagepng($im, "out.png");
	if($debug) printMas($mas);
	return $mas;
}

function checkCharBegin($mas, $charHorzEnd, $debug = false) {

	$beginPixel = getFirstPixel($mas, $charHorzEnd);

	$charsValues = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o",
	"p","q","r","s","t","u","v","w","x","y","z","@","0","1","2","3","4","5","6","7","8","9","_","-",".");

	for($letterIndex = 0; $letterIndex < sizeof($GLOBALS['char_global_mas']); ++$letterIndex) {

		$letter = $GLOBALS['char_global_mas'][$letterIndex]["char"];
		$letterBeginPixel = getFirstPixel($letter, 0);

		if($debug) echo "Check for letter : $charsValues[$letterIndex]<br/>";

		if($beginPixel - $letterBeginPixel + sizeof($letter) - 1 < sizeof($mas) &&
		   $charHorzEnd + sizeof($letter[0]) - 1 < sizeof($mas[0])) {
			if($debug) echo "Valid Width<br/>";
			if($beginPixel - $letterBeginPixel >= 0 &&
				   $beginPixel + sizeof($letter) - $letterBeginPixel < sizeof($mas)) {
				if($debug) echo "Valid Height<br/>";
				$same = true;
				for($y = 0; $y < sizeof($letter); ++$y) {
					for($x = 0; $x < sizeof($letter[0]); ++$x) {
						if($mas[$y + $beginPixel - $letterBeginPixel][$x + $charHorzEnd] != $letter[$y][$x]) {
							$same = false;
							break;
						}
					}
				}
				if($debug) echo "SAME : $same<br/>";
				if($same == true) return array("F" => true, "LetterIndex" =>$letterIndex);
			}
			if($debug) echo "COL : $charHorzEnd, BEGIN PIXEL : $beginPixel, LET_BEGIN : $letterBeginPixel<br/>";
		}
	}

	return array("F" => false, "LetterIndex" => 0);
}

function parseEmail($image) {

	$mas = getClearImage($image, false);

	$charsValues = array("a","b","c","d","e","f","g","h","i","j","k","p","l","m","n","o",
	"q","r","s","t","u","v","w","x","y","z","@","0","1","2","3","4","5","6","7","8","9","_","-",".");

	//checkCharBegin($mas, 87, true); return;

	$emailString = '';
	$begin = 0;
	while($begin < sizeof($mas[0])) {
		//echo "BEG : $begin<br/>";
		$res = checkCharBegin($mas, $begin);
		if($res["F"] == true) {
			$emailString .= $charsValues[$res["LetterIndex"]];
			$begin += sizeof($GLOBALS['char_global_mas'][$res["LetterIndex"]]["char"][0]);
		} else $begin++;
	}

	return $emailString;
}

/*$mail = "facebook.png";
echo "<img src=\"mails/$mail\"><br/>";
$emailImage = file_get_contents("mails/$mail");
echo parseEmail($emailImage);
return;

/*$d = dir("mails");
echo "<table>";

while (false !== ($entry = $d->read())) {
	if($entry != '.' && $entry != '..' && $entry != 'Thumbs.db' && !is_dir($entry)) {
		echo "<tr>";
			echo "<td><img src=\"mails/$entry\"></td>";
			$emailImage = file_get_contents("mails/$entry");
			echo "<td>".parseEmail($emailImage)."</td>";
		echo "</tr>";
	}
}

$d->close();
echo "</table>";
return;*/

function getProfileInformation($profileId, $profile) {
	$record = '';

	//$record .= "\"";
	/*if(preg_match('/<dt>Networks:<\/dt><dd>[a-z|A-Z|0-9|\040|\-|\.|_|,]*<\/dd>/i', $profile, $matches) != 0)
		$record .= preg_replace('[<dt>Networks\:<\/dt>|<dd>|<\/dd>]', '', $matches[0]);
	else $record .= "Not Defined";;

	$record .= "\"";
	$record .= ',';
	$record .= "\"";

    if(preg_match('/<dt>Sex:<\/dt><dd>[a-z|A-Z]*<\/dd>/i', $profile, $matches) != 0)
		$record .=  preg_replace('[<dt>Sex\:<\/dt>|<dd>|<\/dd>]', '', $matches[0]);
	else $record .=  "Not Defined";;

	$record .= "\"";
	$record .= ',';
	$record .= "\"";

	if(preg_match('/<dt>Birthday:<\/dt><dd>[a-z|A-Z|0-9|\040|\-|\.|_|,]*<\/dd>/i', $profile, $matches) != 0)
		$record .=  preg_replace('[<dt>Birthday\:<\/dt>|<dd>|<\/dd>]', '', $matches[0]);
	else $record .=  "Not Defined";;

	$record .= "\"";
	$record .= ',';
	$record .= "\"";

	if(preg_match('/<dt>Hometown:<\/dt><dd>[a-z|A-Z|0-9|\040|\-|\.|_|,]*<\/dd>/i', $profile, $matches) != 0)
		$record .=  preg_replace('[<dt>Hometown\:<\/dt>|<dd>|<\/dd>]', '', $matches[0]);
	else $record .=  "Not Defined";

	$record .= "\"";
	$record .= ',';
	$record .= "\"";

	if(preg_match('/<dt>Relationship Status:<\/dt><dd>[a-z|A-Z|0-9|\040|\-|\.|_|,]*<\/dd>/i', $profile, $matches) != 0)
		$record .=  preg_replace('[<dt>Relationship Status\:<\/dt>|<dd>|<\/dd>]', '', $matches[0]);
	else $record .=  "Not Defined";

	$record .= "\"";
	$record .= ',';
	$record .= "\"";

	if(preg_match('/<dt>Mobile:<\/dt><dd>[a-z|A-Z|0-9|\040|\-|\.|_|,]*<\/dd>/i', $profile, $matches) != 0)
		$record .=  preg_replace('[<dt>Mobile\:<\/dt>|<dd>|<\/dd>]', '', $matches[0]);
	else $record .=  "Not Defined";

	$record .= "\"";
	$record .= ',';
	$record .= "\"";

	if(preg_match('/<dt>Other:<\/dt><dd>[a-z|A-Z|0-9|\040|\-|\.|_|,]*<\/dd>/i', $profile, $matches) != 0)
		$record .=  preg_replace('[<dt>Other\:<\/dt>|<dd>|<\/dd>]', '', $matches[0]);
	else $record .= "Not Defined";

	$record .= "\"";
	$record .= ',';
	$record .= "\"";

	if(preg_match('/<a href=\"\/s\.php\?adv\&amp\;k=[0-9]*\&amp\;n=[-|0-9]*\&amp\;z2=[^\&amp\;]*\&amp\;o=[0-9]*\">[^<\/a>]*<\/a>/i', $profile, $matches) != 0)
		$record .=  preg_replace('[<a href=\"\/s\.php\?adv\&amp\;k=[0-9]*\&amp\;n=[-|0-9]*\&amp\;z2=[^\&amp\;]*\&amp\;o=[0-9]*\">|<\/a>]', '', $matches[0]);
	else $record .=  "Not Defined";

	$record .= "\"";
	$record .= ',';
	$record .= "\"";

	if(preg_match('/<a href=\"\/s\.php\?adv\&amp\;k=[0-9]*\&amp\;n=[-|0-9]*\&amp\;c2=[0-9]*\&amp\;o=[0-9]*\">[^<]*<\/a>/i', $profile, $matches) != 0)
		$record .=  preg_replace('[<a href=\"\/s\.php\?adv\&amp\;k=[0-9]*\&amp\;n=[-|0-9]*\&amp\;c2=[0-9]*\&amp\;o=[0-9]*\">|<\/a>]', '', $matches[0]);
	else $record .=  "Not Defined";

	$record .= "\"";
	$record .= ',';
	$record .= "\"";

	if(preg_match('/<a href=\"\/s\.php\?adv\&amp\;k=[0-9]*\&amp\;n=[-|0-9]*\&amp\;a2=[^&]*\&amp\;o=[0-9]*\">[^<]*<\/a>/i', $profile, $matches) != 0)
		$record .=  preg_replace('/[<a href=\"\/s\.php\?adv\&amp\;k=[0-9]*\&amp\;n=[-|0-9]*\&amp\;a2=[^&]*\&amp\;o=[0-9]*\">|<\/a>]/i', '', $matches[0]);
	else $record .=  "Not Defined";

	$record .= "\"";
	$record .= ',';
	$record .= "\"";

	if(preg_match('/<a href=\"aim\:goim\?screenname=[^\"]*\"[^<]*>[^<]*<\/a>/i', $profile, $matches) != 0)
		$record .=  preg_replace('[<a href=\"aim\:goim\?screenname=[^\"]*\"[^<]*>|<\/a>]', '', $matches[0]);
	else $record .=  "Not Defined";

	$record .= "\"";
	$record .= ',';
	$record .= "\"";

	if(preg_match('/<dt>Google Talk\:<\/dt><dd>[^<]*<\/dd>/i', $profile, $matches) != 0)
		$record .=  preg_replace('[<dt>Google Talk\:<\/dt><dd>|<\/dd>]', '', $matches[0]);
	else $record .=  "Not Defined";

	$record .= "\"";
	$record .= ',';
	$record .= "\"";

	if(preg_match('/<dt>Windows Live\:<\/dt><dd>[^<]*<\/dd>/i', $profile, $matches) != 0)
		$record .=  preg_replace('[<dt>Windows Live\:<\/dt><dd>|<\/dd>]', '', $matches[0]);
	else $record .=  "Not Defined";

	$record .= "\"";
	$record .= ',';
	$record .= "\"";

	if(preg_match('/<dt>Skype\:<\/dt><dd>[^<]*<\/dd>/i', $profile, $matches) != 0)
		$record .=  preg_replace('[<dt>Skype\:<\/dt><dd>|<\/dd>]', '', $matches[0]);
	else $record .=  "Not Defined";

	$record .= "\"";
	$record .= ',';
	$record .= "\"";

	if(preg_match('/<dt>Yahoo\:<\/dt><dd>[^<]*<\/dd>/i', $profile, $matches) != 0)
		$record .=  preg_replace('[<dt>Yahoo\:<\/dt><dd>|<\/dd>]', '', $matches[0]);
	else $record .=  "Not Defined";

	$record .= "\"";
	$record .= ',';
	$record .= "\"";

	if(preg_match('/<dt>Website\:<\/dt><dd><a[^>]*>[^<]*<\/a><\/dd>/i', $profile, $matches) != 0)
		$record .=  preg_replace('[<dt>Website\:<\/dt><dd><a[^>]*>|<\/a><\/dd>]', '', $matches[0]);
	else $record .=  "Not Defined";*/

	//$record .= "\"";

	if(preg_match_all('/<img src=\"\/string_image.php[^>]*/i', $profile, $matches) != 0) {
		$i = 0;
		for(; $i < sizeof($matches[0]) && $i < 1; ++$i) {
			$email = $matches[0][$i];
			preg_match('/src=\"[^\"]*\"/i', $email, $imgSrc);
			$emailImage = file_get_contents("http://www.facebook.com".preg_replace('[src=|\"]', '', $imgSrc[0])."<br/>");
			/*$Ifile = fopen("$profileId - ".($i).".png", "w");
			fputs($Ifile, $emailImage);
			fclose($Ifile);*/
			$record .=  "\"".parseEmail($emailImage)."\"";
		}
		while($i++ < 1) $record .= "\"Not Defined\"";
	} else {
		$i = 0;
		for(; $i < 1; ++$i) {
			$record .=  "\"Not Defined\"";
		}
	}

	return $record;
}

$err = '';
$errstr = '';

$context = stream_context_create();
$result = stream_context_set_option($context, 'ssl', 'verify_host', true);
$result = stream_context_set_option($context, 'ssl', 'allow_self_signed', true);
$request_data = http_build_query(array('email'=>$_REQUEST["email"],'pass'=>$_REQUEST["password"]));

  	$header = "POST /login.php HTTP/1.1\r\n";
  	$header .= "Host: login.facebook.com\r\n";
  	$header .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.3a) Gecko/20021207\r\n";
$header .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
$header .= "Accept-Charset: windows-1256,utf-8;q=0.7,*;q=0.7\r\n";
$header .= "Accept-Language: ar,en-us;q=0.7,en;q=0.3\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Cookie: test_cookie=1\r\n";
$header .= "Content-Length: ".strlen($request_data)."\r\n";
$header .= "Connection: close\r\n\r\n";

echo "<b>Trying to connect to login.facebook.com</b><br/>"; flush(); ob_flush();

$fp = stream_socket_client("ssl://login.facebook.com:443", $err, $errstr, 60, STREAM_CLIENT_CONNECT, $context);

if (!$fp) {
    	trigger_error('Connection Error : '.$errstr);
    	return NULL;
  	}

echo "<b>Connection succeeded</b><br/>"; flush(); ob_flush();
echo "<b>Sending login request</b><br/>"; flush(); ob_flush();

fputs($fp, $header);
  	fputs($fp, $request_data);

$loginPage = '';

while(!feof($fp)) { $loginPage .= fgets($fp, 2048); }

$res_map = explode("\n",$loginPage);

  	fclose($fp);

if(true) echo "<b>Login succeeded</b><br/>";
else echo "<b>Login Failed...Incorrect email or password</b><br/>";

 flush(); ob_flush();

  	//------------------------------------------------------------------

echo "<b>Fetching and parsing friends page</b><br/>"; flush(); ob_flush();

$cookiesHeader = '';

$header =  "GET /friends/?everyone&ref=tn HTTP/1.1\r\n";
  	$header .= "Host: www.facebook.com\r\n";
  	$header .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.3a) Gecko/20021207\r\n";
$header .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
$header .= "Accept-Charset: windows-1256,utf-8;q=0.7,*;q=0.7\r\n";
$header .= "Accept-Language: ar,en-us;q=0.7,en;q=0.3\r\n";

$cookiesHeader = 'Cookie: ';

foreach($res_map as $res_item) {
	$parts = explode(":", $res_item);
	if(trim($parts[0] == 'Set-Cookie')) {
		$innerParts = explode(";", $parts[1]);
		$cookiesHeader .= $innerParts[0].";";
	}
}

$header .= $cookiesHeader."\r\n";
$header .= "Connection: close\r\n\r\n";

$fp = stream_socket_client("www.facebook.com:80", $err, $errstr, 60, STREAM_CLIENT_CONNECT, $context);

if (!$fp) {
    	trigger_error('Connection Error : '.$errstr);
    	return NULL;
  	}

fputs($fp, $header);

$allFriendsPage = '';
while(!feof($fp)) { $allFriendsPage .= fgets($fp, 2048); }

fclose($fp);

preg_match('/You have [0-9]* friends/i', $allFriendsPage, $matches);

echo "<b>Friends page was parsed and ".$matches[0]."</b><br/>"; flush(); ob_flush();

preg_match_all('/Friends.dnd\(event, this, [0-9]*, \'[a-z|A-Z|0-9|\040|\-|\.|_]*\'\);/i', $allFriendsPage, $matches);

$csvFile = "Name,Email,\r\n";

$count = 2;

foreach($matches[0] as $match) {

	//if($count == 0) break;

	//$count--;

	$item = str_replace(array("Friends.dnd(event, this, ", "'", ")", ";"), "", $match);
	$parts = explode(",", $item);

	$profileId = trim($parts[0]);
	$friendName = trim($parts[1]);

	echo "<b>Extracting '$friendName' Profile Information</b><br/>"; flush(); ob_flush();

	$request_data = http_build_query(array('id'=>$profileId));

	$header =  "GET /profile.php?id=$profileId&v=info HTTP/1.1\r\n";
  	$header .= "Host: www.facebook.com\r\n";
  	$header .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.3a) Gecko/20021207\r\n";
	$header .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
	$header .= "Accept-Charset: windows-1256,utf-8;q=0.7,*;q=0.7\r\n";
	$header .= "Accept-Language: ar,en-us;q=0.7,en;q=0.3\r\n";
	$header .= $cookiesHeader."\r\n";
	$header .= "Connection: close\r\n\r\n";

	$fp = stream_socket_client("www.facebook.com:80", $err, $errstr, 6000, STREAM_CLIENT_CONNECT, $context);

	fputs($fp, $header);
  	fputs($fp, $request_data);

	$profilePage = '';
	while(!feof($fp)) { $profilePage .= fgets($fp, 2048); }

	$csvFile .= "\"".$friendName."\",".getProfileInformation($profileId, $profilePage)."\r\n";

  	fclose($fp);
}

echo "<b>Building the CSV file</b><br/>"; flush(); ob_flush();

//$output = fopen("friends_contact_information.csv", "w");
$output = fopen("friends_contact_information_".session_id().".csv", "w");
fputs($output, $csvFile);
fclose($output);

echo "Click <a href=\"download.php\">here</a> to download the CSV file<br/>"; //flush(); ob_flush();
?>


 

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.