Monday, November 29, 2010

Operacja dzielenia w Pythonie

Pythona pobierznie znam od ok. 4 lat, podobał mi się gdy używałem biblioteki GTK+. Dlatego chciałem lepiej się z nim zapoznać, między innymi w tym celu miałem napisać program w nim dla wprawy. Algorytm programu opiera się na działaniach na liczbach z przecinkiem. Jedną z pierwszych rzeczy jaką trzeba zrobić to policzyć jakim procentem sumy trzech zmiennych jest każda ze zmiennych.
Napisałem prosty skrypt w Pythonie zawierający kod:


liczba_h_w_piatek = 3
liczba_h_w_sobote = 5
liczba_h_w_niedziele = 5

procent_h_dla_piatku = liczba_h_w_piatek/(liczba_h_w_piatek+liczba_h_w_sobote+liczba_h_w_niedziele)

print "%.2f" % (procent_h_dla_piatku)

W wyniku otrzymałem "0.00", co jest? Python mnie powalił, a miało być prościej.


Okazało się, że Python v < 3  ma z tym problem! Wkurzyłem się i napisałem to w C++:
#include <iostream>

using namespace std;

int main ()
{
float p=3;
float s=5;
float n=5;

cout << p /(p + s + n) << endl;
return 0;
}

Czy to aż tak strasznie? Chyba nie.
Zdecydowałem pisać ten program w C++. Będę musiał zbudować typy danych ale sam algorytm przetwarzania danych wcale nie będzie dłuższy. Rok temu pisałem w C++ z użyciem GTK+ kalkulator i kod wyszedł dosyć znośnie: http://pl.wikibooks.org/wiki/GTK+

Sunday, November 28, 2010

Fedora SECURITY LAB

Fedora wprowadza najwięcej nowość. Tu mamy specjalną dystrybucję do testowania bezpieczeństwa.



Oto lista pakietów, czyli ładny spis: https://fedorahosted.org/security-spin/wiki/availableApps

Saturday, November 27, 2010

Windows SteadyState

Uff, trochę się naszukałem, aby ponownie to znaleźć. Tak to już jest, kiedyś tego używałeś, a teraz jest Ci potrzebne i nie pamiętasz jak się nazywa. Dlatego właśnie powstał ten blog, aby ocalić swoje doświadczenia od zapomnienia.

Program chroni dysk przed zapisem i przydaje się gdy "Whether you manage computers in a school computer lab or an Internet cafe, a library..."

Hy, no cóż - kiedyś ta kategoria musiała powstać: Windows :)

Historia przeglądarek

Znalazłem oś czasu rozwoju przeglądarek, taką jak dla systemów UNIX: http://en.wikipedia.org/wiki/File:Timeline_of_web_browsers.svg
Pomyśleć, że start miął miejsce ok. 1995!


Znacie tą historię jak wielkie E wykańcza konkurencję, czyli Netscape w wyniku czego powstaje nowy projekt, którego nazwa jest akronimem zemsty? Jeżeli nie to polecam poniższe filmy.


Bitwa przeglądarek


Wojna wyszukiwarek


eBay i Amazon


Świat według Google

Saturday, November 20, 2010

fmt - formatowanie szerokości tekstu

Jak formatuje się tekst, aby wyglądał tak jak na grupach dyskusyjnych bądź listach mailingowych? Poleceniem fmt: http://en.wikipedia.org/wiki/Fmt

fmt to przy okazji. Ciekawa jest dokumentacja GNU Coreutils (http://www.gnu.org/software/coreutils/manual/) gdzie o fmt również przeczytamy, czyli jest częścią tego pakietu - warto mu się przyjrzeć bliżej :)

Kompresja bzip2, xz, 7-Zip

grzesiek@home:~$ ls -lh kalkulator-0.0.1.ogv
-rw-r--r-- 1 grzesiek grzesiek 46M 2009-12-01  kalkulator-0.0.1.ogv

grzesiek@home:~$ time bzip2 -z9 kalkulator-0.0.1.ogv 
real 0m10.539s
user 0m10.425s
sys 0m0.108s

grzesiek@home:~$ ls -lh kalkulator-0.0.1.ogv.bz2
-rw-r--r-- 1 grzesiek grzesiek 44M 2009-12-01  kalkulator-0.0.1.ogv.bz2

grzesiek@home:~$ time bzip2 -d kalkulator-0.0.1.ogv.bz2
real 0m5.772s
user 0m5.608s
sys 0m0.140s

grzesiek@home:~$ time xz -z9 kalkulator-0.0.1.ogv 
real 0m22.685s
user 0m22.249s
sys 0m0.420s

grzesiek@home:~$ ls -lh kalkulator-0.0.1.ogv.xz
-rw-r--r-- 1 grzesiek grzesiek 34M 2009-12-01  kalkulator-0.0.1.ogv.xz

grzesiek@home:~$ time xz -d kalkulator-0.0.1.ogv.xz
real 0m3.283s
user 0m3.168s
sys 0m0.112s

grzesiek@home:~$ xz
xz       xzcat    xzcmp    xzdiff   xzegrep  xzfgrep  xzgrep   xzless   xzmore

grzesiek@home:~$ time 7z a -mx=9 kalkulator-0.0.1.ogv.7z kalkulator-0.0.1.ogv
7-Zip 9.04 beta  Copyright (c) 1999-2009 Igor Pavlov  2009-05-30
p7zip Version 9.04 (locale=pl_PL.UTF-8,Utf16=on,HugeFiles=on,4 CPUs)
Scanning

Creating archive kalkulator-0.0.1.ogv.7z

Compressing  kalkulator-0.0.1.ogv    

Everything is Ok

real 0m10.705s
user 0m20.781s
sys 0m0.472s

grzesiek@home:~$ ls -lh kalkulator-0.0.1.ogv*
-rw-r--r-- 1 grzesiek grzesiek 46M 2009-12-01  kalkulator-0.0.1.ogv
-rw-r--r-- 1 grzesiek grzesiek 34M 11-20 21:09 kalkulator-0.0.1.ogv.7z

grzesiek@home:~$ mv kalkulator-0.0.1.ogv _kalkulator-0.0.1.ogv
grzesiek@home:~$ time 7z e kalkulator-0.0.1.ogv.7z

7-Zip 9.04 beta  Copyright (c) 1999-2009 Igor Pavlov  2009-05-30
p7zip Version 9.04 (locale=pl_PL.UTF-8,Utf16=on,HugeFiles=on,4 CPUs)

Processing archive: kalkulator-0.0.1.ogv.7z

Extracting  kalkulator-0.0.1.ogv

Everything is Ok

Size:       48065852
Compressed: 34814347

real 0m3.663s
user 0m3.572s
sys 0m0.092s


Obydwa rozwiązania korzystają z LZMA:

Thursday, November 18, 2010

"if ($answer =~ /Y|y/)" Python też tak może

import re
import sys

print "...[Y/N]?"
answer = sys.stdin.read(1)
if re.search("Y|y",answer):
print "tak"
elif re.search("N|n",answer):
print "nie"

Monday, November 15, 2010

"\1" pierwszy zapamiętany wzorzec

grzesiek@home:~$ echo "ABCD" | sed -r 's/(.)/  \1/g'
  A  B  C  D
grzesiek@home:~$ echo "ABCD" | sed -r 's/(.)/\1 /g'
A B C D
grzesiek@home:~$ echo "ABCD" | sed  -r 's/(.)([ABCD])/\1 -\2/g'
A -BC -D




http://www.linuxquestions.org/questions/programming-9/how-to-insert-characters-into-a-string-in-shellscripts-844413/
http://www.grymoire.com/Unix/Sed.html#uh-4
http://www.regular-expressions.info/

Sunday, November 14, 2010

Implementacja motta UNIX


Perl:

$live = 1;
$free = 0;

print "Czy jesteś wolnym człowiekiem [Y/N]?";
$answer = getc(STDIN);

if ($answer =~ /Y|y/) {$free=1;}
else {$free=0;}

$live and $free or die("Jesteś użytkownikiem Micro\$hit? :)\n");
print "OK\n";



Python:

import sys

live=1
free=0

print "Czy jestes wolnym czlowiekiem [Y/N] ?"
answer = sys.stdin.read(1)

if (answer == 'Y') or (answer == 'y'):
    free=1
else:
    free=0

live and free or exit() 
print "OK\n"


Saturday, November 13, 2010

Perl na wesoło




Już od dłuższego czasu o tym myślałem, chyba nie mam wyjścia :)

Wednesday, November 10, 2010

Historia poleceń

Wprowadzasz dużo poleceń testując nową 'zabawkę'? Często musisz wykonać jeszcze raz prawie to samo polecenie - długie polecenie?

history

Aby wykonać jeszcze raz komendę np. nr 543 możesz wpisać:

!543


Aby wykonać ponownie ostatnią komendę zaczynająca się np. od polecenia cat można wpisać:

!cat


Mała rzecz, a cieszy.

Saturday, November 6, 2010

asciiart/cpu.txt



Richard Stallman i jego analogie do wolnego oprogramowania odpadają :)

ddosim - symulator DDOS


Description
========
DDOSIM simulates several zombie hosts (having random IP addresses) which
create full TCP connections to the target server. After completing the
connection, DDOSIM starts the conversation with the listening application
(e.g.HTTP server).Can be used only in a laboratory environment to test the
capacity of the target server to handle application specific DDOS attacks.

Features
======
   - HTTP DDoS with valid requests
   - HTTP DDoS with invalid requests (similar to a DC++ attack)
   - SMTP DDoS
   - TCP connection flood on random port


http://stormsecurity.wordpress.com/2009/03/03/application-layer-ddos-simulator/
http://sourceforge.net/projects/ddosim/

Man-In-The-Middle

Understanding Man-In-The-Middle Attacks - http://seclists.org/fulldisclosure/2010/Nov/20



Friday, November 5, 2010

Kopiowanie pomiędzy hostami

Polecenia systemu Unix są dobrym tematem, zwłaszcza, że zawsze znajdzie się jakieś, o którym się nie wiedziało. Przyznam, że od nie dawna zacząłem używać polecenia scp. Polecenie to niby jest proste w działaniu ale za to jak może ułatwić pracę.
Często testuje się jakieś konfiguracje na testowym systemie, np. w domu ;). Po udanych testach pozostaje wdrożyć tą funkcjonalności na serwerze produkcyjnym i tu przydają się już wcześniej przygotowane pliki z serwera testowego.
Proste polecenie przesyła przykładowy plik z testowego na produkcyjny serwer:
scp -P 7233 /usr/share/dansguardian/languages/ukenglish/template.html admin@prv.domena.pl:template.html

Ciekawą koncepcją jest też wprowadzanie poleceń do historii bez ich faktycznego wykonywania, czyli poprzedzając je znakiem #, co oznacza komentarz dla interpretera powłoki bash. Taka żółta karteczka...

man scp

Thursday, November 4, 2010

"icmp-host-prohibited"?


Znalazłem taką opcje w zaporze RH Fedory, niby domyślna polityka ustawiona jest na ACCEPT a jednak ładnie wszystko odrzuca. Postanowiłem zbadać tą sprawę. Gdzieś w sieci natrafiłem na link do RFC1812, gdzie można trochę o tym poczytać:
5.3.9 Packet Filtering and Access Lists
...
   The router SHOULD allow an appropriate ICMP unreachable message to be
   sent when a packet is discarded.  The ICMP message SHOULD specify
   Communication Administratively Prohibited (code 13) as the reason for
   the destination being unreachable.

Przeczytałem gdzieś również, że ktoś po testach stwierdził, iż rzeczywiście używanie tej opcji dla odrzucanych pakietów oszczędza pasmo. Postanowiłem również to przetestować.

Test jest prosty, na serwerze dodałem na samym końcu regułę:
iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited

Następnie użyłem prostego badania zamkniętego portu, pierwszy wynik jest baz powyższej reguły, a drugi już z:

root@home:/home/grzesiek# nmap x.xxx.pl -p 33 -PN

Starting Nmap 5.00 ( http://nmap.org ) at 2010-11-04 21:17 CET
Interesting ports on x.xxx.pl (XX.18.194.XXX):
PORT   STATE    SERVICE
33/tcp filtered dsp

Nmap done: 1 IP address (1 host up) scanned in 2.20 seconds

Trwało to 2 sekundy, ale długo :)


# tcpdump -i eth0:1 port 33
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0:1, link-type EN10MB (Ethernet), capture size 96 bytes
21:16:54.948070 IP PC-77-XX-24-XXX.xxx-net.pl.45056 > x.xxx.pl.33: S 2889941185:2889941185(0) win 2048 <mss 1460>
21:16:55.949049 IP PC-77-XX-24-XXX.xxx-net.pl.45057 > x.xxx.pl.33: S 2889875648:2889875648(0) win 2048 <mss 1460>
^C
2 packets captured
2 packets received by filter
0 packets dropped by kernel


Zostały odebrane dwa pakiety.
Teraz wersja z wysyłaniem przez serwer komunikatu zwrotnego ICMP:

root@home:/home/grzesiek# nmap x.xxx.pl -p 33 -PN

Starting Nmap 5.00 ( http://nmap.org ) at 2010-11-04 21:52 CET
Interesting ports on x.xxx.pl (83.18.194.164):
PORT   STATE    SERVICE
33/tcp filtered dsp

Nmap done: 1 IP address (1 host up) scanned in 0.17 seconds

Od razu widać - szybciej.


# tcpdump -i eth0:1 port 33
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0:1, link-type EN10MB (Ethernet), capture size 96 bytes
21:51:59.989134 IP PC-XX-46-24-XXX.xxxx-net.pl.55250 > x.xxx.pl.33: S 868347170:868347170(0) win 1024 <mss 1460>
^C
1 packets captured
1 packets received by filter
0 packets dropped by kernel

Drugi pakiet był już zbędny, ponieważ nmap dostał jasny komunikat dlaczego port nie odpowiada - administracyjnie zabroniony.


Blokowanie indeksowania

Dziś przekonałem się - całe szczęście nie na swojej skórze, jak ważna jest konfiguracja indeksowania serwisu, którym się zarządza. Tak samo jak w Moodle podczas instalacji jesteśmy informowani o tym, iż katalog z danymi nie powinien znajdować się w ścieżce udostępnianej przez serwer WWW, tak i w serwisie musimy zadbać o to, aby dane udostępniane w podkatalogach głównego katalogu nie były indeksowane przez Google. 
Okazuje się, że procedura usuwania niejawnych danych zindeksowanych może trwać 3-4 dni robocze.

Tak więc dobrą praktyką jest stworzenie pliku robots.txt w katalogu głównym domeny z mniej więcej takimi wpisami:

User-Agent: *
Disallow: /Download/
Disallow: /Dokumenty/
...

Wednesday, November 3, 2010

RHEL 6 Beta 2 - moje pierwsze spojrzenie

Nowego RHEL6 można pobrać bez rejestracji z serwera ftp. Ciekawy byłem co się w nim znalazło z projektu Fedora oraz jakie są wersje pakietów w stosunku do Debiana. Instalację przeprowadziłem na VirtualBox.


Zainstalowałem system w opcji Basic Server, więc bez UI. Podczas startu system chwilowo się zaciął, musiałem przełączyć się na inny terminal i zobaczyć co jest grane. Jak to zrobić? Na maszynie wirtualnej należy użyć skrótu "host key"-F1 (Ctrl+Alt+F1). Zaciął się przy przebudowaniu inird.

Jak tu teraz coś zainstalować, yum nie działa! Skorzystałem z porady. Hy, ale my nie mamy neta, musiałem ustawić DNS, eth0 i routing. Wszystko ładnie pięknie, tylko że po restarcie on straci te ustawiania, kolejna porada jak to zapisać.
Teraz instalacja hurtowa:

# yum groupinstall "X Window System" "GNOME Desktop Environment"

Lepiej był to pociągnąć z płyty, ale już trudno.
(parę minut)...

My, a jednak szybciej będzie od nowa zainstalować system z DVD.


Niestety już na samym początku przetestowałem tryb ratunkowy :) - nie przestawiajcie kolejności dysków w VB, bo to "skutkuje" utratą Gruba.

Teraz będę mógł przyjrzeć się systemowi, wielkiemu RHEL. Na pierwszy rzut oka (przy instalacji) zauważyłem, ze jądro jest w wersji 2.6.32, jak w squeeze. Domyślnie system używa LVM i ext4. Poza tym jest bardzo podobny do fedory.