Perl Parallel Downloader

Lipiec 23, 2014 Dodaj komentarz

Poniżej skrypt napisany w Perlu służący do ściągania plików równocześnie korzystając z Parallel::ForkManager. W pliku linki.txt zapisujemy adresy plików do pobrania (w osobnych linijkach), i uruchamiamy program. Jeżeli plik będzie pusty, nic się nie ściągnie, a program będzie działał dalej i oczekiwał na dane w pliku wejściowym. Można dopisywać linki w trakcie działania programu:

#!/usr/bin/perl
#
# Perl Parallel Downloader - Rownolegle sciaganie plikow
# 2014 @ Marcin Krol
#

use warnings;
use strict;
use WWW::Mechanize;
use Parallel::ForkManager;

#my @links = qw(http://cdimage.debian.org/cdimage/weekly-builds/i386/iso-cd/debian-testing-i386-CD-1.iso http://cdimage.debian.org/cdimage/weekly-builds/i386/iso-cd/debian-testing-i386-CD-2.iso);
my $resource_file = "linki.txt";
my $fork = Parallel::ForkManager->new(30);
my $www = WWW::Mechanize->new;

sub getLinksFromFile() {
my @ltab;
open R, '<', $resource_file or die "Blad przy otwieraniu pliku $resource_file: $!\n";
while() {
push @ltab, $_;
};
return @ltab;
};
my @downloaded;
while (1) {

my @links = &getLinksFromFile;

while (my $link = pop @links) {

next if $link ~~ @downloaded;
my $pid = $fork->start;
if (! $pid) {
my $nazwa = $2 if $link =~ /(http|ftp):\/\/.*\/(.*\.\w{3,3})/;
print "Sciaganie $nazwa \n";
$www->get($link, ':content_file'=>$nazwa);
};
$fork->finish;
my @links = &getLinksFromFile;
push @downloaded, $link;
};
sleep 5;
};

$fork->wait_all_children;

Reklamy

Logowanie do stron za pomocą WWW::Mechanize w Perlu

Maj 21, 2014 Dodaj komentarz

Ostatnio napisałem skrypcik w perlu, który loguję się do portalu olx.pl (dawniej tablica.pl) i sprawdza czy są nowe wiadomości. Jeżeli tak, to wypisuje informację na konsolę i uruchamia pc speakera 🙂

Wykorzystuje on klasę WWW::Mechanize do wysyłania HTTP requestów oraz HTTP::Cookies do obsługi ciasteczek (inaczej przed każdym pobraniem strony musielibyśmy się logować). Oczywiście do hasha należy wpisać własny login i hasło w odpowiednie pola:

use strict
use WWW::Mechanize
#use warnings;
use HTTP::Cookies;

my $c = HTTP::Cookies->new(
		autosave => 1,
		file => "$ENV{'HOME'}/ciasteczko",
	);	

my $m = WWW::Mechanize->new(
		cookie_jar => $c,
		ssl_opts => { verify_hostname => 1},
		request_redirectable => ['GET', 'HEAD', 'POST'],
	);


my %hash = (
	'login[email]' => 'nasz_login',
	'login[password]' => 'haslo',
	);

$m->post("http://olx.pl/mojolx/", \%hash);

while (1) {
foreach ($m->links) {
	if ($_->text =~ /Odpowiedzi(\d+)/) {
	        print "Masz $1 odpowiedz z tablicy!\n";
#		print $_->text . "\n" 
		$m->get($_->url);
		#print grep /unread/, $m->content;
		print chr(7);
		last;
	};	
};
sleep 10;
};

Kategorie:perl Tagi: , , , , , ,

Streaming na żywo [Debian + vlc]

Sierpień 10, 2013 1 komentarz

1. Instalujemy vlc (na serwerach bez X’ów jest pakiet vlc-nox)
2. Moje pakiety na Debianie:

Pakiet:libvlc5 Wersja:2.0.3-3
Pakiet:libvlccore5 Wersja:2.0.3-3
Pakiet:phonon-backend-vlc Wersja:0.6.0-1
Pakiet:vlc Wersja:2.0.3-3
Pakiet:vlc-data Wersja:2.0.3-3
Pakiet:vlc-nox Wersja:2.0.3-3
Pakiet:vlc-plugin-notify Wersja:2.0.3-3
Pakiet:vlc-plugin-pulse Wersja:2.0.3-3

3. Uruchamiamy streaming:
snejk@netbook:~$ vlc v4l2:// :v4l2-dev=/dev/video0 --sout "#transcode{vcodec=mpeg4}:standard{access=http,mux=ts,dst=127.0.0.1:2222}"

4. Podłączamy się do streamu:
snejk@netbook:~$ vlc http://localhost:2222

5. Opcjonalnie można zainstalować jakiś darmowy player, i ustawić źródło na nasz socket – mamy streaming online 😉

Kategorie:Pozostałe Tagi: , , , ,

Freebsd process in square brackets

Lipiec 25, 2013 54 Komentarze

If you are looking for process arguments os FreeBSD and it is put into square brackets this means that:

1) arguments cannot be located (has not been set)
2) kern.ps_arg_cache_limit value is not high enough to remember all arguments

Kategorie:administracja

Audyt użytkowników systemowych

Kwiecień 3, 2013 4 Komentarze

Poniżej prezentuję prosty skrypt który przegląda plik /etc/passwd (lub podany jako prametr) i wyświetla informację o stanie zabezpieczenia konta.
Do pobrania tutaj

Kategorie:administracja

AWK tricks, czyli alternatywy dla popularnych poleceń

Marzec 27, 2013 3 Komentarze

Jak uniwersalny jest to jeżyk można się przekonać na przykładach:

head -n 4 plik - awk ' NR<=4 '
grep -v znak plik - awk ' !/znak/' plik
grep znak plik - awk '/znak/' plik
cat -n plik - awk ' {print NR, $0} ' plik
wc -l plik - awk 'END {print NR}' plik
tail -n 1 plik - awk ' END { print $0 }' plik
cat /etc/motd | tr -d '\n' - awk ' BEGIN {ORS=""}{print}' /etc/motd
cat /etc/motd | tr a-z A-Z - cat /etc/motd | awk ' {print toupper($0)} '

— EDIT 22.05.13r —
wyszukiwanie palindromów w sedzie:

sed -n '/\(.\)\(.\).\2\1/p' plik

Zliczanie ipków z których próbowano się zalogować do systemu (z pliku auth.bz2 w systemie FreeBSD):

bzcat /var/log/auth.log.2.bz2 | awk '/Invalid/ { ip[$10]++ } END { for (var in ip) print var, "access", ip[var], "times"} '

wynik:

222.42.146.13 access 3 times
113.108.221.130 access 3 times
46.21.161.37 access 6 times
61.155.177.58 access 192 times
61.142.106.34 access 9 times
218.59.215.185 access 2 times
217.17.44.148 access 3 times
195.77.85.25 access 2 times
145.253.72.3 access 4 times

Kategorie:administracja Tagi: , , ,

PHP Fatal error: session_start()

Grudzień 12, 2012 2 Komentarze

Na następujący błąd:

[Wed Dec 12 11:30:17 2012] [error] [client 93.159.45.2] PHP Fatal error: session_start(): Failed to initialize storage module: files (path: ) in /srv/egroupware.domena.pl/htdocs/phpgwapi/inc/class.egw_session.inc.php on line 1457, referer: http://e.domena.pl/home/index.php

Jest proste rozwiązanie, a mianowicie ustawić należy zmienną session.save_session w php.ini lub dorzucić ją do ustawień VirtualHosta:

#nano vhost.conf

...
php_value session.save_path /tmp
...