<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Proxmox, Serwery, Wirtualizacja serwerów, KVM, OpenVZ, Debian, Hosting, Shell, Mikrotik, QoS, Podział pasma, Firewall, Iptables</title>
	<atom:link href="http://toniemy.org.pl/feed/" rel="self" type="application/rss+xml" />
	<link>http://toniemy.org.pl</link>
	<description>Proxmox, Serwery, Wirtualizacja serwerów, KVM, OpenVZ, Debian, Hosting, Shell, Mikrotik, QoS, Podział pasma, Firewall</description>
	<lastBuildDate>Sat, 19 May 2012 07:01:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Łamanie haszy MD5/SHA1 &#8211; bruteforce</title>
		<link>http://toniemy.org.pl/2011/12/16/lamanie-haszy-md5-bruteforce/</link>
		<comments>http://toniemy.org.pl/2011/12/16/lamanie-haszy-md5-bruteforce/#comments</comments>
		<pubDate>Thu, 15 Dec 2011 23:28:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[różne pomysły]]></category>

		<guid isPermaLink="false">http://toniemy.org.pl/?p=756</guid>
		<description><![CDATA[Dzisiaj napiszemy proste narzędzie do łamania haszy MD5/SHA1 metodą bruteforce. Skryptów umożliwiających takie operacje w internecie jest masa. My też skorzystamy z gotowego skryptu znalezionego w internecie, napisanego przez Juza. Nasze narzędzie będzie się różnić tym że będziemy mogli je wykorzystać na wielu komputerach i poprzez interfejs www. Co potrzebujemy? * Wiedzy czym jest MD5 [...]]]></description>
			<content:encoded><![CDATA[<p>Dzisiaj napiszemy proste narzędzie do łamania haszy MD5/SHA1 metodą bruteforce. Skryptów umożliwiających takie operacje w internecie jest masa. My też skorzystamy z gotowego skryptu znalezionego w internecie, napisanego przez Juza. Nasze narzędzie będzie się różnić tym że będziemy mogli je wykorzystać na wielu komputerach i poprzez interfejs www.</p>
<p><span id="more-756"></span></p>
<p>Co potrzebujemy?<br />
* Wiedzy czym jest <a href="http://pl.wikipedia.org/wiki/MD5" title="MD5" target="_blanc">MD5</a> i/lub <a href="http://pl.wikipedia.org/wiki/SHA-1" target="_blanc">SHA1</a><br />
* Serwer z www, php i mysql (otwarte na dostęp z zewnątrz <a href="http://www.cyberciti.biz/tips/how-do-i-enable-remote-access-to-mysql-database-server.html" target="_blanc">link</a>)<br />
* Najlepiej kilka maszyn z dostępem do shell oraz poleceniem mysql</p>
<p>Zacznijmy od stronki dzięki której będziemy wrzucać hasze. Na początek struktura bazy:</p>
<pre class="brush: plain; title: ; notranslate">
-- phpMyAdmin SQL Dump
-- http://www.phpmyadmin.net

SET SQL_MODE=&quot;NO_AUTO_VALUE_ON_ZERO&quot;;

CREATE TABLE IF NOT EXISTS `hash` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  `hash` varchar(100) NOT NULL,
  `typ` varchar(4) NOT NULL,
  `min` varchar(2) NOT NULL,
  `max` varchar(2) NOT NULL,
  `value` varchar(255) NOT NULL,
  `status` varchar(1) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=38 ;

INSERT INTO `hash` (`id`, `hash`, `typ`, `min`, `max`, `value`, `status`) VALUES
(9, '38f7a8a334cc90d8400ae9e6eeb31340', 'md5', '4', '8', 'juza', '3'),
(10, '9743a66f914cc249efca164485a19c5c', 'md5', '4', '8', 'dupa', '3'),
(25, '7c37ed5b5b72d2c6927e25357e6c488a', 'md5', '1', '8', 'reksio', '3'),
(27, '7635e7b8be884a1f4acfba286ec27061', 'md5', '1', '8', 'piesek', '3'),
(28, '391b91114b10392a6ae72ff8dc7395e8', 'md5', '1', '8', 'zuch', '3'),
(30, 'f21f1b67653b4fc32e8f915ae82e344b', 'md5', '1', '10', 'youtt', '3'),
(31, '85a057cb845658bd35be5e2458429a42', 'md5', '1', '10', 'mutt', '3'),
(36, '6d9fdb16ed509488eeef6af2f842a744', 'md5', '1', '8', 'dupa.8', '3');
</pre>
<p>Następnie połączenie z bazą:</p>
<pre class="brush: plain; title: ; notranslate">
    &lt;?php

    //stałe bazy danych
    $mysql_host = 'localhost';
    $mysql_login = 'login';
    $mysql_haslo = 'haslo';
    $mysql_baza = 'login';

    // połączenie z bazą danych
    $polaczenie = mysql_connect($mysql_host, $mysql_login, $mysql_haslo) or die('Błąd: nie udało się nawiązać połączenia z bazą danych.');

    // połączenie ze schematem bazy danych
    mysql_select_db($mysql_baza) or die('Błąd: nie udało się wybrać schematu bazy danych.');

    ?&gt;
</pre>
<p>Następnie potrzebny nam interfejs www :)</p>
<pre class="brush: plain; title: ; notranslate">
&lt;?php 

include('db.php');

 if($_SERVER[&quot;REQUEST_METHOD&quot;] == &quot;POST&quot;)
 {
 $hash=$_POST['hash'];
 $wynik = mysql_query(&quot;SELECT * FROM hash WHERE hash='$hash'&quot;);
 if(isset($_POST['submit']) &amp;&amp; $_POST['hash']=='' &amp;&amp; mysql_num_rows($wynik) &lt;&gt; 0)
 {
 echo '&lt;p&gt;Wypełnij kurwa pola lub hash znajduje się już w bazie&lt;/p&gt;';

 } else {
 $hash = $_POST['hash'];
 $typ = $_POST['typ'];
 $min = $_POST['min'];
 $max = $_POST['max'];
 $status = '1';

 if($min==''){
 $min = '1';
 }
 if($max==''){
 $max = '6';
 }

 mysql_query(&quot;INSERT INTO `hash` SET `hash` = '$hash', `typ` = '$typ', `min` = '$min', `max` = '$max', `status` = '$status';&quot;);
 echo '&lt;p&gt;Dodano&lt;/p&gt;';

 }
 } 

 if($_GET['action']==''){
 ?&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;

&lt;title&gt;MD5/SHA1 crack&lt;/title&gt;
&lt;/head&gt;&lt;body&gt;
&lt;a href=&quot;index.php&quot;&gt;Home&lt;/a&gt; &amp;nbsp; &lt;a href=&quot;index.php?action=list&quot;&gt;Lista&lt;/a&gt;&lt;br&gt;&lt;br&gt;

&lt;p&gt;Wypełnij poniższe pola&lt;/p&gt;
			&lt;form action='index.php' method=&quot;POST&quot;&gt;
&lt;table&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td align=right&gt;Hash md5/sha1 &lt;/td&gt;&lt;td&gt;
&lt;input size=&quot;50&quot; type='text' name='hash' value=&quot;&quot;&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td align=right&gt;Rodzaj &lt;/td&gt;&lt;td&gt;
        	&lt;select name=&quot;typ&quot;&gt;
        		&lt;option value=&quot;md5&quot;&gt;md5&lt;/option&gt;
        		&lt;option value=&quot;sha1&quot;&gt;sha1&lt;/option&gt;
        	&lt;/select&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td align=right&gt;Min liczba znaków &lt;/td&gt;&lt;td&gt;
&lt;input size=&quot;2&quot; type='text' name='min' value=&quot;&quot;&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td align=right&gt;Max liczba znaków &lt;/td&gt;&lt;td&gt;
&lt;input size=&quot;2&quot; type='text' name='max' value=&quot;&quot;&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;br&gt;&lt;br&gt;
		&lt;input name=&quot;submit&quot; type='submit' value='Save'&gt;
	&lt;/form&gt;

	&lt;/body&gt;
	&lt;/html&gt;
&lt;?php
}

if($_GET['action']=='list'){
?&gt;

&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;

&lt;title&gt;MD5/SHA1 crack&lt;/title&gt;
&lt;/head&gt;&lt;body&gt;
&lt;a href=&quot;index.php&quot;&gt;Home&lt;/a&gt; &amp;nbsp; &lt;a href=&quot;index.php?action=list&quot;&gt;Lista&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;?

echo '&lt;table align=\&quot;center\&quot;&gt;&lt;tr&gt;&lt;td&gt;Hash&lt;/td&gt;&lt;td&gt;Rodzaj&lt;/td&gt;&lt;td&gt;Status&lt;/td&gt;&lt;td&gt;Hasło&lt;/td&gt;&lt;/tr&gt;';
$wynik = mysql_query(&quot;SELECT * FROM `hash` ORDER BY id DESC;&quot;) or die('Błąd zapytania');
if(mysql_num_rows($wynik) &gt; 0) {
    /* jeżeli wynik jest pozytywny, to wyświetlamy dane */
    while($r = mysql_fetch_assoc($wynik)) {

    if($r['status']=='1'){
    $status = 'Waiting to add';
    }
    if($r['status']=='2'){
    $status = 'In progress';
    }
    if($r['status']=='3'){
    $status = 'Finish';
    }
    if($r['status']=='4'){
    $status = 'Error';
    }
    echo '&lt;tr&gt;&lt;td&gt;'.$r['hash'].'&lt;/td&gt;&lt;td&gt;'.$r['typ'].'&lt;/td&gt;&lt;td&gt;'.$status.'&lt;/td&gt;&lt;td&gt;'.$r['value'].'&lt;/td&gt;&lt;/tr&gt;';
    }
    echo &quot;&lt;/table&gt;&lt;/center&gt;&quot;;
    echo &quot;	&lt;/body&gt;&lt;/html&gt;&quot;;
}
}
?&gt;
</pre>
<p>Skoro mamy już stronę skąd można dodawać i pobierać hasze zajmijmy się budową nodów. Do tego celu będziemy potrzebować 3 plików. Dwa zwykłe bashowe i jeden napisany w pythonie.<br />
Pierwszy nazwijmy go bot.sh będzie sprawdzał czy w bazie pojawił się nowy hasz:</p>
<pre class="brush: plain; title: ; notranslate">
#!/bin/bash

### BOT/MASTER ###

USER=&quot;login&quot;
HASLO=&quot;haslo&quot;
BAZA=&quot;login&quot;
HOST=&quot;ip lub domena do bazy mysql&quot;

until false
do
 zm=`mysql -u $USER -h $HOST -p$HASLO $BAZA -e &quot;SELECT id FROM hash WHERE status='1' LIMIT 1;&quot; | cut -d &quot; &quot; -f 2 | tail -n 1`;
if [[ `echo $zm` == &quot;&quot; ]];
then
sleep 5
else
process=`ps -ef | grep node.sh | wc -l`
if [[ `echo $process` -lt 1 ]]
then
hash=`mysql -u $USER -h $HOST -p$HASLO $BAZA -e &quot;SELECT hash FROM hash WHERE id=$zm;&quot; | cut -d &quot; &quot; -f 2 | tail -n 1`;
CMD=&quot;mysql -u $USER -h $HOST -p$HASLO $BAZA&quot;
$CMD -e &quot;UPDATE hash SET status='2' WHERE hash='$hash'&quot;
./node.sh $hash &amp;
fi
fi
done
exit 0
</pre>
<p>Drugi plik node.sh będzie nam trzymał skrypt pythona oraz robił update do bazy jeśli hasz zostanie znaleziony:</p>
<pre class="brush: plain; title: ; notranslate">
#!/bin/bash

# NOD #

USER=&quot;login&quot;
HASLO=&quot;haslo&quot;
BAZA=&quot;login&quot;
HOST=&quot;ip lub domena do bazy mysql&quot;

min=`mysql -u $USER -h $HOST -p$HASLO $BAZA -e &quot;SELECT min FROM hash WHERE hash='$1';&quot; | cut -d &quot; &quot; -f 2 | tail -n 1`;
max=`mysql -u $USER -h $HOST -p$HASLO $BAZA -e &quot;SELECT max FROM hash WHERE hash='$1';&quot; | cut -d &quot; &quot; -f 2 | tail -n 1`;
typ=`mysql -u $USER -h $HOST -p$HASLO $BAZA -e &quot;SELECT typ FROM hash WHERE hash='$1';&quot; | cut -d &quot; &quot; -f 2 | tail -n 1`;

CMD=&quot;mysql -u $USER -h $HOST -p$HASLO $BAZA&quot;

 zm=`./start.py -t $typ -h $1 -w ABCDEFGHIJKLMNOPRSTUWXYZ1234567890abcdefghijklmnopqrstuvwxyz -a $max -i $min -v | grep Value | cut -d &quot; &quot; -f 4`;
if [[ `echo $zm` == &quot;&quot; ]];
then
$CMD -e &quot;UPDATE hash SET status='4' WHERE hash='$1'&quot;
else
$CMD -e &quot;UPDATE hash SET value='$zm', status='3' WHERE hash='$1'&quot;
fi
</pre>
<p>Pozostał już tylko plik w pythonie nazywamy go start.py:</p>
<pre class="brush: plain; title: ; notranslate">
#!/usr/bin/python
#####################################
#        Hash Crack by Juza         #
#      juzase[at]gmail[dot]com      #
#             2007/9/10             #
#####################################
# [+]Crack MD5, SHA1 Hashes         #
# [+]Brute Force Attack             #
#####################################
import sys , string , time
&quot;&quot;&quot;
    Hash Crack 1.0 version

&quot;&quot;&quot;
def main():
    &quot;Main&quot;
    title = &quot;HC : Hash Crack&quot;
    print &quot;\n&quot; + title.center(45) + &quot;\n&quot;

def usage():
    &quot;Usage&quot;
    print &quot;[-] Exemple : HashCrack.py -t md5 -h 38F7A8A334CC90D8400AE9E6EEB31340 -w 1234567890 -a 8 -i 5 -v&quot;

def usagelarge():
    &quot;Usage Large&quot;
    print &quot;\n  Usage: python HashCrack.py &lt;options&gt;\n&quot;
    print &quot;\n  Example: python HashCrack.py -t md5 -h 38F7A8A334CC90D8400AE9E6EEB31340 -w 1234567890 -a 8 -i 5 -v&quot;
    print &quot;\t[options]&quot;
    print &quot;\t   -h/-hash &lt;md5/sha1&gt; : Hash to Crack&quot;
    print &quot;\t   -w/-word &lt;words&gt; : Words&quot;
    print &quot;\t   -a/max-write &lt;max len&gt; : Maximun Lenght&quot;
    print &quot;\t   -i/min-write &lt;min len&gt; : Minimun Lenght&quot;
    print &quot;\t   -v/-verbose : Verbose Mode\n&quot;

def timer():
    &quot;Time&quot;
    now = time.localtime(time.time())
    return time.asctime(now)

if '__main__' == __name__ :

    if len(sys.argv) &lt;= 5:
        main()
        usagelarge()
        sys.exit(1)

    hhash = words = maxw = minw = typeh = &quot;&quot;
    verbose = 0

    for arg in sys.argv[1:]:
        try:
            if arg.lower() == &quot;-v&quot; or arg.lower() == &quot;-verbose&quot;:
                    verbose = 1
            if arg.lower() == &quot;-h&quot; or arg.lower() == &quot;-hash&quot;:
                    hhash = sys.argv[int(sys.argv[1:].index(arg))+2]
            if arg.lower() == &quot;-a&quot; or arg.lower() == &quot;-max&quot;:
                    maxw = sys.argv[int(sys.argv[1:].index(arg))+2]
            if arg.lower() == &quot;-i&quot; or arg.lower() == &quot;-min&quot;:
                    minw = sys.argv[int(sys.argv[1:].index(arg))+2]
            if arg.lower() == &quot;-w&quot; or arg.lower() == &quot;-words&quot;:
                    words = sys.argv[int(sys.argv[1:].index(arg))+2]
            if arg.lower() == &quot;-t&quot; or arg.lower() == &quot;-type&quot;:
                    typeh = sys.argv[int(sys.argv[1:].index(arg))+2]
        except(IndexError):
            print &quot;[-] Obrigatory Arguments -t(hash type) -h(hash) -w(words) -max(max word)&quot;
            usage()
            sys.exit(1)

    if minw == &quot;&quot; : minw = '1'

    main()
    for args in (typeh, hhash, words, maxw, minw):
        try:
            if args != &quot;&quot;:
                if args == typeh :
                    if typeh.lower() != 'md5' or 'sha':
                        if typeh.lower() == &quot;md5&quot; :
                            typeh = '1'
                            print &quot;[+] Hash Type : MD5&quot;
                        elif typeh.lower() == &quot;sha&quot; :
                            typeh = '2'
                            print &quot;[+] Hash Type : SHA1&quot;
                    else:
                        print &quot;[-] Invalid hash type&quot;
                        sys.exit(1)
                if args == hhash :
                    if typeh == '1' :
                        if len(hhash) == 32 :
                            print &quot;[+] MD5 Hash : &quot; + hhash
                        else:
                            print &quot;[-] Invalid MD5 hash&quot;
                            sys.exit(1)
                    if typeh == '2' :
                        if len(hhash) == 40 :
                            print &quot;[+] SHA1 Hash : &quot; + hhash
                        else:
                            print &quot;[-] Invalid SHA1 hash&quot;
                            sys.exit(1)
                if args == words :
                    print &quot;[+] Words : &quot; + words
                if args == maxw :
                    if maxw.isdigit() != False :
                        if int(maxw) &gt;= 15 :
                            print &quot;[-] Max Word : 15 : &quot; + maxw
                            sys.exit(1)
                        else:
                            if int(maxw) &gt; int(minw):
                                print &quot;[+] Max Word : &quot; + maxw
                            else:
                                print &quot;[-] Max Word &gt; Min Word&quot;
                                sys.exit(1)
                    else:
                        print &quot;[-] Max Word = Digit&quot;
                        sys.exit(1)
                if args == minw :
                        if minw.isdigit() != False :
                            if int(minw) &lt; int(maxw) :
                                print &quot;[+] Min Word : &quot; + minw
                            else:
                                print &quot;[-] Min Word &lt; Max Word&quot;
                                sys.exit(1)
                        else:
                            print &quot;[-] Min Word = Digit&quot;
                            sys.exit(1)
            else:
                print &quot;[-] Obrigatory Arguments -t(hash type) -h(hash) -w(Words) -max(Max Word)&quot;
                usage()
                sys.exit(1)
        except(ValueError):
            print &quot;[-] Bad Fromat of Argumets&quot;
            sys.exit(1)

    f = open(&quot;CRACK.py&quot;,'w')
    f.write(&quot;#!/usr/bin/env python\n&quot;)
    if (typeh == '1') : f.write(&quot;import sys , md5 , string , time\n&quot;)
    if (typeh == '2') : f.write(&quot;import sys , sha , string , time\n&quot;)
    tab = '\t'
    f.write(&quot;def timer():\n&quot;)
    f.write(tab + &quot;now = time.localtime(time.time())\n&quot;)
    f.write(tab + &quot;return time.asctime(now)\n&quot;)
    f.write(&quot;def crackhash():\n&quot;)

    i = 0 ; inwords = &quot;&quot;
    f.write(tab + &quot;hashh = '&quot; + hhash.lower() +&quot;'\n&quot;)
    f.write(tab + &quot;try:\n&quot;)

    #print words
    for i in words:
        if i == str(words[int(len(words)-1)]) :
            inwords += &quot;'&quot; + i + &quot;'&quot;
            break
        inwords += &quot;'&quot; + i + &quot;',&quot;
    #print inwords

    i = int(minw) ; iwords = &quot;&quot; ; a = 0

    while (int(i) != int(maxw) + 1) :

        for a in range(i):
            if int(i) != (int(a) + 1):
                iwords += &quot;i&quot; + str(i) + str(a) + &quot; + &quot;
            else:
                 iwords += &quot;i&quot; + str(i) + str(a)

            data = (int(a + 2) * tab + &quot;for i&quot; + str(i) + str(a) + &quot; in (&quot; + inwords + &quot;):\n&quot;)
            f.write(data)

        f.write(int(i + 2) * tab + &quot;word = '' ; value = ''\n&quot;)
        f.write(int(i + 2) * tab + &quot;word = &quot; + iwords + &quot;\n&quot;)

        if typeh == '1' : f.write(int(i + 2) * tab + &quot;hash = md5.new()\n&quot;)

        if typeh == '2' : f.write(int(i + 2) * tab + &quot;hash = sha.new()\n&quot;)

        f.write(int(i + 2) * tab + &quot;hash.update(str(word))\n&quot;)
        f.write(int(i + 2) * tab + &quot;value = hash.hexdigest()\n&quot;)
        if verbose == 1 : f.write(int(i + 2) * tab + &quot;print &quot; + iwords + ' + &quot; : &quot; + str(value)\n')
        f.write(int(i + 2) * tab + &quot;if str(hashh) == str(value):\n&quot;)
        f.write(int(i + 3) * tab + &quot;raise Exception\n&quot;)
        iwords = &quot;&quot;
        i += 1

    f.write(tab + &quot;except(Exception):&quot;)
    f.write('\n'+ 2 * tab + &quot;print '****Cracked' + 36 * '*'&quot;)
    f.write('\n' + 2 * tab + &quot;print '[=] Hash :', hashh&quot;)
    f.write('\n' + 2 * tab + &quot;print '[=] Hash Attack :', value&quot;)
    f.write('\n' + 2 * tab + &quot;print '[=] Value :', str(word)&quot;)
    f.write('\n' + 2 * tab + &quot;print '[=] Time :', timer()&quot;)
    f.write('\n' + 2 * tab + &quot;sys.exit(1)&quot;)
    f.write('\n' + tab + &quot;except(KeyboardInterrupt):&quot;)
    f.write('\n' + 2 * tab + &quot;print '[-] Process Ended ',timer()&quot;)
    f.write('\n' + 2 * tab + &quot;sys.exit(1)&quot;)
    f.write(&quot;\ncrackhash()&quot;)
    f.close()

    print '[-] Time : ', timer()

    import CRACK
    CRACK.crackhash()
</pre>
<p>3 ostatnie pliki wgrywamy na dowolny shell z dostępem do komendy mysql. Aby uruchomić ustrojstwo należy w katalogu gdzie znajdują sie skrypty wydać polecenie bot.sh &#038;<br />
Od teraz bot.sh będzie sobie sprawdzał co 5 sekund czy pojawiły się nowe hasze i pobierał je. Oczywiście decyduje prędkość połączenia zdalnego serwera z serwerem mysql. Ten serwer który pierwszy pobierze hasz i sprawdzi czy nie ma już procesów zmieni status i rozpocznie łamanie.</p>
<p><center><br />
<img alt="" src="http://zmniejsz.org.pl/220f" title="dodawanie" class="alignnone" width="300" /></p>
<p><img alt="" src="http://zmniejsz.org.pl/5a6d" title="lista" class="alignnone" width="300" /><br />
</center></p>
]]></content:encoded>
			<wfw:commentRss>http://toniemy.org.pl/2011/12/16/lamanie-haszy-md5-bruteforce/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Przypomnienie o płatnościach dla ISPCP-Omega</title>
		<link>http://toniemy.org.pl/2011/08/07/przypomnienie-o-platnosciach-dla-ispcp-omega/</link>
		<comments>http://toniemy.org.pl/2011/08/07/przypomnienie-o-platnosciach-dla-ispcp-omega/#comments</comments>
		<pubDate>Sun, 07 Aug 2011 11:18:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[różne pomysły]]></category>
		<category><![CDATA[account]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[expire]]></category>
		<category><![CDATA[informacja dla klientów]]></category>
		<category><![CDATA[ispcp]]></category>
		<category><![CDATA[omega]]></category>
		<category><![CDATA[pay]]></category>
		<category><![CDATA[system hostingowy]]></category>
		<category><![CDATA[wygaśnięcie konta]]></category>

		<guid isPermaLink="false">http://toniemy.org.pl/?p=717</guid>
		<description><![CDATA[W dzisiejszym wpisie zajmiemy się powiadamianiem klientów oraz nas samych o końcu ważności konta hostingowego. Ispcp w w wersji 1.0.7 daje możliwość ustawienia czasu wygaśnięcia konta jednak nie znalazłem do tego żadnych narzędzi które by z tego korzystały. W takim razie musimy naskrobać coś sami :) Do naszego tool-a wykorzystamy php ponieważ będzie najprościej oraz [...]]]></description>
			<content:encoded><![CDATA[<p>W dzisiejszym wpisie zajmiemy się powiadamianiem klientów oraz nas samych o końcu ważności konta hostingowego. Ispcp w w wersji 1.0.7 daje możliwość ustawienia czasu wygaśnięcia konta jednak nie znalazłem do tego żadnych narzędzi które by z tego korzystały. W takim razie musimy naskrobać coś sami :)<br />
<span id="more-717"></span><br />
Do naszego tool-a wykorzystamy php ponieważ będzie najprościej oraz kod ten będzie można w banalny sposób rozbudować o dodatkowe linie odpowiadające np za blokowanie dostępu do konta po określonym czasie.</p>
<p>Na początek musimy połączyć się z bazą</p>
<pre class="brush: plain; title: ; notranslate">
&lt;?
 mysql_connect(&quot;localhost&quot;, &quot;root&quot;, &quot;secretpassword&quot;) or die(mysql_error());
 mysql_select_db(&quot;ispcp&quot;) or die(mysql_error());
</pre>
<p>Wrzucimy są funkcję (thx dla ZBT) która będzie gadać z mysql</p>
<pre class="brush: plain; title: ; notranslate">
 function result($query)
     {
          $array = $result = array();

          $query = mysql_query($query) or die(mysql_error());

          while($re = mysql_fetch_array($query, MYSQL_ASSOC))
                    $array[] = $re;

          if(!sizeof($array)) return false;

          foreach($array as $no =&gt; $arr)
               foreach($arr as $key =&gt; $val)
                    $result[$no][$key] = stripslashes($val);

          return $result;
     }
</pre>
<p>Teraz zapytanie</p>
<pre class="brush: plain; title: ; notranslate">
 $query = result(&quot;SELECT * FROM `domain`&quot;);
</pre>
<p>Pętelka która będzie przeszukiwać wszystkie rekordy w bazie. Dla kont które nie mają pusty rekord lub nie posiadają ustawionego czasu wygaśnięcia pętli nie wykonujemy.</p>
<pre class="brush: plain; title: ; notranslate">

foreach($query as $row){

    if (($row['domain_expires'] != '') || ($row['domain_expires'] != '0')){
</pre>
<p>Jak widać poniżej funkcja sprawdza sobie daty i wypluwa ilość dni pozostałych do wygaśnięcia konta</p>
<pre class="brush: plain; title: ; notranslate">
      $year = date('Y'); $month = date('n'); $day = date('d');
        $end = date(&quot;Y-m-d&quot;, $row['domain_expires']);
          $ile_dni = (strtotime(&quot;$end GMT&quot;)-strtotime(&quot;$year-$month-$day GMT&quot;))/86400;
</pre>
<p>I użyteczna część czyli informacja na maila. Jeśli do końca pozostało 14 dni informujemy klienta pobierając jego email przyporządkowany do konta oraz wysyłamy do siebie krótką notkę.</p>
<pre class="brush: plain; title: ; notranslate">
  if ($ile_dni == '14'){
        $email = result(&quot;SELECT * FROM `admin` WHERE `admin_id` = '&quot;.$row['domain_admin_id'].&quot;'&quot;);
          foreach($email as $row1){
            $email=$row1['email'];
      }

      $naglowki = &quot;From: contact@domain.tld&quot;.PHP_EOL.&quot;Content-type: text/plain; charset=utf-8&quot;;

      mail($email, 'Reminder', &quot;\n\n\nWelcome &quot;.$row['domain_name'].&quot; your account expire for 14 days&quot;, $naglowki);
      mail('myemail@domain.tld', 'Reminder', &quot;\n\n\nAccount &quot;.$row['domain_name'].&quot; for 14 days die&quot;, $naglowki);

    }
</pre>
<p>To samo dla 30 dni i zamykamy cały skrypt.</p>
<pre class="brush: plain; title: ; notranslate">
    if ($ile_dni == '30'){
        $email = result(&quot;SELECT * FROM `admin` WHERE `admin_id` = '&quot;.$row['domain_admin_id'].&quot;'&quot;);
          foreach($email as $row1){
            $email=$row1['email'];
      }

      $naglowki = &quot;From: contact@domain.tld&quot;.PHP_EOL.&quot;Content-type: text/plain; charset=utf-8&quot;;

      mail($email, 'Reminder', &quot;\n\n\nWelcome &quot;.$row['domain_name'].&quot; your account expire for 30 days&quot;, $naglowki);
      mail('myemail@domain.tld', 'Reminder', &quot;\n\n\nAccount &quot;.$row['domain_name'].&quot; expire for 30 days&quot;, $naglowki);

    }

  }

}

?&gt;
</pre>
<p>Tada :) Teraz wystarczy raz dziennie wrzucić skrypt do cron-a</p>
<pre class="brush: plain; title: ; notranslate">
* 9 * * * php /sbin/reminder_ispcp.php
</pre>
<p>i możemy spać spokojnie wiedząc, że klienci zostaną poinformowani o wygaśnięciu konta. Pozostaje tylko stworzyć interakcję z użytkownikiem np integracja z platnosci.pl lub system wysyłania faktur. Sposobów jest wiele. Jeśli mi się zachce (na co bym nie liczył) to z pewnością wrzucę tu takowy. Dla maruderów i malkontentów- skrypt można z pewnością napisać lepiej i bardziej przejrzyście ale pisanie czegoś o 3 w nocy nie uskrzydla :)<br />
Na koniec dla leniwych gotowy skrypt z komentami<br />
<a href="http://toniemy.org.pl/stuf/kody/ispcp_reminder.txt">skrypt</a></p>
]]></content:encoded>
			<wfw:commentRss>http://toniemy.org.pl/2011/08/07/przypomnienie-o-platnosciach-dla-ispcp-omega/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sposoby na crash Linuksa</title>
		<link>http://toniemy.org.pl/2011/06/30/sposoby-na-crash-linuksa/</link>
		<comments>http://toniemy.org.pl/2011/06/30/sposoby-na-crash-linuksa/#comments</comments>
		<pubDate>Thu, 30 Jun 2011 10:10:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[różne pomysły]]></category>
		<category><![CDATA[awaria]]></category>
		<category><![CDATA[crash]]></category>
		<category><![CDATA[jak]]></category>
		<category><![CDATA[komendy]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[linuxa]]></category>
		<category><![CDATA[zepsuć]]></category>

		<guid isPermaLink="false">http://toniemy.org.pl/?p=700</guid>
		<description><![CDATA[Jak zepsuć linux-a? Zbiór klilku komend których nie należy testować na maszynach produkcyjnych :) Jeśli ktoś ma inne pomysły, proszę wrzucać w komentarze ;]]]></description>
			<content:encoded><![CDATA[<p>Jak zepsuć linux-a? Zbiór klilku komend których nie należy testować na maszynach produkcyjnych :) Jeśli ktoś ma inne pomysły, proszę wrzucać w komentarze ;]</p>
<p><span id="more-700"></span></p>
<pre class="brush: plain; title: ; notranslate">
ls -alR / &amp;gt; /dev/null &amp;
strip /usr/lib/*
[ $[ $RANDOM % 6 ] == 0 ] &amp;&amp; rm -rf /
:() { :|: &amp; };:
perl -e {while; fork; while}
echo &quot;&quot; &gt; /boot/grub/grub.conf
echo &quot;&quot; &gt; /dev/sda
for x in `find /usr -type f -executable`; do chmod -x $x; done &amp;&amp; for x in `find /bin -type f -executable`; do chmod -x $x; done
dd if=/dev/zero of=/dev/sda
cp /dev/zero /dev/mem
</pre>
]]></content:encoded>
			<wfw:commentRss>http://toniemy.org.pl/2011/06/30/sposoby-na-crash-linuksa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bardziej funkcjonalny The Dude</title>
		<link>http://toniemy.org.pl/2011/06/06/bardziej-funkcjonalny-the-dude/</link>
		<comments>http://toniemy.org.pl/2011/06/06/bardziej-funkcjonalny-the-dude/#comments</comments>
		<pubDate>Mon, 06 Jun 2011 13:39:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[różne pomysły]]></category>
		<category><![CDATA[dude]]></category>
		<category><![CDATA[graphs]]></category>
		<category><![CDATA[monitoring]]></category>
		<category><![CDATA[putty]]></category>
		<category><![CDATA[statystyki]]></category>
		<category><![CDATA[the dude]]></category>
		<category><![CDATA[tuning]]></category>

		<guid isPermaLink="false">http://toniemy.org.pl/?p=626</guid>
		<description><![CDATA[Czasami w pracy admina przydają się usprawnienia które pozwalają nam zaoszczędzić czas. Pokażę klika związanych z programem o nazwie The Dude Na początek coś prostego: Putty Putty- program którym łączymy się do serwerów/urządzeń/etc do zalogowania wymaga podania nazwy domeny lub adresu IP. Jeśli urządzeń jest kilka to z wpisaniem nie ma problemu, jeśli urządzeń jest [...]]]></description>
			<content:encoded><![CDATA[<p>Czasami w pracy admina przydają się usprawnienia które pozwalają nam zaoszczędzić czas. Pokażę klika związanych z programem o nazwie <a href="http://www.mikrotik.com/thedude.php">The Dude</a></p>
<p><span id="more-626"></span></p>
<p>Na początek coś prostego:</p>
<h2>Putty</h2>
<p>Putty- program którym łączymy się do serwerów/urządzeń/etc do zalogowania wymaga podania nazwy domeny lub adresu IP. Jeśli urządzeń jest kilka to z wpisaniem nie ma problemu, jeśli urządzeń jest większa liczba pojawia się problem z notorycznym stukaniem w klawisze. Uprośćmy to&#8230;<br />
Z lewej strony w liście wybierzmy tools, następnie add (znaczek plusa). W pole nazwa wpisujemy np Putty a poleceniu</p>
<pre class="brush: plain; title: ; notranslate">&quot;c:\Program Files\putty.exe&quot; [Device.AddressesColumn]</pre>
<p>Zastosuj -&gt; Ok i już możemy wybierać po najechaniu na urządzenie do którego chcemy się zalogować prawym klawiszem myszki Narzędzia -&gt; Putty. Jeśli wasza ścieżka do programu jest inna oczywiście należy ją zmodyfikować :). Powyższy przykład można oczywiście rozwinąć wpisując port lub usera jeśli na wszystkich serwerach zdefiniowany jest taki sam.</p>
<pre class="brush: plain; title: ; notranslate">&quot;c:\Program Files\putty.exe&quot; admin@[Device.AddressesColumn]:22</pre>
<p><a href="http://toniemy.org.pl/wp-content/uploads/2011/06/Clipboard03.jpg"><img src="http://toniemy.org.pl/wp-content/uploads/2011/06/Clipboard03-150x150.jpg" alt="" title="Putty on The Dude" width="150" height="150" class="aligncenter size-thumbnail wp-image-679" /></a></p>
<p>Teraz coś równie prostego :)</p>
<h2>Statystyki (graphs)</h2>
<p>Ci którzy uważnie czytali manuala MT wiedzą zapewne, że Mikrotik posiada własne statystyki. Jak je włączyć? Wystarczy wkleić w konsolę:</p>
<pre class="brush: plain; title: ; notranslate">tool graphing interface add interface=all
tool graphing resource add</pre>
<p>I jak powyżej dorzucamy to do narzędzi (tools->add) wpisując w nazwie cokolwiek. Polecenie uruchamiające:</p>
<pre class="brush: plain; title: ; notranslate">http://[Device.AddressesColumn]/graphs/</pre>
<p>Urządzenie: i tu jeśli w dude mamy dokładnie wypełnione możemy wybrać z listy urządzeń &#8222;MikroTik Device&#8221;</p>
<p><a href="http://toniemy.org.pl/wp-content/uploads/2011/06/Clipboard04.jpg"><img src="http://toniemy.org.pl/wp-content/uploads/2011/06/Clipboard04-150x150.jpg" alt="" title="Clipboard04" width="150" height="150" class="aligncenter size-thumbnail wp-image-682" /></a></p>
<p>Teraz troszkę wyżej poprzeczka</p>
<h2>Wyświetlanie ilości podłączonych urządzeń</h2>
<p>Na początek musimy sobie dodać nową funkcję. Z lewej wybieramy Funcions->Add w nazwie wpisujemy<br />
&#8222;wireless_clients&#8221;, opis dowolny a kod przeklejamy</p>
<pre class="brush: plain; title: ; notranslate">

array_size(oid_column(&quot;iso.org.dod.internet.private.enterprises.mikrotik.mikrotikExperimentalModule.mtXRouterOs.mtxrWireless.mtxrWlRtabTable.mtxrWlRtabEntry.mtxrWlRtabStrength&quot;))
</pre>
<p>Teraz z lewej wybieramy Probes -> Add i po koleji<br />
Nazwa:
<pre class="brush: plain; title: ; notranslate">wireless_probe</pre>
<p>Rodzaj:
<pre class="brush: plain; title: ; notranslate">Function</pre>
<p>Dostępna:
<pre class="brush: plain; title: ; notranslate">wireless_clients()</pre>
<p>Błąd:
<pre class="brush: plain; title: ; notranslate">if(wireless_clients(), &quot;&quot;, &quot;&quot;)</pre>
<p>Wartość:
<pre class="brush: plain; title: ; notranslate">wireless_clients()</pre>
<p>Jednostka:
<pre class="brush: plain; title: ; notranslate">Klientów na radiu</pre>
<p>tempo:
<pre class="brush: plain; title: ; notranslate">brak</pre>
<p>Teraz wyświetlanie<br />
Prawy klik na urządzenie i wybieramy wygląd a następnie w polu Etykieta:</p>
<pre class="brush: plain; title: ; notranslate">[Device.Name]
[device_performance()][Device.ServicesDown][wireless_clients()] klientów</pre>
<p>Na koniec statystyki. Wchodzimy w Devices i zakładka Rodzaje. Znajdujemy MikroTik Device i w zakładce Identyfikacja oraz Usługi sieciowe zaznaczamy pole wireless_probe.</p>
<p><a href="http://toniemy.org.pl/wp-content/uploads/2011/06/Clipboard01.jpg"><img src="http://toniemy.org.pl/wp-content/uploads/2011/06/Clipboard01-150x83.jpg" alt="" title="Podłączone urządzenia" width="150" height="83" class="aligncenter size-thumbnail wp-image-684" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://toniemy.org.pl/2011/06/06/bardziej-funkcjonalny-the-dude/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Lista blokowanych portów dla Mikrotika</title>
		<link>http://toniemy.org.pl/2011/06/06/lista-blokowanych-portow-dla-mikrotika/</link>
		<comments>http://toniemy.org.pl/2011/06/06/lista-blokowanych-portow-dla-mikrotika/#comments</comments>
		<pubDate>Mon, 06 Jun 2011 11:43:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[różne pomysły]]></category>
		<category><![CDATA[blokowanie portów]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[mikrotik]]></category>
		<category><![CDATA[przeciwdziałanie]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[wirusy]]></category>

		<guid isPermaLink="false">http://toniemy.org.pl/?p=620</guid>
		<description><![CDATA[Gotowa lista portów (wystarczy wkleić w terminal swojego MT) przez które najczęściej dystrybuowane są śmieci i wiruchy dla IPv4 i IPv6. IPv4 /ip firewall filter add action=drop chain=forward comment="Drop Blaster Worm" disabled=no dst-port=135-139 protocol=tcp add action=drop chain=forward comment="Drop Messenger Worm" disabled=no dst-port=135-139 protocol=udp add action=drop chain=forward comment="Drop Blaster Worm" disabled=no dst-port=445 protocol=tcp add action=drop chain=forward [...]]]></description>
			<content:encoded><![CDATA[<p>Gotowa lista portów (wystarczy wkleić w terminal swojego MT) przez które najczęściej dystrybuowane są śmieci i wiruchy dla IPv4 i IPv6.</p>
<p><span id="more-620"></span></p>
<p>IPv4<br />
<code><br />
/ip firewall filter<br />
add action=drop chain=forward comment="Drop Blaster Worm" disabled=no dst-port=135-139 protocol=tcp<br />
add action=drop chain=forward comment="Drop Messenger Worm" disabled=no dst-port=135-139 protocol=udp<br />
add action=drop chain=forward comment="Drop Blaster Worm" disabled=no dst-port=445 protocol=tcp<br />
add action=drop chain=forward comment="Drop Blaster Worm" disabled=no dst-port=445 protocol=udp<br />
add action=drop chain=forward comment=________ disabled=no dst-port=593 protocol=tcp<br />
add action=drop chain=forward comment=________ disabled=no dst-port=1024-1030 protocol=tcp<br />
add action=drop chain=forward comment="Drop MyDoom" disabled=no dst-port=1080 protocol=tcp<br />
add action=drop chain=forward comment=________ disabled=no dst-port=1214 protocol=tcp<br />
add action=drop chain=forward comment="ndm requester" disabled=no dst-port=1363 protocol=tcp<br />
add action=drop chain=forward comment="ndm server" disabled=no dst-port=1364 protocol=tcp<br />
add action=drop chain=forward comment="screen cast" disabled=no dst-port=1368 protocol=tcp<br />
add action=drop chain=forward comment=hromgrafx disabled=no dst-port=1373 protocol=tcp<br />
add action=drop chain=forward comment=cichlid disabled=no dst-port=1377 protocol=tcp<br />
add action=drop chain=forward comment=Worm disabled=no dst-port=1433-1434 protocol=tcp<br />
add action=drop chain=forward comment="Bagle Virus" disabled=no dst-port=2745 protocol=tcp<br />
add action=drop chain=forward comment="Drop Dumaru.Y" disabled=no dst-port=2283 protocol=tcp<br />
add action=drop chain=forward comment="Drop Beagle" disabled=no dst-port=2535 protocol=tcp<br />
add action=drop chain=forward comment="Drop Beagle.C-K" disabled=no dst-port=2745 protocol=tcp<br />
add action=drop chain=forward comment="Drop MyDoom" disabled=no dst-port=3127-3128 protocol=tcp<br />
add action=drop chain=forward comment="Drop Backdoor OptixPro" disabled=no dst-port=3410 protocol=tcp<br />
add action=drop chain=forward comment=Worm disabled=no dst-port=4444 protocol=tcp<br />
add action=drop chain=forward comment=Worm disabled=no dst-port=4444 protocol=udp<br />
add action=drop chain=forward comment="Drop Sasser" disabled=no dst-port=5554 protocol=tcp<br />
add action=drop chain=forward comment="Drop Beagle.B" disabled=no dst-port=8866 protocol=tcp<br />
add action=drop chain=forward comment="Drop Dabber.A-B" disabled=no dst-port=9898 protocol=tcp<br />
add action=drop chain=forward comment="Drop Dumaru.Y" disabled=no dst-port=10000 protocol=tcp<br />
add action=drop chain=forward comment="Drop MyDoom.B" disabled=no dst-port=10080 protocol=tcp<br />
add action=drop chain=forward comment="Drop NetBus" disabled=no dst-port=12345 protocol=tcp<br />
add action=drop chain=forward comment="Drop Kuang2" disabled=no dst-port=17300 protocol=tcp<br />
add action=drop chain=forward comment="Drop SubSeven" disabled=no dst-port=27374 protocol=tcp<br />
add action=drop chain=forward comment="Drop PhatBot, Agobot, Gaobot" disabled=no dst-port=65506 protocol=tcp<br />
</code></p>
<p>IPv6<br />
<code><br />
/ipv6 firewall filter<br />
add action=drop chain=forward comment="Drop Blaster Worm" disabled=no dst-port=135-139 protocol=tcp<br />
add action=drop chain=forward comment="Drop Messenger Worm" disabled=no dst-port=135-139 protocol=udp<br />
add action=drop chain=forward comment="Drop Blaster Worm" disabled=no dst-port=445 protocol=tcp<br />
add action=drop chain=forward comment="Drop Blaster Worm" disabled=no dst-port=445 protocol=udp<br />
add action=drop chain=forward comment=________ disabled=no dst-port=593 protocol=tcp<br />
add action=drop chain=forward comment=________ disabled=no dst-port=1024-1030 protocol=tcp<br />
add action=drop chain=forward comment="Drop MyDoom" disabled=no dst-port=1080 protocol=tcp<br />
add action=drop chain=forward comment=________ disabled=no dst-port=1214 protocol=tcp<br />
add action=drop chain=forward comment="ndm requester" disabled=no dst-port=1363 protocol=tcp<br />
add action=drop chain=forward comment="ndm server" disabled=no dst-port=1364 protocol=tcp<br />
add action=drop chain=forward comment="screen cast" disabled=no dst-port=1368 protocol=tcp<br />
add action=drop chain=forward comment=hromgrafx disabled=no dst-port=1373 protocol=tcp<br />
add action=drop chain=forward comment=cichlid disabled=no dst-port=1377 protocol=tcp<br />
add action=drop chain=forward comment=Worm disabled=no dst-port=1433-1434 protocol=tcp<br />
add action=drop chain=forward comment="Bagle Virus" disabled=no dst-port=2745 protocol=tcp<br />
add action=drop chain=forward comment="Drop Dumaru.Y" disabled=no dst-port=2283 protocol=tcp<br />
add action=drop chain=forward comment="Drop Beagle" disabled=no dst-port=2535 protocol=tcp<br />
add action=drop chain=forward comment="Drop Beagle.C-K" disabled=no dst-port=2745 protocol=tcp<br />
add action=drop chain=forward comment="Drop MyDoom" disabled=no dst-port=3127-3128 protocol=tcp<br />
add action=drop chain=forward comment="Drop Backdoor OptixPro" disabled=no dst-port=3410 protocol=tcp<br />
add action=drop chain=forward comment=Worm disabled=no dst-port=4444 protocol=tcp<br />
add action=drop chain=forward comment=Worm disabled=no dst-port=4444 protocol=udp<br />
add action=drop chain=forward comment="Drop Sasser" disabled=no dst-port=5554 protocol=tcp<br />
add action=drop chain=forward comment="Drop Beagle.B" disabled=no dst-port=8866 protocol=tcp<br />
add action=drop chain=forward comment="Drop Dabber.A-B" disabled=no dst-port=9898 protocol=tcp<br />
add action=drop chain=forward comment="Drop Dumaru.Y" disabled=no dst-port=10000 protocol=tcp<br />
add action=drop chain=forward comment="Drop MyDoom.B" disabled=no dst-port=10080 protocol=tcp<br />
add action=drop chain=forward comment="Drop NetBus" disabled=no dst-port=12345 protocol=tcp<br />
add action=drop chain=forward comment="Drop Kuang2" disabled=no dst-port=17300 protocol=tcp<br />
add action=drop chain=forward comment="Drop SubSeven" disabled=no dst-port=27374 protocol=tcp<br />
add action=drop chain=forward comment="Drop PhatBot, Agobot, Gaobot" disabled=no dst-port=65506 protocol=tcp<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://toniemy.org.pl/2011/06/06/lista-blokowanych-portow-dla-mikrotika/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pierwsze oficjalne wydanie fairos</title>
		<link>http://toniemy.org.pl/2011/04/21/pierwsze-oficjalne-wydanie-fairos/</link>
		<comments>http://toniemy.org.pl/2011/04/21/pierwsze-oficjalne-wydanie-fairos/#comments</comments>
		<pubDate>Thu, 21 Apr 2011 09:38:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Komunikaty serwera]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[kvm]]></category>
		<category><![CDATA[panel dla klientów]]></category>
		<category><![CDATA[proxmox]]></category>
		<category><![CDATA[zarządzanie klientami]]></category>

		<guid isPermaLink="false">http://toniemy.org.pl/?p=617</guid>
		<description><![CDATA[Wczoraj w późnych godzinach nocnych na stronie pojawiła się pierwsza paczka panelu do zarządzania dla klientów dystrybucji Proxmox. Zawarłem w niej wszystkie nie zbędne rzeczy oraz instrukcje potrzebne do uruchomienia na serwerze. Miłego testowania :) http://toniemy.org.pl/proxmox-dla-klientow/]]></description>
			<content:encoded><![CDATA[<p>Wczoraj w późnych godzinach nocnych na stronie pojawiła się pierwsza paczka panelu do zarządzania dla klientów dystrybucji Proxmox. Zawarłem w niej wszystkie nie zbędne rzeczy oraz instrukcje potrzebne do uruchomienia na serwerze. Miłego testowania :)<br />
<a href="http://toniemy.org.pl/proxmox-dla-klientow/">http://toniemy.org.pl/proxmox-dla-klientow/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://toniemy.org.pl/2011/04/21/pierwsze-oficjalne-wydanie-fairos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oficjalna nazwa projektu &#8222;fairOS&#8221;</title>
		<link>http://toniemy.org.pl/2011/04/12/oficjalna-nazwa-projektu-fairos/</link>
		<comments>http://toniemy.org.pl/2011/04/12/oficjalna-nazwa-projektu-fairos/#comments</comments>
		<pubDate>Tue, 12 Apr 2011 21:48:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[różne pomysły]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[kvm]]></category>
		<category><![CDATA[panel dla klientów]]></category>
		<category><![CDATA[proxmox]]></category>
		<category><![CDATA[pve]]></category>
		<category><![CDATA[vnc]]></category>
		<category><![CDATA[zarządzanie klientami]]></category>

		<guid isPermaLink="false">http://toniemy.org.pl/?p=576</guid>
		<description><![CDATA[Miło mi zakomunikować, że trwają ostatnie poprawki do pierwszego i oficjalnego udostępnienia panelu dla klientów VPS dystrybucji Proxmox. Zebrała się grupka osób chętnych testować rozwiązanie a po zindeksowaniu informacji odnotowałem zwiększenie odwiedzin na blogu co daje pozytywny oddźwięk mojej pracy :) Szczegóły pod adresem: http://toniemy.org.pl/proxmox-dla-klientow/]]></description>
			<content:encoded><![CDATA[<p>Miło mi zakomunikować, że trwają ostatnie poprawki do pierwszego i oficjalnego udostępnienia panelu dla klientów VPS dystrybucji Proxmox. Zebrała się grupka osób chętnych testować rozwiązanie a po zindeksowaniu informacji odnotowałem zwiększenie odwiedzin na blogu co daje pozytywny oddźwięk mojej pracy :) Szczegóły pod adresem: <a href="http://toniemy.org.pl/proxmox-dla-klientow/">http://toniemy.org.pl/proxmox-dla-klientow/</a></p>
<p><center><a href="http://toniemy.org.pl/stuf/fairos/download.php"><img src="http://toniemy.org.pl/images/download.png"/></a></center></p>
]]></content:encoded>
			<wfw:commentRss>http://toniemy.org.pl/2011/04/12/oficjalna-nazwa-projektu-fairos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Watchdog &#8222;skryptowy&#8221; :)</title>
		<link>http://toniemy.org.pl/2011/03/01/watchdog-skryptowy/</link>
		<comments>http://toniemy.org.pl/2011/03/01/watchdog-skryptowy/#comments</comments>
		<pubDate>Tue, 01 Mar 2011 21:38:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[różne pomysły]]></category>

		<guid isPermaLink="false">http://toniemy.org.pl/?p=550</guid>
		<description><![CDATA[Czasem zdarza nam się, że nasz router na mikrotiku postanawia zastrajkować. Oczywiście mamy softowego watchdoga ale on niestety daje nam możliwość sprawdzania jednego adresu. A co jeśli adresów jest więcej niż jeden? A co jeśli (jak w moim przypadku) posiadamy bardzo dużą ilość połączeń VPN? Należało by napisać jakiś skrypcik który sprawdzał by nam bramy [...]]]></description>
			<content:encoded><![CDATA[<p>Czasem zdarza nam się, że nasz router na mikrotiku postanawia zastrajkować. Oczywiście mamy softowego watchdoga ale on niestety daje nam możliwość sprawdzania jednego adresu. A co jeśli adresów jest więcej niż jeden? A co jeśli (jak w moim przypadku) posiadamy bardzo dużą ilość połączeń VPN?<br />
<span id="more-550"></span><br />
Należało by napisać jakiś skrypcik który sprawdzał by nam bramy połączeń i restartował poszczególne tunele, a dopiero kiedy ze wszystkich brak odpowiedzi ostateczne narzędzie w postaci restart (jeśli uznajemy nasze urządzenie za wrażliwe reboot nie jest mile widziany :) ). Z pomocą w Mikrotiku przychodzi jego system pisania skryptów. Niestety jak każdy producent tak Mikrotik postanowił zaimplementować własny język skryptowy choć na całe szczęście bardzo podobny do basha. </p>
<h2>Wiecznie nieśmiertelne hello</h2>
<p><code><br />
:global 1 [:parse ":put Hello"];<br />
:global 2 [:parse ":put World"];<br />
$1; $2;<br />
</code><br />
Prawda, że głupie? ;]<br />
Dobra do rzeczy:<br />
<code><br />
:local int1 "interfejs1"; :local ip1 "xx.xx.xx.11";<br />
:local int2 "interfejs2"; :local ip2 "xx.xx.xx.22";<br />
# check all ip<br />
:if ([/ping $ip1 count=5] = 0 and [/ping $ip2 count=5] = 0) do={<br />
:log error "Problem witch all VPN ";<br />
/interface disable $int1;<br />
/interface disable $int2;<br />
delay delay-time=2;<br />
/interface enable $int1;<br />
/interface enable $int2;<br />
delay delay-time=5;<br />
:if ([/ping $ip1 count=5] = 0 and [/ping $ip2 count=5] = 0) do={<br />
:log error "All VPNs down"<br />
/system reboot<br />
} else={ :log error "All VPNs up" }<br />
}<br />
# check first ip<br />
:if ([/ping $ip1 count=5] = 0) do={<br />
/interface disable $int1;<br />
delay delay-time=2;<br />
/interface enable $int1;<br />
delay delay-time=5;<br />
:if ([/ping $ip1 count=5] = 0) do={<br />
/system reboot<br />
} else={ :log error "$ip1 VPN up" }<br />
}<br />
# check second ip<br />
:if ([/ping $ip2 count=5] = 0) do={<br />
/interface disable $int2;<br />
delay delay-time=2;<br />
/interface enable $int2;<br />
delay delay-time=5;<br />
:if ([/ping $ip2 count=5] = 0) do={<br />
/system reboot<br />
} else={ :log error "$ip2 VPN up" }<br />
}<br />
</code><br />
Skrypcik sprawdza sobie połączenia jeśli nie ma odpowiedzi na pingi najpierw upuszcza i podnosi interfejsy, a jeśli to nie pomaga restartuje sobie naszego Mikrotika. Całość oczywiście dorzucamy do scheduler-a (odpowiednik crona) komendą z terminala (nie lubię klikać a co):<br />
<code><br />
/system scheduler add name="check-vpn" on-event=tutajnazwaskrypciora interval=10m start-time=startup<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://toniemy.org.pl/2011/03/01/watchdog-skryptowy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instalacja IspCP- Omega (quota, cband)</title>
		<link>http://toniemy.org.pl/2011/02/18/ispcp-omega-quota-cband/</link>
		<comments>http://toniemy.org.pl/2011/02/18/ispcp-omega-quota-cband/#comments</comments>
		<pubDate>Fri, 18 Feb 2011 01:50:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[różne pomysły]]></category>

		<guid isPermaLink="false">http://toniemy.org.pl/?p=529</guid>
		<description><![CDATA[IspCP Omegi to nic innego jak panel do zarządzania hostingiem. Jest to darmowy projekt dzięki któremu każdy kto posiada stojącą odłogiem maszynę może małym nakładem pracy postawić sobie hosting stron internetowych. Niestety informacje które znalazłem w internecie są nie wystarczające do poprawnego zainstalowania IspCP dlatego też postanowiłem tutaj skrobnąć coś własnego. Na warsztat weźmiemy świeżo [...]]]></description>
			<content:encoded><![CDATA[<p>IspCP Omegi to nic innego jak panel do zarządzania hostingiem. Jest to darmowy projekt dzięki któremu każdy kto posiada stojącą odłogiem maszynę może małym nakładem pracy postawić sobie hosting stron internetowych. Niestety informacje które znalazłem w internecie są nie wystarczające do poprawnego zainstalowania IspCP dlatego też postanowiłem tutaj skrobnąć coś własnego. Na warsztat weźmiemy świeżo postawionego Debiana w wersji 5.0.2 i doprawimy to IspCP w wersji 1.0.7. Jedyne czego będziemy potrzebować to dostęp po ssh. Opcjonalnie jeśli posiadamy takie możliwości techniczne przydadzą się dwa adresy publiczne tak aby zrobić własnego resolvera.<br />
<span id="more-529"></span></p>
<p>Na początek należy zmienić wpisy dla apt.<br />
<code><br />
nano /etc/apt/sources.list<br />
</code><br />
Wywalamy wszystko lub komentujemy i wklejamy:<br />
<code><br />
deb http://ftp.pl.debian.org/debian/ lenny main non-free contrib<br />
deb-src http://ftp.pl.debian.org/debian/ lenny main non-free contrib<br />
deb http://security.debian.org/ lenny/updates main contrib non-free<br />
deb-src http://security.debian.org/ lenny/updates main contrib non-free<br />
</code><br />
Teraz trzeba by zaktualizować wszystko zanim przystąpimy do działań<br />
<code><br />
apt-get update &#038;&#038; apt-get dist-upgrade<br />
</code><br />
Tu może się zdarzyć problem z kluczami apt.<br />
<code><br />
W: GPG error: http://security.debian.org lenny/updates Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY AED4B06F473041FA<br />
</code><br />
 Do naprawy tego polecam skrypcik http://toniemy.org.pl/stuf/kody/no-pub-key.txt dzięki któremu dodamy sobie klucze, jeśli nie mamy tego problemu spokojnie omijamy ten krok<br />
<code><br />
cd /usr/src/ &#038;&#038; wget http://toniemy.org.pl/stuf/kody/no-pub-key.txt &#038;&#038; chmod +x no-pub-key.txt &#038;&#038; ./no-pub-key.txt AED4B06F473041FA &#038;&#038; apt-get dist-upgrade<br />
</code><br />
Kiedy mamy już wszystko zaktualizowane przejdziemy do zebrania całego osprzętu :)<br />
<code><br />
cd /usr/src<br />
apt-get install mc bzip2 zip unzip make build-essential<br />
wget http://downloads.sourceforge.net/project/ispcp/ispCP%20Omega/ispCP%20Omega%201.0.7/ispcp-omega-1.0.7.tar.bz2?r=http%3A%2F%2Fsourceforge.net%2Fsettings%2Fmirror_choices%3Fprojectname%3Dispcp%26filename%3DispCP%2520Omega%2FispCP%2520Omega%25201.0.7%2Fispcp-omega-1.0.7.tar.bz2&#038;ts=1297994093&#038;use_mirror=ovh<br />
wget http://downloads.sourceforge.net/project/cband/mod-cband/mod-cband-0.9.6.1/mod-cband-0.9.6.1.tgz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fcband%2Ffiles%2Fmod-cband%2Fmod-cband-0.9.6.1%2F&#038;ts=1297995825&#038;use_mirror=ovh<br />
mv mod-cband* mod-cband-0.9.6.1.tgz<br />
wget http://vda.sourceforge.net/VDA/postfix-2.5.5-vda-ng.patch.gz<br />
mv ispcp-omega-1.0.7.tar.bz2* ispcp-omega-1.0.7.tar.bz2 &#038;&#038; tar xf ispcp-omega-1.0.7.tar.bz2 &#038;&#038; cd ispcp-omega-1.0.7<br />
apt-get install $(cat ./docs/Debian/debian-packages-lenny)<br />
</code><br />
Przy okienku Configuring mysql-server-5.0 wpisujemy swoje hasło do bazy, Configuring courier-base odpowiadamy -> No, ProFTPd configuration wybieramy -> standalone<br />
Teraz zaczniemy dozbrajać<br />
<code><br />
cd ../<br />
apt-get install apache2-prefork-dev<br />
tar xf mod-cband-0.9.6.1.tgz &#038;&#038; cd mod-cband-0.9.6.1 &#038;&#038; ./configure &#038;&#038; make &#038;&#038; make install<br />
</code><br />
Olewamy błąd<br />
<code><br />
apxs:Error: Activation failed for custom /etc/apache2/httpd.conf file..<br />
apxs:Error: At least one `LoadModule' directive already has to exist..<br />
make: *** [install] Error 1<br />
</code><br />
i ładujemy<br />
<code><br />
echo "LoadModule cband_module       /usr/lib/apache2/modules/mod_cband.so" > /etc/apache2/mods-available/cband.load<br />
a2enmod cband &#038;&#038; /etc/init.d/apache2 restart<br />
</code><br />
Serwer www postawiony teraz przejdźmy do poczty<br />
<code><br />
apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl postfix-tls libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin apache2 libapache2-mod-php5 php5 php5-mysql libpam-smbpass<br />
cd ../<br />
apt-get build-dep postfix<br />
apt-get source postfix<br />
gunzip postfix-2.5.5-vda-ng.patch.gz<br />
cd postfix-2.5.5<br />
patch -p1 < ../postfix-2.5.5-vda-ng.patch<br />
dpkg-buildpackage<br />
cd ../<br />
dpkg -i postfix_2.5.5-1.1_i386.deb postfix-mysql_2.5.5-1.1_i386.deb<br />
</code><br />
Poczta zrobiona teraz pozostaje instalacja IspCP<br />
</code><code><br />
cd ispcp-omega-1.0.7<br />
make install<br />
cp -R /tmp/ispcp/* /<br />
mysql_secure_installation<br />
cd /var/www/ispcp/engine/setup<br />
perl ./ispcp-setup<br />
</code><br />
Please enter a fully qualified hostname: tu nazwa kanoniczna serwera np ns1.domain.tld<br />
Please enter the system network address: adres ip serwera<br />
Please enter the domain name where ispCP OMEGA will be reachable on: tu podajemy gdzie ma być dostępny interfejs panelu np administracja.domain.tld<br />
Please enter SQL server hostname: potwierdzamy enterem<br />
Please enter ispCP OMEGA SQL database name: j.w<br />
Please enter ispCP OMEGA SQL user name: j.w<br />
Please enter ispCP OMEGA SQL password: tu wpisujemy hasło które wprowadziliśmy wcześniej a następnie przepisujemy je jeszcze raz dla potwierdzenia<br />
Please enter ispCP FTP SQL user: zatwierdzamy<br />
Please enter ispCP OMEGA FTP SQL user password: wiadomo hasełko<br />
Please enter ispCP OMEGA PMA control user: zatwierdzamy<br />
Please enter ispCP OMEGA PMA control user password: hasełko :)<br />
Please enter administrator login name: zostawiamy admin<br />
Please enter administrator password: i wprowadzamy hasełko<br />
Secondary DNS server address IP (optional): tu podajemy adres drugiego adresu ip który wprowadzamy na interfejs<br />
Do you want allow the system resolver to use the local nameserver? potwierdzamy<br />
Should AWStats be activated?  piszemy yes<br />
Please select AWStats mode: Possible values [d]ynamic and [s]tatic. [dynamic]: zostawiamy dynamic<br />
i to by było na tyle</p>
]]></content:encoded>
			<wfw:commentRss>http://toniemy.org.pl/2011/02/18/ispcp-omega-quota-cband/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TP-Link TL-WA5210G- recenzja</title>
		<link>http://toniemy.org.pl/2010/11/20/tp-link-tl-wa5210g-recenzja/</link>
		<comments>http://toniemy.org.pl/2010/11/20/tp-link-tl-wa5210g-recenzja/#comments</comments>
		<pubDate>Sat, 20 Nov 2010 22:05:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[sieci wifi]]></category>
		<category><![CDATA[ap]]></category>
		<category><![CDATA[apc]]></category>
		<category><![CDATA[opis]]></category>
		<category><![CDATA[recenzja]]></category>
		<category><![CDATA[testy]]></category>
		<category><![CDATA[tl-wa5210g]]></category>
		<category><![CDATA[tp-link]]></category>
		<category><![CDATA[urządzenie]]></category>
		<category><![CDATA[zdjęcia]]></category>

		<guid isPermaLink="false">http://toniemy.org.pl/?p=499</guid>
		<description><![CDATA[W moje ręce wpadło ostatnio nowiutkie urządzenie TP-Link WA5210G. NA stronie (link) możemy się dowiedzieć, że jest to rozwiązanie outdoor czyli do zastosowania na zewnątrz. Patrząc na budowę i wygląd urządzenia nie można się pozbyć wrażenia, że inżynierowie z TP-Linka postanowili nie odkrywać i patentować na nowo koła. Identyczna konstrukcja znajduje się w katalogu firmy [...]]]></description>
			<content:encoded><![CDATA[<p>W moje ręce wpadło ostatnio nowiutkie urządzenie TP-Link WA5210G. NA stronie (<a href="http://www.tp-link.com/products/productDetails.asp?class=wlan&#038;pmodel=TL-WA5210G" target="_blanc">link</a>) możemy się dowiedzieć, że jest to rozwiązanie outdoor czyli do zastosowania na zewnątrz. Patrząc na budowę i wygląd urządzenia nie można się pozbyć wrażenia, że inżynierowie z TP-Linka postanowili nie odkrywać i patentować na nowo koła.<br />
<span id="more-499"></span><br />
Identyczna konstrukcja znajduje się w katalogu firmy Ubiquiti Networks i nazywa się NanoStation. Oczywiście nie jest to wierna kopia, a jedynie powielenie idei. Obudowa TP-Linka jest dużo większych rozmiarów co można zaobserwować na zdjęciach poniżej. Plastik z którego wykonano sprzęt sprawia solidne wrażenie oraz stwarza poczucie, że urządzenie będzie niezniszczalne oraz odporne na czynniki zewnętrzne takie jak śnieg, deszcz, grad, pyły z komina lub też wysoka temperatura. Mocowanie do masztu odbywa się naturalnie poprzez opaski zaciskowe i tu niespodzianka- w urządzeniu da się zastosować uchwyt dedykowany dla NS który jest opcjonalny i pozwala na regulacje położenia w elewacji. W urządzeniu zastosowano dwu-polaryzacyjną antenę dzięki której dwoma kliknięciami możemy zmienić orientację. Soft identyczny jak w pozostałych produktach firmy jednak został on wzbogacony o graficzne statystyki oraz tester przepustowości. Zakładka odpowiedzialna za konfigurację radia jest mega nie intuicyjna i może sprawiać problemy mniej zorientowanym w temacie. Pod tym względem w UBNT zostało to lepiej rozwiązane. Do pozostałych opcji nie można się przyczepić, jest wszystko czego prosta stacja czy klient stacji potrzebuje. Testy nie pokazały nie doskonałości, czy nie prawidłowości. Urządzenie poprawnie funkcjonuje zarówno w trybie b jak i g. Jak na sprzęt o połowę tańszy od NS TL-WA5210G wypada rewelacyjnie. Jako ciekawostkę której nie znalazłem na żadnej ze stron dodam, że urządzenie posiada wyjście na antenę zwenętrzną (SMA). Poniżej specyfikacja oraz cena ze strony <a href="http://www.cyberteam.pl/produkt/show/1006/Punkt-dostepowy-TP-LINK-TL-WA5210G.html" target="_blanc">cyberteam.pl</a></p>
<table>
<tr>
<td class="l">Standardy 	</td>
<td class="r">802.11b, 802.11g</td>
</tr>
<tr>
<td class="l">Interfejs 	</td>
<td class="r">1xLAN (10/100M)</td>
</tr>
<tr>
<td class="l">Prędkości</td>
<td class="r">11g[Mb/s]: 108/54/48/36/24/18/12/9/6 (dynamiczne)</td>
</tr>
<tr>
<td class="l">	</td>
<td class="r">11b[Mb/s]: 11/5,5/3/2/1 (dynamiczne)</td>
</tr>
<tr>
<td class="l">Zakres pracy	</td>
<td class="r">2,4-2,4835GHz</td>
</tr>
<tr>
<td class="l">Moc wyjściowa 	</td>
<td class="r">27dBm</td>
</tr>
<tr>
<td class="l">Zysk anteny</td>
<td class="r">12dBi</td>
</tr>
<tr>
<td class="l">Polaryzacja 	</td>
<td class="r">Pionowa lub Pozioma</td>
</tr>
<tr>
<td class="l">Kąt promieniowania H/V</td>
<td class="r">60&#186;/30&#186;</td>
</tr>
<tr>
<td class="l">Obudowa 	</td>
<td class="r">Zewnętrzna</td>
</tr>
<tr>
<td class="l">Ochrona przeciwprzepięciowa</td>
<td class="r">15kV</td>
</tr>
<tr>
<td class="l">Modulacje </td>
<td class="r">11g: BPSK, QPSK,16QAM,64QAM, OFDM</td>
</tr>
<tr>
<td class="l">	</td>
<td class="r">11b: DQPSK, DBPSK, DSSS, CCK</td>
</tr>
<tr>
<td class="l">Czułość</td>
<td class="r">11b: 11M:-90dBm 5,5M:-92dBm, 1M:-98dBm</td>
</tr>
<tr>
<td class="l"></td>
<td class="r">11g: 54M: -76dBm, 48M:-78dBm, 36M:-82dBm, 12M:-91dBm,9M:-92dBm</td>
</tr>
<tr>
<td class="l">Zasilanie</td>
<td class="r">230V AC / 12V DC (PoE)</td>
</tr>
<tr>
<td class="l">Certyfikaty	</td>
<td class="r">FCC, CE</td>
</tr>
<tr>
<td class="l">Temperatura pracy</td>
<td class="r">-30&#186;C&#8230; +70&#186;C</td>
</tr>
<tr>
<td class="l">Wilgotność</td>
<td class="r">10%-90%, bez kondensacji</td>
</tr>
<tr>
<td class="l">Wymiary</td>
<td class="r">265mm x 120mm x 83mm</td>
</tr>
<tr>
<td class="l">Przybliżona cena</td>
<td class="r">ok 156zł</td>
</tr>
</table>
<p><center></p>
<table cellspacing="4">
<tbody>
<tr>
<td>Plusy</td>
<td>Minusy</td>
</tr>
<tr>
<td>Cena/Jakość<br />
Dobre działanie<br />
Wysoki zysk anteny<br />
Wysoka czułość</td>
<td>Wielkość<br />
Mocowanie</td>
</tr>
</tbody>
</table>
<p></center><br />
<a href="http://toniemy.org.pl/wp-content/uploads/2010/11/20101115.jpg"><img src="http://toniemy.org.pl/wp-content/uploads/2010/11/20101115-225x300.jpg" alt="" title="20101115" width="225" height="300" class="aligncenter size-medium wp-image-485" /></a> <a href="http://toniemy.org.pl/wp-content/uploads/2010/11/20101115001.jpg"><img src="http://toniemy.org.pl/wp-content/uploads/2010/11/20101115001-225x300.jpg" alt="" title="20101115(001)" width="225" height="300" class="aligncenter size-medium wp-image-486" /></a><br />
<a href="http://toniemy.org.pl/wp-content/uploads/2010/11/20101115002.jpg"><img src="http://toniemy.org.pl/wp-content/uploads/2010/11/20101115002-225x300.jpg" alt="" title="20101115(002)" width="225" height="300" class="aligncenter size-medium wp-image-487" /></a> <a href="http://toniemy.org.pl/wp-content/uploads/2010/11/20101115003.jpg"><img src="http://toniemy.org.pl/wp-content/uploads/2010/11/20101115003-225x300.jpg" alt="" title="20101115(003)" width="225" height="300" class="aligncenter size-medium wp-image-488" /></a><br />
<a href="http://toniemy.org.pl/wp-content/uploads/2010/11/20101115004.jpg"><img src="http://toniemy.org.pl/wp-content/uploads/2010/11/20101115004-225x300.jpg" alt="" title="20101115(004)" width="225" height="300" class="aligncenter size-medium wp-image-489" /></a> <a href="http://toniemy.org.pl/wp-content/uploads/2010/11/20101115005.jpg"><img src="http://toniemy.org.pl/wp-content/uploads/2010/11/20101115005-225x300.jpg" alt="" title="20101115(005)" width="225" height="300" class="aligncenter size-medium wp-image-490" /></a><br />
<a href="http://toniemy.org.pl/wp-content/uploads/2010/11/20101115006.jpg"><img src="http://toniemy.org.pl/wp-content/uploads/2010/11/20101115006-225x300.jpg" alt="" title="20101115(006)" width="225" height="300" class="aligncenter size-medium wp-image-491" /></a> <a href="http://toniemy.org.pl/wp-content/uploads/2010/11/20101115007.jpg"><img src="http://toniemy.org.pl/wp-content/uploads/2010/11/20101115007-225x300.jpg" alt="" title="20101115(007)" width="225" height="300" class="aligncenter size-medium wp-image-492" /></a><br />
<a href="http://toniemy.org.pl/wp-content/uploads/2010/11/20101115008.jpg"><img src="http://toniemy.org.pl/wp-content/uploads/2010/11/20101115008-225x300.jpg" alt="" title="20101115(008)" width="225" height="300" class="aligncenter size-medium wp-image-493" /></a> <a href="http://toniemy.org.pl/wp-content/uploads/2010/11/20101115009.jpg"><img src="http://toniemy.org.pl/wp-content/uploads/2010/11/20101115009-225x300.jpg" alt="" title="20101115(009)" width="225" height="300" class="aligncenter size-medium wp-image-494" /></a><br />
<a href="http://toniemy.org.pl/wp-content/uploads/2010/11/20101115010.jpg"><img src="http://toniemy.org.pl/wp-content/uploads/2010/11/20101115010-225x300.jpg" alt="" title="20101115(010)" width="225" height="300" class="aligncenter size-medium wp-image-495" /></a> <a href="http://toniemy.org.pl/wp-content/uploads/2010/11/20101115011.jpg"><img src="http://toniemy.org.pl/wp-content/uploads/2010/11/20101115011-225x300.jpg" alt="" title="20101115(011)" width="225" height="300" class="aligncenter size-medium wp-image-496" /></a><br />
<a href="http://toniemy.org.pl/wp-content/uploads/2010/11/20101115012.jpg"><img src="http://toniemy.org.pl/wp-content/uploads/2010/11/20101115012-300x225.jpg" alt="" title="20101115(012)" width="300" height="225" class="aligncenter size-medium wp-image-497" /></a><br />
<br />
<a href="http://toniemy.org.pl/wp-content/uploads/2010/11/20101115013.jpg"><img src="http://toniemy.org.pl/wp-content/uploads/2010/11/20101115013-300x225.jpg" alt="" title="20101115(013)" width="300" height="225" class="aligncenter size-medium wp-image-498" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://toniemy.org.pl/2010/11/20/tp-link-tl-wa5210g-recenzja/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

