2014 m. liepos 31 d., ketvirtadienis

USB įtaisų pažeidžiamumas

USB įtaisai nėra saugūs.

http://www.wired.com/2014/07/usb-security/

Šiame straipsnyje rašoma kaip išstudijavus usb tvarkykles, jas galima pakeisti taip, kad būtų sutrigdytas kompiuterio saugumas. USB įtaisai gali netik užkrėsti kompiuterį kenksminga programine įranga, bet ir užkrėsti kitus USB įrenginius.

Taip pat:
http://arstechnica.com/security/2014/07/this-thumbdrive-hacks-computers-badusb-exploit-makes-devices-turn-evil/


Flash įrenginiai, tokie kaip, SD, microSD, and SSD, turi integruota valdiklį, kuri atlieka sudėtingas užduotis būtinas  tvarkingam atmintis veikimui. Demontruojama kaip keičiamas blokų paskirstymo ir trynimo algoritmai, kurie leidžia įvairias MITM atakas vykdyti nesusekamu būdu.

http://www.wired.com/2014/07/usb-security/



2014-07-31

/etc/passwd ir /etc/shadow

Dokumentas saugantis vartotojų slaptažodžių informaciją.
$ cat /etc/passwd Iš suteikiamų teisių, dokumentą 'passwd' gali skaityti paprastas vartotojas.
/etc $ ls -l passwd shadow-rw-r--r-- 1 root root   1807 Lie 13 02:25 passwd
-rw-r----- 1 root shadow 1132 Lie 13 02:25 shadow

Kaip suprasti 'passwd' dokumento 'root' vartotoją?
$ less /etc/passwdroot:x:0:0:root:/root:/bin/bash
....

# root yra pats pirmas vartotojas, kuris yra sukuriamas diegimo metu
# x reiškia, kad slaptažodžiai tvarkomas 'shadow' dokumento
* reikštų, kad vartotojas negali prisijungti.
# root vartotojas paprastai turi 'user id', ir 'group id' '0:0'
# root - šioje vietoje yra vartotojo apibūdinimas arba 'Pilnas vardas'
# /root - namų direktorija
# /bin/bash - naudojama shell


Kaip suprasti 'shadow' dokumento namų vartotoją?
$ sudo cat /etc/shadow|tail -n1 install-gentoo:$6$u.3k0kNY$yNUUeHMacrH4UpU8ZdzFnZxgITlKiOvrqWZp7Ubj1eevg5pONIi8pR9uYRLeHMacrH4UpU8Z.:16313:0:99999:7:::

/etc/shadow
install-gentoo:$6$u.3k0kNY$yNUUeHMacrH4UpU8Z.:16313:0:99999:7:::
Prisijungimo vardas install-gentoo
Užkoduotas slaptažodis $6$u.3k0kNY$yNUUeHMacrH4UpU8Z.
Paskutinį karta pakeistas slaptažodis(Unix epoch time) 16313
Dienos prieš kurias slaptažodį galima pakeisti (0 reikškia - bet kada) 0
Slaptažodžio gyvavimo laikas(po kiek laiko pakeisti slaptažodį 99999
Kiek laiko dar galioja slaptažodis, pasibaigus slaptažodžio gyvavimui 7

# Kaip pridėti vartotoją?
$ sudo useradd namai
$ tail -n 1 /etc/passwd
namai:x:1001:1001::/home/namai

# Pridėjus vartotoja jam savaime nesukuriamas slaptažodis
$ sudo tail -n 1 /etc/shadownamai:!:16282:0:99999:7:::
# Sukuriame slaptažodį ir patikriname, kaip pasikeitė 'shadow' dokumentas
$ sudo passwd namai Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfull
$ sudo tail -n 1 /etc/shadow
namai:$6$ESdQ9.IL$Ah9n0OFxSrKGD899e7Uy9kzTNJ85Iva2XpL5ZAcFcmcwtwB8upeylvaG94R5WrsoHRq92uKz1ObxNeVmRjFRR0:16282:0:99999:7:::

# Arba tą patį galime atlikti komanda
$ adduser namai # Komanda 'change' leidžia keisti 'shadow' dokumento parametrus, tokius kaip slaptažodžio galiojimo terminas.
$ sudo chage -l namai
Last password change                    : Lie 31, 2014
Password expires                    : never
Password inactive                    : never
Account expires                        : never
Minimum number of days between password change        : 0
Maximum number of days between password change        : 99999
Number of days of warning before password expires    : 7

# Pakeičiam slaptažodžio galiojimo laiką į 43 dienas. $ sudo chage -M 43 namai
$ sudo tail -n 1 /etc/shadow
namai:$6$ESdQ9.IL$Ah9n0OFxSrKGD899e7Uy9kzTNJ85Iva2XpL5ZAcFcmcwtwB8upeylvaG94R5WrsoHRq92uKz1ObxNeVmRjFRR0:16282:0:43:7:::

Vartotojų keitimas su 'usermod'. usermod [nustatymai] vartotojas
-l, --login NEW_LOGIN
-c, --comment COMMENT
-s, --shell SHELL
-d, --home HOME_DIR
-L, --lock
-U, --unlock
'lock' prie slaptažodžio '/etc/shadow' dokumente prideda '!', tai reikškia nepavyks prisijungti su šiuo vartotoju.
$ cat /etc/passwd |tail -n 1 testas:x:1001:1001:,,,:/home/testas:/bin/bash
$ sudo usermod -s /bin/sh testas
$ sudo cat /etc/passwd |tail -n 1
testas:x:1001:1001:,,,:/home/testas:/bin/sh
# Komanda rodanti visų vartotojų informaciją. $ for i in `awk -F : {' print $1 '} /etc/passwd`; do echo $i; chage -l $i; done

Kur rasti passwd atsarginę kopiją, netyčia ištrynus šį dokumentą?

$ ll /var/backups/passwd.bak
-rw------- 1 root root 2830 Grd 23 03:37 /var/backups/passwd.bak

Pasiskaitymui:
https://en.wikipedia.org/wiki/Passwd

2014 m. liepos 30 d., trečiadienis

gpg

#gpg - naudojamas privačių/viešųjų raktų generavimui, parašams, duomenų vientisumo tikrinimui

# Informacija apie komandą
$ gpg --help
$ man gpg
$ info gpg

# Viešojo/privataus rakto poros generavimas
$ gpg --gen-key

# Esamų raktų sarašas
$ gpg --list-keys
$ gpg -k

# Jei norime sužinoti tik viešuosius/privačiuosius raktus
$ gpg --list-public-keys
$ gpg -
$ gpg --list-secret-keys
$ gpg -K

# Dokumento užkodavimas -e(koduoti), -a(armor koduotes formatas) -r(gavėjas)
$ gpg -ea  -r [id] failo_pavadinimas


#'.asc' - formatas sugeneruojamas, koduojant dokumenta su --armored arba '-a'
# Ši komanda atspausdins rezultatą į stdout
$ gpg -d failo_pavadinimas.asc

# '-o'(output) išveda atkoduota rezultatą į dokumentą.
$ gpg -o atkoduota -d failo_pavadinimas.asc

# Kaip pasirašyti užkoduotą dokumentą? '-s'(pasirašyti, .ang --sign)
# Pasirašius sukuriamas parašo dokumentas failo_pavadinimas.asc.asc
$ gpg -sa failo_pavadinimas.asc

# Parašo patikrinimas
# Kaip patikrinti parašą su užkoduotu dokumentu ?
$ gpg --verify-files failo_pavadinimas.asc failo_pavadinimas.asc.asc

 # Dokumento MD5, SHA1, RMD160, SHA224, SHA384, SHA512  parašo apskaičiavimas

$ gpg --print-md rootfs1.gz
gpg: invalid hash algorithm `rootfs1.gz'
sup@sup-desktop:~/Documents/test$ gpg --print-mds rootfs1.gz
rootfs1.gz:    MD5 = E0 DB 52 AB 45 13 34 25  5E 6B 54 DC EF CA FB CE
rootfs1.gz:   SHA1 = 5A16 14A5 A871 5717 4797  3CF8 D277 6FC2 4ECE 070C
rootfs1.gz: RMD160 = 4F78 D1A4 786C 9B3D 77BA  0941 FCDE 5167 5FE5 DF57
rootfs1.gz: SHA224 = BFA7FC8C F25D5697 250E8687 70F5C866 154AAFBB D7F25254
                     0B30E411
rootfs1.gz: SHA256 = EA942AC8 4B7DB63E 0116D0C6 20F98CC6 3B085605 FA712995
                     E23F0A98 DC0C07E7
rootfs1.gz: SHA384 = 70C4D6B6 FE3BC5FA A94C422E 39584FE2 344290EB EA499CD1
                     E0E10CFC AA4BFF77 E3148B24 5651116A 71EAF1DA 17C3E741
rootfs1.gz: SHA512 = 2C59ECA3 AC4782C1 43C0BFE8 CF2F7A43 FDBD26D7 48AAC521
                     52129C09 14DA74CF 06BAC98B 7772A29E 4B725CDE EEB01443
                     88DF14CA EAB48078 C4F7638A 5C10EA7E




2014 m. liepos 27 d., sekmadienis

lsattr ir chattr

# lsattr (rodo dokumento atributus)

$ lsattr first.py
-------------e-- first.py


# chattr (keičia dokumento atributus linux sistemoje)
       [extent  format  (e), immutable  (i)]

$ sudo chattr +i first.py
$ lsattr first.py
----i--------e-- first.py
$ echo "#Pabaiga ">>first.py
bash: first.py: Permission denied
$ sudo chattr -i first.py
$ lsattr first.py
-------------e-- first.py


# Dabar galime modifikuoti dokumentą
# chatter ir lsattr galime sujungti į vieną komandą

$ sudo chattr +i first.py && lsattr first.py

# Kitos komandos

# Rodys visų dokumentų atributus
$ lsattr -a

# Append nustatymas leis tik prirašyti informacija '>>' -veiks, '>' - ne
$ sudo chattr +a first.py
$ lsattr first.py
-----a-------e-- first.p
$ echo "#pakeitimas" > first.py
bash: first.py: Operation not permitted
# 1 - reiškias kad įvyko klaida, 0 - operacija sekmingai įvykdyta
$ echo $?
1
$ echo "#pakeitimas" >> first.py
$ echo $?
0

2014 m. liepos 26 d., šeštadienis

Netbios_reflected_DDoS

https://www.cert.lt/tikrinti

137     00-00-00-00-00-00     Netbios_reflected_DDoS

# :139 prievado skanavimas

$ sudo netstat -ntlp |grep :139

# Stabdomas/paleidžiamas samba servisas

sudo service smbd stop
sudo /etc/init.d/smbd stop


sudo service smbd start
sudo /etc/init.d/smbd start



# Kaip padaryti, kad sambad servisas automatiškai neužsikrovinetu?

$ echo 'manual' | sudo tee /etc/init/smbd.conf

# Patikrinam ar įrašta samba..

$ dpkg -s samba|grep installed

..ištrinam samba: 

$ sudo apt-get remove samba
 

# Taip pat šį procesą galima išjungi su servisų konfiguravimo panelė - 'rcconf'

# Įrašom rcconf
$ apt-get install rcconf
...
$ rcconf





Literatūra:
http://www.linuxsecurity.com/resource_files/firewalls/firewall-seen.html#netbios 
(apie netbios)

http://askubuntu.com/questions/69810/how-do-i-add-remove-the-hidden-startup-applications


nmap skanavimo pagrindai

Paleidžiant 'nmap' be 'sudo' atliekamas TCP skanavimas, kai su 'sudo' atliekamas SYN skanavimas.

nmap pagalba
$ man nmap
$ nmap

# nmap dokumentacija
http://nmap.org/book/man.html

Komanda '-v' rodo, kas vyksta skanavimo metu
$ nmap -v localhost

Starting Nmap 6.40 ( http://nmap.org ) at 2014-07-25 23:23 EEST
Initiating Ping Scan at 23:23
Scanning localhost (127.0.0.1) [2 ports]
Completed Ping Scan at 23:23, 0.00s elapsed (1 total hosts)
Initiating Connect Scan at 23:23
Scanning localhost (127.0.0.1) [1000 ports]
Discovered open port 139/tcp on 127.0.0.1
Discovered open port 445/tcp on 127.0.0.1
Discovered open port 631/tcp on 127.0.0.1
Completed Connect Scan at 23:23, 0.02s elapsed (1000 total ports)
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00044s latency).
Not shown: 997 closed ports


Prievadai ir portai nustatomi pagal /etc/services
PORT    STATE SERVICE
139/tcp open  netbios-ssn
445/tcp open  microsoft-ds
631/tcp open  ipp


Skanavimo rezultatų išvedimui naudojamas '-oN'(outputNormal), '-oS'(<rIpt kIddi3)
$ nmap -v -oS nmap.log localhost
$ cat nmap.log

$tart1ng nmAP 6.40 ( http://nmap.OrG ) at 2014-07-25 23:41 E3ST
Nmap scaN r3poRT f0r l0caLh0$t (127.0.0.1)
hoSt iS up (0.00048z lAtEncy).
NOt $hoWn: 997 cl0s3D port$
p0RT    STaTE S3RV!C3
139/Tcp 0p3n  n3tbI0s-SSn
445/tcp Open  micR0soFt-ds
631/tcp 0PeN  ipp


Detalesnė informacija apie procesą, naudojant 'netstat -ntlp', parodo prievado :631 vykdomą procesą 'cupsd'
$ sudo netstat -ntlp  | grep :631
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      2652/cupsd     
tcp6       0      0 ::1:631                 :::*                    LISTEN      2652/cupsd     
 


Udp portų skanavimas su nmap '-sU'(scanUdp)
netstat komanda su '-nulp'(p -progran_name) parametru, galima peržiūrėti lokalios mašinos prievadus ir palyginti rezultatus

$ sudo nmap -v -sU localhost
...
$ netstat -nulp

...

Nmap komanda atvaizduojanti ip adresus ir mašrutų lentelę
sudo nmap --iflist

-sV rodo servisų versijas
sudo nmap -sV localhost

Starting Nmap 6.40 ( http://nmap.org ) at 2015-04-27 22:27 EEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000023s latency).
Not shown: 995 closed ports
PORT     STATE SERVICE     VERSION
80/tcp   open  http        Apache httpd 2.4.7 ((Ubuntu))
139/tcp  open  netbios-ssn Samba smbd 3.X (workgroup:
 


Parodo svetainės http turinį:
sudo nmap -p80 --script http-title localhost

Atspausdina surastas http direktorijos failus:
sudo nmap -p80 --script http-enum localhost 

Dar detalesnė informacija:
sudo nmap -p80 --script http-enum --script-args http-enum.displayall localhost

2014 m. liepos 23 d., trečiadienis

gnu/Linux sistemos logai

Bendras sisteminių įrašų katalogas:
$ /var/log

Logų stebėjimas realiu laiku:
$ tail -f /var/log/syslog

Logų stebėjimas su systemd:
$ journalctl -f

Pagal prioritetą:
$ journalctl PRIORITY=3

dmesg rodo informacija, kuri buvo užkrauta į sistema paskutinio paleidimo metu
$ man dmseg
dmesg - print or control the kernel ring buffer


Failas randamas:
$ /var/log/dmseg

Taip pat galima rasti:
$ which dmesg
/bin/dmesg


Naudojant su grep, galima ištraukti informacija apie kompiuterio naudojamą atmintį, procesorių
$ dmesg | grep -i cpu
$ dmesg | grep -i memory


Kaip patikrinti sistemos naudojamus diskus?
$ dmesg | grep -i sd[a-c]

Kaip patikrinti kokia naudojama tinklo plokštė?
$ dmesg | grep -i eth

Kaip patikrinti bios informaciją, serijos numerius?
$ sudo dmidecode | less

Taip pat galime rasti detalesnius sistemos log failus:
$ ps ax | grep syslog

PSI įrenginiai:
$ lspci

USB įrenginiai:
$ lsusb

CPU informacija:
$ lscpu

Branduolio modulio informacija ir detalesnė informacija apie modulius.
$ lsmod
$ modinfo

Namų vartotojo disko vietos info:
$ df -h ~

Logwatch - programa skirta žurnalo įrašų stebėjimui, su tokiomis funkcijomis, kaip ataskaitų siuntimas į el.paštą:
$ apt-get instal logwatch

Komanda el. pašto siuntimui:
$ sudo logwatch --service all --detail high --mailto elektroninis@pastas.lt --range yesterday


sar - sistemos resursai renkami kas 10 min.
Nustatymai:-u CPU naudojimas per visą dieną.
-d disko naudojimas.
-r atminties naudojimas.
-S swap atmintis.
-B pagin statistika.
naudojimo pvz:sar -u 1 4 #Atvaizduos CPU informacija 4 kartus realiu laiku kas 1 sekundę.
sar -r 1 #Atvaizduos kas 2 sekundes informaciją apie atmintį.

cron.d dokumente matome, sar įrašus:
$cat /etc/cron.d/sysstat

# Activity reports every 10 minutes everyday
5-55/10 * * * * root command -v debian-sa1 > /dev/null && debian-sa1 1 1
# Additional run at 23:59 to rotate the statistics file

59 23 * * * root command -v debian-sa1 > /dev/null && debian-sa1 60 2


2014 m. liepos 22 d., antradienis

Darbalaukio įrašynėjimas


ffmpeg komanda:

ffmpeg -f x11grab -s $(xdpyinfo | grep 'dimensions:' | awk '{print $2}' | cut -dx -f1)x$(xdpyinfo | grep 'dimensions:' | awk '{print $2}' | cut -dx -f2) -b:v 350k -r 15 -i :0.0  -q:v 3 -r 15 -y ~/Videos/$(date +%d%b_%Hh%Mm).avi

Radau python programėlę, su gui, patikrinau veikia su Linux mint, taip pat turėtų veikti ir su kitomis Debian tipo distribucijomis.

http://pastebin.com/BY1t5AcC

#  RecorditNow
#  Dar viena programėlė, kuri įrašinėja darbalaukį

http://recorditnow.sourceforge.net/index.html



Literatūra:

https://www.youtube.com/watch?v=j344j34JBRs


2014 m. liepos 20 d., sekmadienis

Kaip paleisti twitch, livestream per vlc

# Žemiau aprašyta kaip lokaliai paleisti gyvas transliacijas, umix tipo OS, prie literatūros yra nuoroda, ten nurodymai kaip tą patį atlikti kitoms OS

# Pirmiausiai reikia instaliuoti pip ir livestreamer

$ apt-get install python-pip
$ sudo pip install livestreamer

# Dabar galime paleisti live stream

$ livestreamer http://www.twitch.tv/saltybet best




Literatūra:

https://github.com/chrippa/livestreamer

http://livestreamer.tanuki.se/en/latest/install.html - kaip paleisti livestreamer kitoms OS
screenshotas, jei kartais neveitų nuoroda

Shell

Vartotojas gali pasirinkti skirtingas shells, shells sarašas paprastai buna /etc/shells kataloge.

$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash

Kokią shell naudoja sistema?
Galime pasižiūrėti iškvietę aplinkos kintamuosius:

$ env| grep -i shell
SHELL=/bin/bash

Taip pat aplinkos kintamuosius galima iškviesti su 'echo' komanda.

$ echo $SHELL
/bin/bash

Arba atspausdinti visus aplikos kintamuosius ir prafiltuoti 'shell' su 'grep -i'

$ env|grep -i bash
SHELL=/bin/bash

Įvykdžius 'ps' komandą, be papildomų nustatymų, matome visus procesus. Taip pat matome, kad mųsų tty, naudoja bash shell.

$ ps
PID TTY TIME CMD
10219 pts/0 00:00:00 bash
11419 pts/0 00:00:00 ps

ps '-p' leidžia pasirinkti prosesus pagal id,
'$$' - atspausdins tik esamą procesą.

$ ps -p $$
PID TTY TIME CMD
11686 pts/0 00:00:00 bash

Taip pat galime sužinoti apie shell iš '/etc/passwd/' dokumento

$ cat /etc/passwd
....
sup:x:1000:1000:sup,,,:/home/sup:/bin/bash

Pakeisti shell galima įvedus shell pavadinimą.

$ sh
$ echo $0
sh
$ ps -p $$
PID TTY TIME CMD
13462 pts/2 00:00:00 sh
$ exit

Vienas įdomus failas tai  bash_completion.sh, randamas /etc/profile.d


Literatūra:

http://www.linfo.org/change_shell.html
http://www.softlab.ntua.gr/facilities/documentation/unix/shelldiff.html
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/shells.html

2014 m. liepos 11 d., penktadienis

ką daro tty komanda?

# tty = teletype
# pty = pseudo terminal

# tty galima perjungti [Ctrl + Alt +F1] (galima keisti nuo F1 iki F6) komanda F7 sugražina į normalų darbalaukį

# Kuriame ttl šiuo metu dirbama

$ tty
/dev/pts/10


# Rodo kokie yra prisijungę vartotojai kartu su data kada jie prisijunge
# sup :0 - :0 reiškia grafinį darbalaukį

$ who
sup      :0           2014-07-10 14:05 (:0)
sup      pts/0        2014-07-11 17:03 (:0)
sup      pts/10       2014-07-11 11:47 (:0)



# Shell kitamasis, kuris parodo grafinį darbalaukį

$ echo $DISPLAY
:0

# who am i parodys dabartyines sesijos praplėstą informacija, taip pat tra whoami

$ who am i
sup      pts/10       2014-07-11 11:47 (:0)


 
# Matome, kad yra paleistas tty (paspaudus Ctrl + Alt + 1)
# Taip pat virsuje parodytas uptime, vartotojai.. Taip pat rodo cpu panaudojimą, taip pat matome pts/10, paleista w komandą
$ w
 18:06:47 up 1 day,  4:11,  5 users,  load average: 0,54, 0,52, 0,44
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
sup      tty1                      17:49   31.00s  0.24s  0.21s -bash
sup      :0       :0                Kt14   ?xdm?   4:12m  0.37s init --user
sup      pts/0    :0               17:03   52:31   0.05s  0.00s python
sup      pts/10   :0               11:47    7.00s  0.39s  0.00s w
sup      pts/12   :0               17:58    7:35   0.06s  0.06s bash


# Dar karta tty parodo, naudojama teletype terminal
$ tty
/dev/pts/7

$ cd /dev/pts/
sup@sup-desktop /dev/pts $ ls -al
total 0
drwxr-xr-x  2 root root       0 Lie 22 17:30 .
drwxr-xr-x 16 root root    4160 Lie 22 17:30 ..
crw--w----  1 sup  tty  136,  0 Lie 23 16:41 0
crw--w----  1 root tty  136,  1 Lie 23 07:35 1
crw--w----  1 root tty  136, 19 Lie 22 17:30 19
crw--w----  1 sup  tty  136,  2 Lie 23 21:35 2
crw--w----  1 root tty  136,  3 Lie 22 17:30 3
crw--w----  1 root tty  136,  4 Lie 22 17:30 4
crw--w----  1 root tty  136,  5 Lie 22 17:31 5
crw--w----  1 root tty  136,  6 Lie 22 17:30 6
crw--w----  1 sup  tty  136,  7 Lie 23 21:47 7
crw--w----  1 sup  tty  136,  8 Lie 23 21:47 8
c---------  1 root root   5,  2 Lie 22 17:30 ptmx

# Atidarius nauja terminalo langa Ctrl+Shift+T ir parašius komandą tty, gauname nauja tty konsolę
$ tty
/dev/pts/8


Literatūra:

http://askubuntu.com/questions/27339/what-is-tty7-in-the-commandline

2014 m. liepos 10 d., ketvirtadienis

python3 dokumentacija

# help() iteraktyvi pagalba
# Parodo visus atributus

>>> dir()

# Parodo atributus sarašo objekte

>>> dir([])

# Parodo visus atributus išskyrus tuos, kurie prasideda '__'

>>> [x for x in dir([]) if x[0] != '_' ]

>>> len([x for x in dir([]) if not x.startswith('__') ])



>>> [a for a in dir(list) if not a.startswith('__')]
>>> [a for a in dir(dict) if not a.startswith('__')]

# Apksaičiuoja kiek yra moduliu, kurie neprasideda  '__'

>>> len(dir([])) - len([x for x in dir([]) if not x.startswith('__') ])
34


# __doc__ naudojamas, kad butu atspaustinti komentarai

def kv(x):
    """ Pakelimas
        kvadratu
    x**x
        """
    return x**2


print(kv.__doc__)
print(kv(8))

>>>
 Pakelimas
        kvadratu
    x**x
       
64

# IDE lange galima iškviesti komentarus prieš tai reikia importuoti faila šiuo atveju dokumento pavadinimas test1.py, pavyzdyje iškviečiami funkcijos kv komentarai

>>> print(test1.kv.__doc__)
 Pakelimas
        kvadratu
    x**x

>>> help(test1.kv)
Help on function kv in module test1:

kv(x)
    Pakelimas
        kvadratu
    x**x

>>>




# Galima pažiūrėti modulio dokumentacija
>>> import sys


>>> print(sys.__doc__)
  ....
>>> print(sys.version.__doc__)
  ....

 # Taip pat galima naudoti help funkcija
>>> help(sys)
  ....

#  Iškviečia dokumentacija ir pateikia naršyklėje

$ python3 -m pydoc -b

2014 m. liepos 7 d., pirmadienis

Python3

# print funkcijos suderinamumas tarp 2.x ir .3.x versijos

from __future__ import print_function

# string formavimas 3.x versijoje

>>> print('%s, diena , %s' %('Gera',  'Pasauli!') )
 

Gera, diena , Pasauli!

>>> print('{0}, rytas, {1}'.format('Labas', 'Pasauli!'))

Labas, rytas, Pasauli!

>>> print('Ats: ' + str(42))
 

Ats: 42

# Kintamųju priskirimo būdai

>>> a =b = c = 1
>>> a,b,c = 1,1,1
>>> a = 1; b = 1; c = 1


# Žodyno reišmių priskyrimas

>>> {reiksme:0 for reiksme in 'abc'}
{'b': 0, 'c': 0, 'a': 0}

# Pasirinkimas, su klaidos pranešimu

>>> D = {'vienas': 1, 'du': 2, 'trys': 3} 

>>> print(D.get('vienas', 'neteisingas pasirinkimas'))
1
>>> print(D.get('vienaZ', 'neteisingas pasirinkimas'))
neteisingas pasirinkimas


# If pasirinkimas su klaidos tikrinimu
 
>>> pasirinkimas = 11
>>> if pasirinkimas in D:
    print (D[pasirinkimas])
else:
    print('Neteisingas pasirinkimas')

  
Neteisingas pasirinkimas



# Tikrinimas su try

>>> try:
    print(D['pasirinkimas'])
except KeyError:
    print('neteisingas pasirinkimas')

   
neteisingas pasirinkimas


# Supaprastintas if/else išraiška

if X:
    A = Y
else:
    A = Z


# Tas pats kas 

A = Y if X else Z

>>> A = 'taip' if 'labas' else 'ne'
>>> A
'taip'
>>> A = 'taip' if '' else 'ne'
>>> A
'ne'


# Galima panaudoti žodyna, loginiame vertinime

>>> ['ne: 0', 'taip: 1'][bool('')]
'ne: 0'
>>> ['ne: 0', 'taip: 1'][bool('a')]
'taip: 1'



# Tik True reikšmių filtravimas ir sarašo

>>> L=[1,0,'test','','test3']
>>> L
[1, 0, 'test', '', 'test3']
[1, 'test', 'test3']


>>> list(filter(bool, L))
[1, 'test', 'test3']


 >>> [x for x in L if bool(x)]
[1, 'test', 'test3']


 >>> [x for x in L if x]
[1, 'test', 'test3']


# Tas pati galima atlikti su list comprehension

>>> [x for x in L if x]
[1, 'test', 'test3']



----
# Generuojamas lyginių skaičių sarašas

>>> [i for i in range(51) if i % 2 == 0]

# Tuple iteracija

>>> T = [(2,4),(6,8),(10,12)]
>>> for (x,y) in T:
    print(x,y)
  
2 4
6 8
10 12



# Žodyno iteracija, naudonat .items tuple formate

>>> D
{'b': 2, 'c': 3, 'a': 1}
>>> for key, value in D.items():
    print(key, value)
   
b 2
c 3
a 1


# Skaitymas iš dokumento po viena raide

>>> for raide in open('log.txt').read():
    print (raide, end='')


# Skaitymas iš dokumento po viena eilute

 >>> for eilute in open('log.txt').readlines():
    print (eilute, end='')


# Sarašo elementų keitimas su - for loop

>>> L
[2, 3, 4]
>>> for i in range(len(L)):
    L[i] += 1

>>> L
[3, 4, 5]

# Sarašo elementų keitimas su - while loop

>>> L = [1,2,3]
>>> i = 0
>>> while i <len(L):
    L[i] += 1
    i += 1
>>> L
[2, 3, 4]


# Sarašo elementų keitimas su list comprehension

>>> L
[2, 3, 4]
>>> [x + 1 for x in L]
[3, 4, 5]


# Dviejų sarašų reikšmių apjungimas į tuple
>>> L
[2, 3, 4]
>>> L1
['aaa', 'bbb', 'ccc', 'ddd']
>>> list(zip(L, L1))
[(2, 'aaa'), (3, 'bbb'), (4, 'ccc')]


# For ciklas naudojamas kartu su zip funkcija, kaip matome, galima atlikti aritmenius veiksmus
>>> L
[2, 3, 4]
>>> L1 = [7,8,9]
>>> for (x,y) in zip(L, L1):
    print(x, y,  '--', x+y)

   
2 7 -- 9
3 8 -- 11
4 9 -- 13


# Dviejų sarašų reikšmi sujungimas į žodyną naudojant zip ir for ciklą

>>> keys
[1, 3, 5]
>>> vals
['vienas', 'du', 'trys']


>>> D = {}
>>> for (k, v) in zip(keys, vals): D[v] = k

>>> D
{'du': 3, 'trys': 5, 'vienas': 1}

––
# Dar papraščiau tai galima atlikti iškar kuriant žodyną su dict(zip(L1,L2))

>>> D2 = dict(zip(keys, vals))
>>> keys
[1, 3, 5]
>>> vals
['vienas', 'du', 'trys']
>>> D2 = dict(zip(keys, vals))
>>> D2
{1: 'vienas', 3: 'du', 5: 'trys'}


# Dvienų sarašų sujungimas į žodyną naudojant list comprehension

>>> {k: v for (k,v) in zip(keys, vals)}
{1: 'vienas', 3: 'du', 5: 'trys'}


# Enumerate funkcija, kuri fiksuoja string buvimo vietą

>>> for (vieta, raide) in enumerate(S):
    print(raide, 'yra -', vieta, ' vietoje.')

   
z yra - 0  vietoje.
o yra - 1  vietoje.
d yra - 2  vietoje.
i yra - 3  vietoje.
s yra - 4  vietoje.





# Skaitimas iš failo su for ciklu

>>> for eilute in open('test1.py'):
    print(eilute.upper(), end='')


# f.__next__() funkcija naudojama skaityti po viena eilute 3.x, f.next() 2.x, next(nukreipimas_i_nustaityta_faila) veikia abiejose versijose

# Žodyno iteracija, kad galima būtų atlikti su sarašais ar žodynais butinai reikia priskirti iter(x)
>>> D
{'b': 2, 'a': 1, 'c': 3}

>>> I = iter(D)
>>> I
<dict_keyiterator object at 0x7f3a87561d68>

>>> next(I)
'b'
>>> next(I)
'a'
>>> next(I)
'c'
>>> next(I)


# Priešingai meta klaidos kodą

>>> next(D)
Traceback (most recent call last):
  File "<pyshell#153>", line 1, in <module>
    next(D)
TypeError: 'dict' object is not an iterator


# Kaip veikia enumerate funkcija

>>> S = 'zodis'
>>> E = enumerate(S)
>>> E
<enumerate object at 0x7f3a87564678>
>>> list(E)
[(0, 'z'), (1, 'o'), (2, 'd'), (3, 'i'), (4, 's')]
>>> next(E)
Traceback (most recent call last):
  File "<pyshell#195>", line 1, in <module>
    next(E)
StopIteration
>>> E = enumerate(S)
>>> next(E)
(0, 'z')
>>> next(E)
(1, 'o')
>>> E.__next__()
(2, 'd')



# Ieškojimas tekstiniame faile, jei pirmas simbolis atitinka raidei 'i', ta eilute atspausdinama, galima ieškoti paskutinio simbolio su x[-1]

[x.rstrip() for x in open('test1.py') if x[0] == 'i']

# Sarašų ciklą galima generuoti sutrumpinta forma, pavyzdyje kiekvienam x nariui priskirami visi y nariai.

>>> [(x, y) for x in '123' for y in 'abc']
[('1', 'a'), ('1', 'b'), ('1', 'c'), ('2', 'a'), ('2', 'b'), ('2', 'c'), ('3', 'a'), ('3', 'b'), ('3', 'c')]

# Failus galima iškart pateikti saraše, rušiuoti enumeruoti, sujungti, priskirti kintamuosius, logiškai patikrinti

sorted(open('test1.py'))
list(open('test1.py'))
tuple(open('test1.py'))
list(enumerate(open('test1.py')))
list(filter(bool, open('test1.py')))
'--'.join(open('test1.py'))
a, *b = open('test1.py')
aaa' in list(open('test1.py'))
L[:0] = [list(open('test1.py'))[0]]

>>> len(list(open('test1.py')))
8
>>> q,w,e,r,t,y,u,p = open('test1.py')

# Failo iteracija kai rezultatas žodyne

>>> set(open('test1.py')
>>> {x for x in open('test1.py')}



# Žodyno rušiavimas

>>> D
{'b': 2, 'a': 1, 'c': 3}
>>> for k in sorted(D): print(k, D[k])

a 1
b 2
c 3



#
 Kaip sužinoti python interpretatoriaus versiją?

>> import sys

>> sys.version
'2.7.3 (default, Apr 10 2012, 23:31:26)


# Kaip pažiūrėti kokie yra importuoti moduliai ir koks yra modulio turinys?

>>> dir ()
['__builtins__', '__doc__', '__name__', '__package__', 'math']
 

>>> import math
>>> dir (math)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'hypot', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']



#  Kaip sužinoti ką daro funkcija?
>>> S
'labas'
>>> help(S.isalpha)


Strings

# Keičiami ryšiai tarp raidžių
>>> S
'Zodis'
>>> ' '.join(S)
'Z o d i s'
 

# Atskirų simbolių atvaizdavimas S[1:] nurodo S[1:len(S)]
 >>> S[1]
'o'
>>> S[1:]
'odis'




# Paieška (-1) reikia, kad tokios raidės nėra, kitu atveju atspausdina pirma raidės numeri, kuriame randama raidė.
>>> S
'Zodis'
>>> S.find('p')
-1
>>> S.find('Z')
0
>>> S.find('o')
1
>>> S.find('Zo')
0


# Simbolių keitimas


>>> S
'Zodis'

>>> S.replace('odis', 'irkles')
'Zirkles'
>>> S
'Zodis'


# Kaip atskirti pagal bendrą simbolį

>>> Skaiciai
'Vienas,du,trys,keturi'
>>> Skaiciai.split(',')
['Vienas', 'du', 'trys', 'keturi']



# Atvaizdavimas tekste
>>> '%s, eggs, and %s' % ('spam', 'SPAM!')
'spam, eggs, and SPAM!


>>> '{0}, eggs, and {1}'.format('spam', 'SPAM!')
'spam, eggs, and SPAM!'


>>> '{}, eggs, and {}'.format('spam', 'SPAM!')
'spam, eggs, and SPAM!'


 Lists

# Pridėjimas/ištraukimas iš sarašo append/pop

>>> Sarasas = ['Zeme', 2014, 'Jupiteris']
>>> Sarasas.append('Indraja')
>>> Sarasas
['Zeme', 2014, 'Jupiteris', 'Indraja']
>>> Sarasas.pop(1)
2014
>>> Sarasas
['Zeme', 'Jupiteris', 'Indraja']


# Kaip iš M sarašo ištraukti, visus pirmus narius
>>> M =[ [1,2,3], [4,5,6], [7,8,9] ]
>>> col2 = [row[0] for row in M]
>>> col2
[1, 4, 7]




# Kiekvieną narį pakelia kvadratu

>>> [row[0] ** 2 for row in M]
[1, 16, 49]


2014 m. liepos 4 d., penktadienis

NetBios

GNU/Linux

# nbtscan reikia aptisiųsti komanda [sudo apt-get install nbtscan]
nbtscan 192.168.1.1-254

Doing NBT name scan for addresses from 192.168.1.1-254

IP address       NetBIOS Name     Server    User             MAC address     
------------------------------------------------------------------------------
192.168.1.68     NPI781027                  <unknown>        00:00:00:00:00:00
192.168.1.65     MINI-PC2         <server>  <unknown>        00:1c:bf:2d:cc:12


# Nmap komanda randanti OS, kompiuterio pavadinimą, NetBIOS, WorkGroup

nmap --script smb-os-discovery -p 445 192.168.1.1-254

Nmap scan report for 192.168.1.2
Host is up (0.025s latency).
PORT    STATE SERVICE
445/tcp open  microsoft-ds

Host script results:
| smb-os-discovery:
|   OS: Windows 7 Ultimate 7601 Service Pack 1 (Windows 7 Ultimate 6.1)
|   OS CPE: cpe:/o:microsoft:windows_7::sp1
|   NetBIOS computer name: User
|   Workgroup: WORKGROUP
|_  System time: 2014-07-04T11:48:10+03:00







# Panašiam rezultatui galima naudoti -sC parametrą
sudo nmap  -sC 192.168.1.x

# Parodis detalia kiekvieno kompiuterio informaciją, kokiai darbo grupei priklauso, kartu su serviso tipu
nbtscan -v 192.168.1.1-254

NetBIOS Name Table for Host 192.168.1.65:

Incomplete packet, 173 bytes long.
Name             Service          Type           
----------------------------------------
MINI-PC2         <00>             UNIQUE
MINI-PC2         <20>             UNIQUE
WORKGROUP        <00>              GROUP
WORKGROUP        <1e>              GROUP




Windows

# NetBIOS lentele su id kodais
nbtstat -a [net-bios-name]

# Rodis lokalias NetBIOS lentelę
nbtstat -n [net-bios-name]

# Rodis netbios kompiuterio cache, kur vardas yra susietas su ip adresu
nbtstat -c

# Atnaujina NetBIOS registruotus kompiuterio/ištrina ir pilnai atnaujina lentelę
nbtstat -RR
nbtstat -R


Literatūra:
http://www.hildrum.com/nbtstat.htm  - Bazines nbtstat komandos
https://pentestlab.wordpress.com/tag/nbtstat/ - nbtscan GNU/linux platformoms aprašymas
http://www.windowsnetworking.com/kbase/WindowsTips/WindowsNT/AdminTips/Utilities/Nbtstatrevealswhoisloggedon.html - Čia galima rasti NetBIOS reikšmes

2014 m. liepos 2 d., trečiadienis

Maršrutų lentelės

Windows:

# Atspausdina visą maršrutų lentelę
route print

# Atspausdina visas lenteles su 192.* adresasais
route  print 192.*  

# /p reikškia persisten route, lentelė bus įrašyta prie persistent routes laukelio
route add /p 0.0.0.0 mask 0.0.0.0 192.168.1.254 metric 1

# Komandos
route add
route change
route delete
route print

 # Persistent routes saugomi registruose :
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\PersistentRoutes



Literatūra:

http://www.allscoop.com/how-to-move-persistent-route-table-to-a-new-computer.php



Gnu/Linux:
Komanda 'route' arba 'netstat -r' atspausdina Kernel IP routing tables