Wrzucam prosty parser logów z plików CSV.
Ma on za zadanie wyszukać ilość wystąpień adresów IP łączących się na port 25 ze wszystkich plików CSV znajdujących się w katalogu.
Pokazywanie postów oznaczonych etykietą php. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą php. Pokaż wszystkie posty
wtorek, 14 maja 2013
piątek, 1 lutego 2013
PHP - niebezpieczny operator porównania ==
W PHP możemy porównać 2 zupełnie inne rzeczy, a PHP uzna, że to jest w porządku.
PHP i bezpieczeństwo :)
Za sprawą wpisu na blogu Gynvaela o operatorze równości w PHP stwierdzam, że PHP to bardzo dziwny język. Okazuje się, że możemy porównać 2 całkiem inne stringi (i nie tylko), a PHP uzna, że są one takie same.
środa, 30 stycznia 2013
sed - zamiana zmiennych w kodzie PHP
Dostałem dziś źródła aplikacji PHP napisaną przez znajomego, który poprosił mnie abym wszystkie zmienne $_POST w jego kodzie szybko zwalidował, sparsował czy jak to inaczej nazwać :) Napisanie, funkcji nie było problemem. Problemem było jak to szybko zamienić w dziesiątkach plików źródłowych :)
Z pomocą przyszedł sed i jedna z najpopularniejszych powłok systemów uniksowych ;)
Z pomocą przyszedł sed i jedna z najpopularniejszych powłok systemów uniksowych ;)
środa, 28 listopada 2012
Rejestr przedsiębiorców telekomunikacyjnych z UKE [parser]
Parser, który pozwala na pobranie listy przedsiębiorców telekomunikacyjnych z bazy UKE, korzystając z wyszukiwarki http://www.uke.gov.pl/marta/searcherRptForm.vm.
<?php
// Michał Błaszczak
// blaszczakm.blogspot.com
function uke($id)
{
$data =
file_get_contents("http://www.uke.gov.pl/marta/resultRptDetails.vm?form=1&id=$id");
$dom = new domDocument;
@$html = @$dom->loadHTML($data);
$dom->preserveWhiteSpace = false;
$tables = $dom->getElementsByTagName('table');
$rows = $tables->item(0)->getElementsByTagName('tr');
$dane='';
foreach ($rows as $row)
{
$cols = $row->getElementsByTagName('td');
$intro = $cols->item(0)->nodeValue;
$t = explode("\n",$intro);
$dane .= trim($t[1]);
$dane .=';';
}
system("echo '$dane' >> uke.csv");
}
for($i=1;$i<1000;$i++) // pierwszy 1000
{
uke($i);
}
?>
Na sam koniec dla ładnego wyniku
iconv --from-code=UTF-8 --to-code=ISO-8859-2 --output uke1.csv uke.csv
W pliku uke1.csv dostaniemy pierwszy tysiąc operatorów telekomunikacyjnych.
czwartek, 25 października 2012
Powiadomienia w Nagios dla managera
Poniżej skrypt w PHP, pozwalający wysyłać powiadomienia dla menagerów z usług i hostów monitorowanych w Nagios, które nie zostały naprawione w zadanym czasie przez techników odpowiedzialnych za dane urządzenia.
3 pliczki PHP, 4 wpisy do cron'a. Ciach bach i gotowe :)
Greetz dla Łukasza K. za pomysł ;)
Skrypty check_nagios_host.php i check_nagios_services.php mają za zadanie parsować plik Nagiosa /usr/local/nagios/var/status.dat pod kątem czasu ostatniego poprawnego działania hosta lub usługi.
last_time_up - dla hosta
last_time_ok - dla usługi
Jeśli host nie działa dłużej niż 40000 (timestamp) to skrypt, kieruję sprawę do zbiorczego maila i wysyła do managera.
Skrypt został zatwierdzony i dodany do katalogu Nagios Exchange
http://exchange.nagios.org/directory/Plugins/Notifications/notifications-for-manager/details
Link do źródeł http://sourceforge.net/projects/nagiosnotifi/
Poniżej źródła skryptów.
3 pliczki PHP, 4 wpisy do cron'a. Ciach bach i gotowe :)
Greetz dla Łukasza K. za pomysł ;)
last_time_up - dla hosta
last_time_ok - dla usługi
Jeśli host nie działa dłużej niż 40000 (timestamp) to skrypt, kieruję sprawę do zbiorczego maila i wysyła do managera.
Skrypt został zatwierdzony i dodany do katalogu Nagios Exchange
http://exchange.nagios.org/directory/Plugins/Notifications/notifications-for-manager/details
Link do źródeł http://sourceforge.net/projects/nagiosnotifi/
Poniżej źródła skryptów.
niedziela, 7 października 2012
Sprawdzanie aktywności na GoldenLine.pl
Ostatnio znajomy przestał odpisywać na moje wiadomości. Chciałem sprawdzić czy po prostu nie chce na nie odpisać czy nie korzysta z GoldenLine.pl i nie wie o wiadomościach, które do niego wysłałem.
Napisałem prosty skrypt w PHP, który pozwala sprawdzić aktywność danej osoby po publikowanym statusie offline/online.
Poniżej źródło skryptu PHP:
Napisałem prosty skrypt w PHP, który pozwala sprawdzić aktywność danej osoby po publikowanym statusie offline/online.
Poniżej źródło skryptu PHP:
wtorek, 25 września 2012
Parser mapa UKE + crawler
Poniżej zamieszczam kod źródłowy aplikacji, którą napisałem do parsowania danych z mapy UKE mapa.uke.gov.pl.
Struktura bazy MySQL
mysql> explain mapa;
+----------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+-------+
| id | int(20) | NO | PRI | NULL | |
| miejsce | varchar(255) | NO | | NULL | |
| ogolem | int(20) | NO | | NULL | |
| indywidualni | int(20) | NO | | NULL | |
| biznesowi | int(20) | NO | | NULL | |
| t_ogolem | int(20) | NO | | NULL | |
| t_indywidualni | int(20) | NO | | NULL | |
| t_biznesowi | int(20) | NO | | NULL | |
| op_int | int(20) | NO | | NULL | |
| op_tel | int(20) | NO | | NULL | |
+----------------+--------------+------+-----+---------+-------+
10 rows in set (0.00 sec)
Plik func.php
<?php
function polacz()
{
$dbname='uke';
$dbhost='localhost';
$dbuser='root';
$dbpass='pass';
$link = mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname);
return $link;
}
function tabulka($tabelka)
{
$dom = new DOMDocument();
//load the html
$html = $dom->loadHTMLFile($tabelka);
//discard white space
$dom->preserveWhiteSpace = false;
//the table by its tag name
$tables = $dom->getElementsByTagName('table');
//get all rows from the table
$rows = $tables->item(0)->getElementsByTagName('tr');
// get each column by tag name
$cols = $rows->item(0)->getElementsByTagName('th');
$row_headers = NULL;
foreach ($cols as $node) {
//print $node->nodeValue."\n";
$row_headers[] = $node->nodeValue;
}
$table = array();
//get all rows from the table
$rows = $tables->item(0)->getElementsByTagName('tr');
foreach ($rows as $row)
{
// get each column by tag name
$cols = $row->getElementsByTagName('td');
$row = array();
$i=0;
foreach ($cols as $node) {
# code...
//print $node->nodeValue."\n";
if($row_headers==NULL)
$row[] = $node->nodeValue;
else
$row[$row_headers[$i]] = $node->nodeValue;
$i++;
}
$table[] = $row;
}
return $table;
//var_dump($table);
}
function spider($id){
//echo $id."\n";
$id_miejsca = explode("=",$id);
//echo $id_miejsca[1]."\n";
$intro = file_get_contents("$id");
$regex = '#\<div id="firstText"\>(.+?)\<div id="secondText">#s';
preg_match($regex, $intro, $matches); // LICZBA ABONENTOW OGOLEM
$match = $matches[0];
$regex_io = '#\<td class="titleCell" valign="top"\>(.+?)\<\/td\>#s';
preg_match($regex_io, $match, $matches_io);
$match_io = $matches_io[0];
$op_int = preg_replace('/[^0-9]/','', $match_io);
echo 'operatorzy'.$op_int; // WYNIK - OPERATORZY INTERNET
echo "\n\n";
//echo $match;
$regex_f = '#\<td class="cell" colspan="3"\>(.+?)\<\/table\>#s'; // LICZBA ABONENTOW OGOLEM
preg_match($regex_f, $match, $matches_f); // LICZBA ABONENTOW OGOLEM
$match_f = $matches_f[0];
//echo $match_f; // WYNIK - PIERWSZA TABELA INTERNET
$regex_s = '#\<div id="secondText"\>(.+?)\<\/body\>#s';
preg_match($regex_s, $intro, $matches_s); // LICZBA ABONENTOW OGOLEM
$match_s = $matches_s[0];
//echo 'DRUGI_DIV:'.$match_s;
$regex_io2 = '#\<td class="titleCell" valign="top"\>(.+?)\<\/td\>#s';
preg_match($regex_io2, $match_s, $matches_io2);
$match_io2 = $matches_io2[0];
$op_int2 = preg_replace('/[^0-9]/','', $match_io2); // WYNIK - OPERATORZY TELEFONU
$regex_ts = '#\<td class="cell" colspan="3"\>(.+?)\<\/table\>#s';
preg_match($regex_ts, $match_s, $matches_ts); // LICZBA ABONENTOW OGOLEM
$match_ts = $matches_ts[0]; // WYBIK DRUGA TABELA TELEFON
$tab = '<table><tr>'.$match_f;
$tab2 = '<table><tr>'.$match_ts;
$file = "/tmp/html.$id_miejsca[1]";
$file = trim($file);
system("echo '$tab' > $file");
$file2 = "/tmp/tel.$id_miejsca[1]";
$file2 = trim($file2);
system("echo '$tab2' > $file2");
$res = tabulka($file);
$res2 = tabulka($file2);
/
$ogol = $res[0][2];
$ind = $res[1][2];
$biz = $res[2][2];
$t_ogol = $res2[0][2];
$t_ind = $res2[1][2];
$t_biz = $res2[2][2];
$regex = '#\<div\>(.+?)\<\/div\>#s';// ZWRACA GMINE/POWIAT
preg_match($regex, $intro, $matches); // ZWRACA GMINE/POWIAT
$match = $matches[0];
$miejsce = explode("-",$match);
$miejscowosc =ltrim($miejsce[1]);
$miejscowosc = iconv("ISO-8859-2","UTF-8",$miejscowosc);
polacz();
$insert = "INSERT INTO mapa (id,miejsce,ogolem,indywidualni,biznesowi,t_ogolem,t_indywidualni,t_biznesowi,op_int,op_tel) values ('$id_miejsca[1]','$miejscowosc','$ogol','$ind','$biz','$t_ogol','$t_ind','$t_biz','$op_int','$op_int2')";
mysql_query($insert);
echo $insert."\n";
}
?>
poniedziałek, 11 czerwca 2012
Logowanie na SSH przez PHP
Install: libssh2-1-dev libssh2-php
Source:
<?php
if (!function_exists("ssh2_connect")) die("funkcja ssh2_connect nie istnieje ");
// logowanie
if(!($con = ssh2_connect("192.168.15.214", 22))){
echo "fail: NIE MOGE USTANOWIC POLACZENIA\n";
} else {
// autentykacja
if(!ssh2_auth_password($con, "root", "XxXx3")) {
echo "fail: NIE MOGE POPRAWNIE ZALOGOWAC\n";
} else {
// jest OK
echo "okay: ZALOGOWANO\n";
// WYKONANIE KOMENDY
if (!($stream = ssh2_exec($con, "ps -aux"))) {
echo "fail: NIE MOGE WYKONAC POLECENIA\n";
} else {
stream_set_blocking($stream, true);
$data = "";
// $uf = fread($stream,4096);
// echo $uf;
while ($buf = fread($stream,4096)) {
$data .= $buf;
echo $data;
}
fclose($stream);
}
}
}
?>
Subskrybuj:
Posty (Atom)