2009/12/27

ctypes - наш друг!

Модуль ctypes с легкостью позволяет использовать функции сторонних DLL или SO файлов. В ctypes есть три метода подгрузки библиотек:
  • cdll() - использует соглашение cdecl при вызове функций
  • windll() - использует stdcall (для Microsoft Win32 API)
  • oledll() - использует cdecl + коды возврата HRESULT (для функций Microsoft COM)
Пример: попробуем воспользоваться широко известной функцией printf() из языка С. В Linux она находится в библиотеке /lib/libc.so.6, в Windows - C:\windows\system32\msvcrt.dll.

Код для Linux:
from ctypes import *
libc = CDLL("libc.so.6")
message = 'Hello world!\n'
libc.printf('Testing: %s', message)
Код для Windows:
from ctypes import *
msvcrt = cdll.msvcrt
message = 'Hello world!\n'
msvcrt.printf('Testing: %s', message)
Исчерпывающий мануал по ctypes находится здесь.

2009/12/07

Монтирование iso в Linux

# mkdir /mnt/iso
# mount -o loop -t iso9660 /home/iv/disk.iso /mnt/iso
# ...
# umount /mnt/iso
# echo profit!

2009/11/14

Минимизация всех окон в KDE4

Меня очень расстроил тот факт, что для минимизации окон следует подключать отдельный виджет, который жрет память и место на панели. Я начал искать пути отступления и по мотивам этого поста докладываю.

Для сворачивания всех окон используем этот скрипт:
#!/bin/sh
target=on
if xprop -root _NET_SHOWING_DESKTOP | fgrep '= 1' ; then
target=off
fi
wmctrl -k ${target}
Для его корректной работы необходима утилита xprop, входящая в пакет x11-utils, а также утилита wmctrl, которая сама по себе. После сохранения скрипта в каком-то файле и chmod'ания на +х добавляем ссылку на него в KDE Menu (kmenuedit) и во вкладке Advanced прописываем Current shortcut key. У меня это Win+D.

Profit!

2009/11/08

Определение транскодов в Linux

Под "транскодом" в данном случае я подразумеваю mp3 файл переконвертированный во flac. Таким образом размер файла раздувается, а качество остается без изменений. На слух, конечно, это тоже вполне заметно, а вот убедиться точно поможет программа Audacity.

Открываем нужный трек (Ctrl+O). Далее из меню Analyze > Plot spectrum построит нам спектрограмму, на которой можно увидеть распределение частот. Lossy форматы отличаются тем, что обрезают верхний диапазон частот для уменьшения размера файла. Это можно пронаблюдать на следующем рисунке:



Виден явный спад в области 16 кГц. А так выглядит спектрограмма нормального трека:

2009/11/01

Играемся с lossless в Linux

Опишу решение ряда проблем, вставших перед рядовым слушателем lossless музыки в Linux, в частности Debian-based дистрибутивах (я использую Kubuntu):
  • Конвертация APE -> FLAC
  • Разделение образа диска на треки по CUE файлу
  • Именование треков по тэгам
Для конвертации понадобятся два пакета: flac и mac. Первый устанавливается из репозиториев:
sudo apt-get install flac
Второго в репозиториях нет, поэтому нужно скачать .deb файл отсюда и далее:
sudo dpkg -i mac-3.99-u4_b3-1_i386.deb
Для разделения образа на треки нужны пакеты cuetools и shntool:
sudo apt-get install cuetools shntool
Для именования треков - софтина EasyTAG с непростым GTK фронтэндом:
sudo apt-get install easytag
Конвертим из APE во FLAC все файлы в текущей директории:
shnconv -o flac *.ape
Делим FLAC образ на треки:
cuebreakpoints file.cue | shnsplit -o flac image.flac
Делим APE образ на треки во FLAC:
cuebreakpoints file.cue | shnsplit -o flac image.ape
После разделения у треков будут имена типа "split-track01.flac", это не гуд. Но тэги будут прописаны по CUE файлу, стало быть, можно переименовать файлы согласно тэгам. И в этом поможет EasyTAG, работу с которой описывать смысла нет, ибо gui :(

2009/09/28

scp - безопасное копирование файлов между компьютерами

Открываю тэги "useful" и "*nix"! Утилита scp пригодится, если нужно перекинуть файл с одного компа на другой. В большинстве случаев хватает этого синтаксиса:
scp <юзер>@<комп>:<что копировать> <юзер>@<комп>:<куда копировать>
В частном случае утилита может быть использована для передачи файлов между локальным компьютером и удаленным. В таком случае реквизиты <юзер>@<имя компа> локального компьютера можно опустить.

2009/09/16

Радости разработки на Django

Недавно заинтересовался разработкой веб-приложений на Python, соотвественно, решил воспользоваться фреймворком Django. В этой заметке хочу описать процесс создания и запуска проекта Django на Apache, ибо запуск приложений на сервере хостера заметно отличается от запуска их на локальном компьютере (что описывается в первых главах DjangoBook), как оказалось.

На моём хостинге уже был установлен Django и соотвествующим образом настроен Apache, поэтому первое, что нужно сделать - это создать проект. В моем случае последовала команда:
~/www/webapp$ django-admin.py startproject mysite
После этого в папке mysite создался проект django, включающий в себя несколько файлов (подробное описание их опускаю, можно найти в DjangoBook).
Далее согласно мануалу нужно создать WSGI-приложение webapp.wsgi следующего содержания:
import os, sys
sys.path.append('/home/www/webapp)
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()
В итоге получаем приветственную страницу Django по ссылке http://сайт/webapp
Чтобы получать доступ к Django из корня сайта, нужно написать rewrite правило в файле .htaccess, который должен располагаться в папочке public_html:
RewriteEngine On
RewriteRule ^(.*)$ /webapp/$1 [L,QSA]
Теперь привественная страничка доступна по нормальной ссылке, далее можно продолжать разработку согласно DjangoBook.

2009/08/04

SocksiPy - надеваем носки правильно

SocksiPy - небольшой модуль, призванный решить задачу подключения через SOCKS прокси, которая не реализована в стандартных библиотеках типа urllib и urllib2. Модуль позволяет работать с SOCKS четвертой и пятой версий, а также и с HTTP прокси, поддерживающими метод CONNECT. После установки коннекта поведение объекта не отличается от простого сокета. Пример кода:
import socks
s = socks.socksocket()
s.setproxy(socks.PROXY_TYPE_SOCKS5,"socks.example.com")
s.connect(("www.example.com",80))
Также существует возможность перезаписи стандатного метода сокета так, чтобы все свежесозданные сокеты работали через прокси. Удобно, если в своей программе нужно пустить весь трафик через прокси:
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5,"socks.example.com")
socket.socket = socks.socksocket
urllib.urlopen("http://ivinside.blogspot.com/")

2009/08/02

Руткиты -3 кольца

Вот здесь появились слайды (в количестве 85 штук) с презентации "Introducing Ring -3 Rootkits", которая проходила в рамках Black Hat USA 2009. До чего хитроумные хакеры дошли! Исполняют свои коды на чипсетах... Соотвественно, если к вам попадет такой руткит, то банальная переустановка ОС уже не поможет. На чипсеты Q35 от Intel руткит загружается через Intel Active Management Technology (AMT). На этих чипсетах установлен процессор типа ARC4 с RISC архитектурой, под который потребуется соотвествующий компилятор. Для последних чипсетов типа Q45 память под AMT дополнительно защищена, так что данные руткиты уже неработоспособны. Читайте подробности в презентации и повышайте квалификацию!

И да, собственно материалы из Лас-Вегаса доступны тут. Очень много интересного.

2009/07/31

Samurai WTF

Вышла следующая девелоп версия Samurai WTF - платформы для аудита веб-приложений.
Ченджлог:
Installed Cewl from dijininja.org -- Kevin Johnson
Updated Ubunutu patches as of July 23, 2009 -- Frank DiMaggio
Updated w3af from SVN as of July 25, 2009 -- Kevin Johnson
Fixed sqlninja.sh -- Frank DiMaggio
Fixed sqlmap.sh to include the -h -- Kevin Johnson for Tim Medin
Updated sqlmap to 0.7 -- Frank DiMaggio and Kevin Johnson
Updated Firefox add-on Hackbar -- Kevin Johnson
Updated Firefox add-on XSS Me -- Kevin Johnson
Updated Firefox add-on Header Spy -- Kevin Johnson
Updated Firefox add-on User Agent Switcher -- Kevin Johnson
Updated jBroFuzz to 1.4 -- Kevin Johnson
Upgrade nmap to 5.0 -- Kevin Johnson
Installed Durzosploit from SVN as of July 18, 2009 -- Kevin Johnson
Installed BrowserRider from SVN as of July 18, 2009 -- Frank DiMaggio
Added Jason Wood's username generator scripts -- Kevin Johnson
Updated MaltegoCE to 2.02 -- Frank DiMaggio
Added Laudanum Files -- Kevin Johnson
Added GPScan.rb from dijininja.org -- Kevin Johnson
Added HowTo videos from Pauldotcom -- Kevin Johnson
Картинка: