Webbot - bot internetowy czy stos,czy kolejka,czy kolejka pr

0

Zaczęłem niedawno tworzyć projekt webbot'a, bot zbierającego linki coś w stylu googlebot'a. Stowrzyłem pierwszą działającą wersję webbot'a, która, jak można się spodziewać nie jest idealna.

Mam pytanie podstawowe:

jak mógłbym zorganizować mechanizm zarządzania zbieraniem linków czyli linki z pobranej strony wrzucane są do tablicy na końcu, a z początku usuwany jest pierwszy (jak jest teraz) czy zabawić się w stosy czy kolejki dla stron, kolejka priorytetowa dla domeny z otwartymi połączeniami?

Aktualnie projekt jest w php, ale chciałbym się przerzucić na c/c++. Jednakże w c zawsze miałem problemy z napisami, a php jest wyjątkowo proste do pisania kodu.

Prosiłbym też o opinie itd.

[url]http://www.kgb-hacking.yoyo.pl/index.php?action=projects[/url]

0

PHP jest wyjątkowo proste, bo ma dużo śmieci które niektórzy uważają za zajebistą rzecz. Ja się zajmę tylko oceną kodu:

print ("Sprawdzam url: $urls[$i]\n\n");

Przede wszystkim to - śmierdzi. Wsadzasz zmienne do stringa, nie dość że PHP się namęczy z szukaniem zmiennych w stringu, to jeszcze można takiego printa położyć jedną literówką (np. kropką nie tam gdzie trzeba lub podwójnym nawiasem i wyświetli ci ładne:

Sprawdzam url: $urls[$i]}

Czasami ze względu na pośpiech po prostu tego nie zauważysz, a potem kolejne 15 minut spędzone na debugowaniu "a czemu to nie działa?"...

Znacznie trudniej jest o tego typu błąd jeśli zapiszesz to tak:

print('Sprawdzam URL: ' . $urls[$i]);

I koloryzator składni ładnie to wyświetli (znacznie ładniej niż zmienne w stringu), a większość błędów w składni od razu zostanie zasygnalizowana parse errorem.

Kod piszesz w sposób bardzo niechlujny:

if (substr ($argv[1], 0, 7) == "http://") {

print ("Podałeś http\n\n");

$argv[1] = substr ($argv[1], 7, strlen($argv[1])-7);

} else {

Przede wszystkim większość programistów przyzwyczaiła się do nieco matematycznego zapisu wywołania funkcji, czyli:

f(x, y, z)

Uwierz, że to robi znaczną różnicę w porównaniu z:

f (x, y, z)

Gdy kod przerasta kilkaset linijek...

Oprócz tego: Istnieje coś takiego jak wcięcia. I po to są one stosowane, żeby potem nie mieć problemu z czytelnością kodu. Nie zostawiaj pustej linijki po każdej instrukcji - jak będzie trzeba walnąć komentarz to się doda linię w środku, to nie maszynopis.

Przykład sensownego formatowania twojego kodu:

<?php

include_once("parse.php");
include_once("url.php");

if ($argc != 2) {
	print('Podałeś za mało parametrów' . "\n\n");
	exit();
}

print('Przejdź pod adres: ' . $argv[1] . "\n\n");

//Sprawdzamy protokół w podanym adresie.
if (substr($argv[1], 0, 7) == "http://") {
	print('Podałeś http' . "\n\n");
	$argv[1] = substr ($argv[1], 7, strlen($argv[1])-7);
} else {
	if (substr($argv[1], 0, 8) == "https://") {
		print('Podałeś https. Jego nie obsługuje' . "\n\n");
		exit();
	} else {
		if (substr($argv[1], 0, 6) == "ftp://") {
			print('Podałeś ftp. Jego nie obsługuje' . "\n\n");
			exit();
		} else {
			print('Nie podałeś żadnego. Domyślnie stawiam na http://' . "\n\n");
		}
	}
}

print($argv[1] . "\n\n");

$urls = array();
$urls[] = $argv[1];

$i = 0;

while(count($urls) > 0) {
	while($urls[$i] == FALSE && $i < 10000) {
		$i++;
	}
	print('Sprawdzam url: ' . $urls[$i] . "\n\n");
	$urls_tmp = get_url($urls[0]); //Sprawdzamy podany URL.
	if ($urls_tmp != FALSE) {
		$urls = array_merge($urls, $urls_tmp);
	}
	unset($urls_tmp);
	$urls = array_splice($urls, 1, count($urls));
}

?>

Pomijając dziwne treści komunikatów o błędach i samo działanie kodu.
Ciekawe jest to, że strony z "hacking" w nazwie i wyglądające na "omg w00t h0x" dla niewtajemniczonych, najczęściej hostowane są na yoyo.pl, albo cba.pl...
Nie mówię też nic o tym, że najczęściej to co jest tam napisane, z fachowością ma mało wspólnego.

http://www.kgb-hacking.yoyo.pl/index.php?id=16 napisał(a)

[...] W firmach raczej króluje Windows. [...] Skoro wiadomo, to dlaczego nie zainstalują w firmach linuxa? Ja tu widzę same korzyści. Pracownicy nie pograją sobie w najnowsze gry (no chyba, że programiści, którzy muszą znać się na kompach), <font color="red">za darmo, zero licencji</span>, zero haraczu. Ktoś powie, kiedyś wirusy pojawią się na linuxie. Może, może nie. Ale na pewno nie będą mieć takiego rażenia jak na windowsie, bo
1) to jest linux
<font color="red">2) jak z punktu 1. wynika, normalny użytkownik nie siedzi na roocie</span>
3) częste aktualizacje (aktualizacja jądra i praca biurowa na pececie kto by pomyślał na windowsie?)

Albo ten news Projekt webbot w kategorii Hacking o.O

1 użytkowników online, w tym zalogowanych: 0, gości: 1