Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP: Mail Spider

Sivun loppuun

nlampola [02.02.2004 18:36:56]

#

Väänsin tänään tämmösen kun kuumessa kerran olin :D, ja ajattelin sitten tänne tämän laittaa...

Hakee nettisivun lähdekoodista kaikki linkit ja listaa ne, sekä näyttää sivulta löytyvät sähköpostiosoitteet.

Tiedetyt bugit / puuttuvat ominaisuudet:
- Ei hae sähköpostiosoitteita kuin linkeistä, joihin se on laitettu mailto:lla.
- Saattaa jäädä huonolla säkällä jumittamaan joidenkin hakemistojen väliin. (Ei sinänsä mitään haittaa, mutta käyttäjä voi tahallaan kasvattaa linkin suunnattomaksi, esim. näin www.domain.com/kansio/../kansio/../kansio/../kansio/.. jne.)
- Hakee myös kommenttien sisältä (ei oikeastaan bugi)
- Tiedoston nimen on oltava index.php, en oikein ajatellu kun lähdin tuota tekemään
- Taisi olla vielä jotain muutakin...

Mitä poistin kun laitoin tämän tänne:
- Automaattisen haun koko sivustolta, eli seuraa itse linkkejä ja kerää osoitteet ( yhtään roskapostittajaa ei tarvita enempää ) (se "syvyys" juttu tosin jäi, mutta se ei tee mitään)

PS. Eka koodivinkki putkassa :)

Ja tiedän, koodi on joltain paikoin huonosti tehtyä, mutta olen nyt vasta viikon parin verran php:llä väännelly juttuja :D . Enkä jaksanu ruveta siistiin enää koodia, joten se jäi sitten tollaseks...

Niin, ja punaisella näkyy ne linkit, jotka sijaitsevat jossakin toisessa domainissa/osoitteessa.

Jaa niin, esimerkki löytyy osoitteesta http://koti.mbnet.fi/~nikolai/demot/mailspider/index.php

<html>
<head>
<!-- by Nikolai Lampola 2004. -->
<!-- Älä poista tekijätietoja, kiitos :) -->
<title>MailSpider</title>
<meta name="description" content="">
<meta name="keywords" content="">
<meta name="author" content="n.lampola@luukku.com / Nikolai Lampola">
</head>
<body>
<?php

	//Haetaan lähtöasetukset
	$osoite_start = $_GET['osoite'];
	$starting = $_GET['starting'];

	echo "<h1>MailSpider</h1>";

	//Jos ei olla annettu osoitetta
	if ($osoite_start == "")
	{
		echo "<form action='index.php' method='get'>";
		echo "Lähtöosoite:<br>";
		echo "<input type='text' name='osoite' size='40' maxlength='255' value='http://'><br><br>";
		echo "<input type='hidden' name='starting' value='true'>";
		echo "<input type='submit' value=' Jatka '>";
		echo "</form>";

		echo '<font size="-1"><font color="#858585">MailSpider by Nikolai Lampola 2004.</font></font><br>';

		echo "</body>
			  </html>";

		die();
	}

	//Jos ollaan alottamassa
	if ($starting == "true")
	{
		echo "Tarkista, että tiedot ovat oikein ja aloita keräys.<br>
			  Kun keräystä suoritetaan, selain näyttää lataavan sivua. Kun keräys ollaan saatu valmiiksi, sivu ilmestyy tähän
			  automaattisesti.<br><br>";

		echo "Osoite: <b>$osoite_start</b><br><br>";

		echo "<form action='index.php' method='get'>";
		echo "<input type='hidden' name='osoite' value='$osoite_start'>";
		echo "<input type='hidden' name='starting' value='false'>";
		echo 'Haun syvyys: <font size="-2">(Kuinka monta linkkiä seurataan)</font><br>';
		echo "<input type='text' name='depht' size='40' maxlength='255' value='5'><br><br>";
		echo "<input type='submit' value=' Aloita '>";
		echo "</form>";

		echo '<font size="-1"><font color="#858585">MailSpider by Nikolai Lampola 2004.</font></font><br>';

		echo "</body>
			  </html>";

		die();
	}

	if ($osoite_start != "" AND $starting == "false")
	{
		$sivu = $osoite_start;

		echo "<h2>Keräyksen tulokset:</h2>";

		//Otetaan yhteys webpalvelimelle
		$fp = fopen( $sivu , "r" ) or die ("<br><b>Virhe yhteyden muodostamisessa palvelimelle.</b><br> Keräys keskeytettiin.");

		$lahdekoodi = "";
		$osoitteet = "";

		//Haetaan lähdekoodi
		while ( ! feof( $fp ))
		{
			$nro++;
			$lahdekoodi[$nro] = fgets( $fp, 2 );
		}

		//Tulosta lähdekoodi
		//for ($i = 0; $i < count($lahdekoodi); $i++) { echo $lahdekoodi[$i] . " "; }

		//Etsitään linkit
		echo "<h3>Sivulta \"$sivu\" löydetyt linkit:</h3>";
		for ($i = 0; $i < count($lahdekoodi)-5; $i++)
		{
			//Linkki löydetty

			if ($lahdekoodi[$i+0] == 'h' AND
			    $lahdekoodi[$i+1] == 'r' AND
			    $lahdekoodi[$i+2] == 'e' AND
				$lahdekoodi[$i+3] == 'f')
			{
				//echo "<b>" . $i . ":</b><br>";
				/*echo "<i><b><font color='#C10000'>...</font></b><font color='#358233'>";
				for ($i2 = -10; $i2 < 0; $i2++)
				{
					echo $lahdekoodi[$i+$i2] . " ";
				}
				echo "<b>";
				for ($i2 = 0; $i2 < 50; $i2++)
				{
					echo $lahdekoodi[$i+$i2] . " ";
				}
				echo "</b></font><b><font color='#C10000'>...</font></b></i><br>";*/

				//Etsitään linkin kohde tästä
				$pois = false;
				$linkki = "";
				$alkanut = false;
				for ($i2 = 5; !$pois OR $i2 < 500; $i2++)
				{
					//Loppuuko tähän
					if ($lahdekoodi[$i+$i2] == '"') {if ($alkanut) { $pois = true; break; } else { $alkanut = true; continue; }}
					if ($lahdekoodi[$i+$i2] == "'") {if ($alkanut) { $pois = true; break; } else { $alkanut = true; continue; }}
					if ($lahdekoodi[$i+$i2] == ">") { $pois = true; break; }

					//Ei loppunut, joten tämä merkki kuuluu osoitteeseen
					$linkki = $linkki . $lahdekoodi[$i+$i2];
				}

				//Tarkastetaan vielä, että ei ole mailto-linkki (ja jos on, lisätään se suoraan sähköpostiosoite-listaan)
				if ($lahdekoodi[$i+6]  == 'm' AND
				    $lahdekoodi[$i+7]  == 'a' AND
				    $lahdekoodi[$i+8]  == 'i' AND
					$lahdekoodi[$i+9]  == 'l' AND
					$lahdekoodi[$i+10] == 't' AND
					$lahdekoodi[$i+11] == 'o')
				{
					//On mailto-linkki

					//Etsitään linkin kohde tästä
					$pois = false;
					$linkki = "";
					$alkanut2 = false;
					for ($i2 = 13; !$pois OR $i2 < 500; $i2++)
					{
						//Loppuuko tähän
						if ($lahdekoodi[$i+$i2] == '"') {if ($alkanut2) { $pois = true; break; } else { $alkanut2 = true; continue; }}
						if ($lahdekoodi[$i+$i2] == "'") {if ($alkanut2) { $pois = true; break; } else { $alkanut2 = true; continue; }}
						if ($lahdekoodi[$i+$i2] == ">") { $pois = true; break; }

						//Ei loppunut, joten tämä merkki kuuluu osoitteeseen
						$linkki = $linkki . $lahdekoodi[$i+$i2];
					}

					$osoitteet = $osoitteet . $linkki . " <br> ";
					continue;	//Haetaan jo seuraavia
				}

				//Tarkastetaan, että linkki on suunnattu samalle sivustolle
				$temp_linkki = "";
				$nro = 0;
				$alkanut3 = false;
				for ($i2 = 6; !$pois OR $i2 < 500; $i2++)
				{
					$nro++;

					//Loppuuko tähän
					if ($lahdekoodi[$i+$i2] == '"') {if ($alkanut3) { $pois = true; break; } else { $alkanut3 = true; continue; }}
					if ($lahdekoodi[$i+$i2] == "'") {if ($alkanut3) { $pois = true; break; } else { $alkanut3 = true; continue; }}
					if ($lahdekoodi[$i+$i2] == ">") { $pois = true; break; }

					//Ei loppunut, joten tämä merkki kuuluu osoitteeseen
					$temp_linkki[$nro] = $temp_linkki[$nro] . $lahdekoodi[$i+$i2];
				}

				$loyty = false;
				//Jos linkin alku on http:// katsotaan että myös sivusto on sama
				if ($temp_linkki[1] == 'h' AND
				    $temp_linkki[2] == 't' AND
				    $temp_linkki[3] == 't' AND
					$temp_linkki[4] == 'p' AND
					$temp_linkki[5] == ':' AND
					$temp_linkki[6] == '/' AND
					$temp_linkki[7] == '/')
				{
					$loyty = true;

					if (substr_count($temp_linkki,$osoite_start) > 0)
					{
						//On samalle
						echo "<font color='#1ABB22'>";
					} else {
						//Eri sivustolle, ei oteta huomioon
						echo "<font color='#FF0000'>";
					}
				}
				//Jos linkin alku on ftp:// katsotaan että myös sivusto on sama
				if ($temp_linkki[1] == 'f' AND
				    $temp_linkki[2] == 't' AND
				    $temp_linkki[3] == 'p' AND
					$temp_linkki[4] == ':' AND
					$temp_linkki[5] == '/' AND
					$temp_linkki[6] == '/')
				{
					$loyty = true;

					if (substr_count($temp_linkki,$osoite_start) > 0)
					{
						//On samalle
						echo "<font color='#1ABB22'>";
					} else {
						//Eri sivustolle, ei oteta huomioon
						echo "<font color='#FF0000'>";
					}
				}
				//Jos linkin alku on https:// katsotaan että myös sivusto on sama
				if ($temp_linkki[1] == 'h' AND
				    $temp_linkki[2] == 't' AND
				    $temp_linkki[3] == 't' AND
					$temp_linkki[4] == 'p' AND
					$temp_linkki[5] == 's' AND
					$temp_linkki[6] == ':' AND
					$temp_linkki[7] == '/' AND
					$temp_linkki[8] == '/')
				{
					$loyty = true;

					if (substr_count($temp_linkki,$osoite_start) > 0)
					{
						//On samalle
						echo "<font color='#1ABB22'>";
					} else {
						//Eri sivustolle, ei oteta huomioon
						echo "<font color='#FF0000'>";
					}
				}
				if (!$loyty)
				{
					//Jos linkin alku ei ole jokin aikasempi, sivusto on sama
					if (strrpos($sivu, "/") > 8)
					{
						$viimenen_viiva = strrpos($sivu, "/");
						$temp_linkki = substr($sivu, 0, $viimenen_viiva);
						$temp_linkki = $temp_linkki . "/" . $linkki;

						echo "<font color='#1ABB22'>";
						echo $temp_linkki . " <font size='-1'><a href='index.php?osoite=" . $temp_linkki ."&starting=false'>etsi</a>
					         <a href='" . $temp_linkki . "'>siirry</a></font></font><br>";
					} else {
						$temp_linkki = $linkki;

						echo "<font color='#1ABB22'>";
						echo $sivu . "/" . $linkki . " <font size='-1'><a href='index.php?osoite=" . $sivu . "/" . $linkki ."&starting=false'>etsi</a>
					        <a href='" . $sivu . "/" . $linkki . "'>siirry</a></font></font><br>";
					}
				} else {
					echo $linkki . " <font size='-1'><a href='index.php?osoite=". $linkki ."&starting=false'>etsi</a>
						 <a href='$linkki'>siirry</a></font></font><br>";
				}


			}
		}

		echo "<h3>TULOKSET:</h3>";
		if ($osoitteet == "") { echo "<font color='#cc0000'>Sähköpostiosoitteita ei löytynyt.</font><br>"; };
		echo $osoitteet;

		echo "<br><br><a href='index.php'>Tee uusi haku</a><br><br>";

		//Suljetaan yhteys
		fclose($fp);

		echo '<font size="-1"><font color="#858585">MailSpider by Nikolai Lampola 2004.</font></font><br>';

		echo "</body>
			  </html>";

		die();
	}

?>

Antti Laaksonen [02.02.2004 18:48:27]

#

Ihan hyvin tuntuu toimivan. Merkkijonojen tarkastuksen voisi tosin hoitaa hieman hienommin kuin yksittäisiä merkkejä vertaamalla, tutustu substr-funktioon. ;)

nlampola [02.02.2004 18:50:59]

#

Tiedän, mutta se tuli mieleen vasta sen jälkeen kun olin pari kertaa sen noin tehnyt :D

ajv [02.02.2004 18:54:30]

#

Joo, hyvin toimii! Ihan siisti juttu!

T.M. [02.02.2004 18:54:37]

#

Hmm... käytä substr funktiota... :\
Kai toi ihan toimiva on :D

makeuu [02.02.2004 21:14:11]

#

:D, mikä aihe. tämä on suuremmoista ;-)

jrantala [02.02.2004 23:13:18]

#

Kätevähän tämä... vaikka tosiaankin vähän purkkkaa ;D

nlampola [02.02.2004 23:30:56]

#

Tarkoitus ei ollukkaan mullistaa maailmaa tällä :D ... Jätetään se vasta siihen seuraavaan koodivinkkiini ;) ...

Mutta (mielestäni) ihan hyvä esimerkki siitä, miten haetaan toiselta palvelimelta tietoa ja sitten käytetään sitä jotenkin. Omassa versiossani tämä osaa vielä hakea itse niistä linkeistä lisää niitä, eli kokonainen sivusto tulee käytyä läpi, ja se kerää sieltä kaikki löytyvät sähköpostiosoitteet ja luo samalla sivuston "kartan". En vain viitsinyt sitä versiota laittaa, koska joku vois ruveta sen kanssa vähän pelleileen ja olis taas yks roskapostittaja lisää...

odys [03.02.2004 10:20:36]

#

Tää on kyllä ihan älytön purkka :D

Regexpiinkin vois tutustua... :)
Nopeampaa, tehokkaampaa, helpompaa, selkeämpää, vaivattomampaa. Siis parempaa.

sooda [03.02.2004 14:25:03]

#

Hyvin toimiva purkka vaikka onkin purkkaa... :D

lahtis [03.02.2004 22:12:10]

#

heh tää onkin hyvä softa kaivaa saiteilta css tiedostot.

nlampola [03.02.2004 22:38:51]

#

Huomasikko että ne saa ladattua sieltä suoraan kun painaa sitä siirry-linkkiä :D

T.M. [03.02.2004 23:49:05]

#

regexp helpompaa? PAH!
sellasta siansaksaa ettei siitä ota hullukaan selvää

stere [05.02.2004 15:55:24]

#

Hyvä, itselläni ei kyllä toimi 100% mutta jotenkin:
http://www.freepgs.com/stere/muut/ :P Etsikää joku sivu niin näette virheen.

nlampola [05.02.2004 15:57:08]

#

Just. No eipä kai toimi kun olet muokannut koodia niin...

Ermeli [18.03.2004 17:37:42]

#

Ei toimi ku koitin includella tunkasta sivulle..
ja sen jälkee viel iskin ton koodin sivulle eikä toiminu
:p

McGordon [23.06.2005 23:02:38]

#

Spämmerin unelma :P

makas [03.08.2005 15:14:53]

#

Toimii =)


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta