BackTrack5 – Metasplioit svn update error
„Failed to add directory ‘data/svn’: an unversioned directory of the same name already exists”
To fix it:
Delete svn folder in /opt/framework3/msf3/data
And then:
#svn up
#msfupdate.
BackTrack5 – Metasplioit svn update error
„Failed to add directory ‘data/svn’: an unversioned directory of the same name already exists”
To fix it:
Delete svn folder in /opt/framework3/msf3/data
And then:
#svn up
#msfupdate.
Gdy Ci padnie linux:
Target filesystem doesn’t have /sbin/init
No init found. Try passing init= bootarg
BusyBox v1.13.3 (Ubuntu 1:1.13.1-1ubuntu11) built-in shell (ash)
Enter ‘help’ for a list of built-in commands.(initramfs)
Można spróbować użyć następujących sekwencji poleceń:
set prefix=(hd0,11)/boot/grub
set root=(hd0,11)
insmod linux
linux /vmlinuz root=/dev/sda11 ro
initrd /initrd.img
boot
Od nie dawna mam „zaszczyt” testowania aplikacji Django i pierwsze pytanie jakie postawiłem sobie było następujące:
Najprościej zainstalować Django-Debug-Toolbar. Co należy zrobić?
'debug_toolbar.middleware.DebugToolbarMiddleware'
DEBUG_TOOLBAR_PANELS = ( 'debug_toolbar.panels.version.VersionDebugPanel', 'debug_toolbar.panels.timer.TimerDebugPanel', 'debug_toolbar.panels.settings_vars.SettingsVarsDebugPanel', 'debug_toolbar.panels.headers.HeaderDebugPanel', 'debug_toolbar.panels.request_vars.RequestVarsDebugPanel', 'debug_toolbar.panels.template.TemplateDebugPanel', 'debug_toolbar.panels.sql.SQLDebugPanel', 'debug_toolbar.panels.signals.SignalDebugPanel', 'debug_toolbar.panels.logger.LoggingPanel', )
'debug_toolbar'
INTERNAL_IPS=['127.0.0.1:8000']
Wygląd Panelu Administracyjnego przykładowej aplikacji wygląda jak poniżej:

C.D.N
1. HTMLified Perl 5 Reference Guide – http://www.oopweb.com/Perl/Documents/Perl5Ref/VolumeFrames.html
2. Perl 5 Documentation – http://www.oopweb.com/Perl/Documents/PerlDoc/VolumeFrames.html
3. Perl for Perl Newbies – http://www.oopweb.com/Perl/Documents/P4PNewbies/VolumeFrames.html
4. Perl for Win32 FAQ – http://www.oopweb.com/Perl/Documents/PerlWin32/VolumeFrames.html
5. Beginning Perl – http://www.perl.org/books/beginning-perl/
6. Impatient Perl – http://www.perl.org/books/impatient-perl/
7. Extreme Perl – http://www.extremeperl.org/bk/home
8. MacPerl: Power & Ease – http://macperl.com/ptf_book/r/MP/i2.html
9. Embedding Perl in HTML with Mason – http://www.masonbook.com
10. Perl for the Web - http://www.globalspin.com/thebook/
11. Web Client Programming with Perl – http://www.oreilly.com/openbook/webclient/
12. Perl 5 By Example – http://www.computer-books.us/perl_0010.php
13. An Introduction to Perl – http://www.linuxtopia.org/Perl_Tutorial/index.html
14. Beginning CGI Programming with Perl – http://www.learnthat.com/internet/learn-160-cgi_programming_perl.htm
15. Perl Tutorial: Start – http://www.comp.leeds.ac.uk/Perl/start.html
16. A Perl Tutorial – http://www.civeng.carleton.ca/Courses/Grad/1995-96/82.562/perl/
17. Robert’s Perl Tutorial – http://www.sthomas.net/oldpages/roberts-perl-tutorial.htm
18. Beginning Perl Tutorials – http://www.pageresource.com/cgirec/index2.htm
19. Beginner’s Guide to CGI Scripting with Perl – http://www.lies.com/begperl/
20. Practical Perl Programming – http://www.cs.cf.ac.uk/Dave/PERL/
21. Perl 5 Unleashed – http://octopus.cdut.edu.cn/~yf17/perl5/
22. Perl for System Administration – http://www.unix.org.ua/orelly/perl/sysadmin/index.htm
23. PERL — Practical Extraction and Report Language – http://www-cgi.cs.cmu.edu/cgi-bin/perl-man
24. Programming Perl – http://www.unix.org.ua/orelly/perl/prog3/
25. Steve Litt’s Perls of Wisdom – http://www.troubleshooters.com/codecorn/littperl/index.htm
26. Perl Regular Expression Tutorial – http://virtual.park.uga.edu/humcomp/perl/regex2a.html
27. Perl Documentation – http://www.perl.com/pub/q/documentation
28. Programming Perl 5 – http://www.squirrel.nl/pub/perlref-5.004.1.pdf
29. Beginner’s Introduction to Perl - http://www.perl.com/pub/a/2000/10/begperl1.html
30. Perl in a Nutshell – http://www.unix.org.ua/orelly/perl/perlnut/index.htm
31. Programming Perl, 3rd Edition - http://www.unix.org.ua/orelly/perl/prog3/index.htm
32. Advanced Perl Programming – http://www.unix.org.ua/orelly/perl/advprog/index.htm
33. Perl Cookbook - http://www.unix.org.ua/orelly/perl/cookbook/index.htm
XML processing with Perl – http://www.xmltwig.com/tutorial/perl_xml/mtb04_01.html
SQLAlchemy to ORM (relacyjny maper) baz danych dla pythona, konkurencyjny względem SQLObject.
Object-relational mapping (ORM, O/RM, and O/R mapping) in computer software is a programming technique for converting data between incompatible type systems in object-oriented programming languages. This creates, in effect, a „virtual object database” that can be used from within the programming language. There are both free and commercial packages available that perform object-relational mapping, although some programmers opt to create their own ORM tools...
Definicja przytoczona za – http://en.wikipedia.org/
Obecnie wspiera on następujące bazy poprzez podane pakiety:
Aby zainstalować SQLachemy Można skorzystać z easy_install:
easy_install SQLAlchemy
pip install SQLAlchemy
lub też ściągnąć paczkę i zainstalować standardowo:
python setup.py install
Aby sprawdzić poprawność instalacji uruchamiamy interpreter pythona i wpisujemy.

>> import sqlalchemy >> sqlalchemy.__version__ 0.7.0
Pakiet SQLalchemy została zainstalowany prawidłowo.
By połączyć się z bazą danych należy zastosować:
from sqlalchemy import *
# postgres
pg_db = create_engine('postgres://scott:tiger@localhost:5432/mydatabase')
# sqlite
sqlite_db = create_engine('sqlite:////absolute/path/to/database.txt')
sqlite_db = create_engine('sqlite:///relative/path/to/database.txt')
sqlite_db = create_engine('sqlite://')
# mysql
mysql_db = create_engine('mysql://localhost/foo')
mysql_db = create_engine('mysql+mysqldb://scott:tiger@localhost/foo')
#oracle
# oracle - cx_oracle
oracle_db = create_engine('oracle://scott:tiger@127.0.0.1:1521/sidname')
# oracle via TNS name
oracle_db = create_engine('oracle+cx_oracle://scott:tiger@tnsname')
By rozpocząć pracę z tabelami trzeba je przypisać do obiektu MetaData. Dopiero wtedy można na nich operować. Oto przykład przypisujący bazę do MetaData oraz tworzący tabelę:
from sqlalchemy import *
#driver://login:haslo@host:port/nazwa_bazy
>>> engine=create_engine('oracle://django:password@xe')
>>> conn=engine.connect()
>>> result=conn.execute('select id, domain, name from django_site')
>>> for row in result:
... print 'id: %s Domena: %s Nazwa: %s' % ( row['id'],row['domain'],row['name
'])
...
id: 1 Domena: example.com Nazwa: example.com
# definicja tabeli 'user_sql'
>>> user_db=Table(
... 'user_sql',metadata,
... Column('id',Integer, primary_key=True),
... Column('user_name', Unicode(16),unique=True, nullable=False),
... Column('email', Unicode(255), unique=True, nullable=False),
... Column('password', Unicode(40), nullable=False),
... Column('first_name', Unicode(255), default=''),
... Column('last_name', Unicode(255), default=''))
# utworzenie tabeli 'user_sql'
user_db.create(engine)
Stworzyliśmy tabelę ‘user_sql’ – składnia SQL:
(SQL wygenerowano za pomocą programu TOAD For Oracle – http://www.quest.com )
ALTER TABLE DJANGO.USER_SQL DROP PRIMARY KEY CASCADE; DROP TABLE DJANGO.USER_SQL CASCADE CONSTRAINTS; CREATE TABLE DJANGO.USER_SQL ( ID INTEGER NOT NULL, USER_NAME NVARCHAR2(16) NOT NULL, EMAIL NVARCHAR2(255) NOT NULL, PASSWORD NVARCHAR2(40) NOT NULL, FIRST_NAME NVARCHAR2(255), LAST_NAME NVARCHAR2(255) ) TABLESPACE USERS PCTUSED 0 PCTFREE 10 INITRANS 1 MAXTRANS 255 STORAGE ( INITIAL 64K NEXT 1M MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 BUFFER_POOL DEFAULT ) LOGGING NOCOMPRESS NOCACHE NOPARALLEL MONITORING; ALTER TABLE DJANGO.USER_SQL ADD ( PRIMARY KEY (ID) USING INDEX TABLESPACE USERS PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE ( INITIAL 64K NEXT 1M MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 ), UNIQUE (USER_NAME) USING INDEX TABLESPACE USERS PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE ( INITIAL 64K NEXT 1M MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 ), UNIQUE (EMAIL) USING INDEX TABLESPACE USERS PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE ( INITIAL 64K NEXT 1M MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 ));
users_db to obiekt odnoszący się do naszej tabeli. Jeżeli tabela już istnieje to odwołać możemy się do niej w następujący sposób:
users_db = Table('users_sql', metadata, autoload=True)
By dodać dane do bazy danych możemy skorzystać z dwóch sposobów:
from sqlalchemy import *
#driver://login:haslo@host:port/nazwa_bazy
db = create_engine('oracle://django:password@xe')
# przypisanie tabel do MetaData
metadata = MetaData(engine)
metadata.echo = True
users_db = Table('users_sql', metadata, autoload=True)
# dodawanie wierszy
>>> metadata.echo=True
>>> i=user_db.insert()
>>> print i
# Polecenie SQL
INSERT INTO user_sql (id, user_name, email, password, first_name, last_name) VAL
UES (:id, :user_name, :email, :password, :first_name, :last_name)
>>> metadata.bind=engine
# sposób 1
>>> engine.execute(i,id=3,user_name='edyta123', email='ed@wp.pl', password='foo123')
<sqlalchemy.engine.base.ResultProxy object at 0x02CCBBB0>
>>>
# sposób 2
>>>engine.execute(i,{'id': 5, 'user_name': 'zdzichu', 'email': 'sw@wp.pl', 'password': '42zdzich'},
{'id': 6, 'user_name': 'lepper123', 'email': 'lepp@qo.pl', 'password': '0700LEP'},
{'id': 7, 'user_name': 'Carla', 'email': 'clara@wp.pl', 'password': 'foobar'})
<sqlalchemy.engine.base.ResultProxy object at 0x02D1A550>
Pierwszy sposób – dodaje jeden wiersz bazując na danych przypisany do zmiennych będących nazwami pól tabeli. Drugi zawiera listę słowników i służy do dodawania wielu wpisów. Dodatkowo SQLAlchemy ‘slaszuje’ wszystkie znaczące znaki w dodawanych danych. Tak więc praktycznie eliminuje to ataki SQL injection.
Wygląda równie sprawnie:
>>> user_db=Table('user_sql', metadata, autoload=True)
>>> s=user_db.select()
>>> rs=s.execute()
>>> row=rs.fetchone()
>>> print 'id: ', row[0]
id: 5
>>> print 'user name: ', row['user_name']
user name: zdzichu
>>> print 'password: ', row['password']
password: 42zdzich
Co pobierze jeden wiersz (fetchone()). By pobrać wszystkie należy skorzystać z fetchall()
>>> rs = s.execute() >>> a = rs.fetchall() >>> for row in a: ... print row.user_name + ' - ' + row.password; ... zdzichu - 42zdzich lepper123 - 0700LEP Carla - foobar edyta - foo123 edyta123 - foo123 edyta1234 - for234
Ograniczanie pobieranych danych można wykonać na wiele sposobów, oto przegląd:
from sqlalchemy import *
#driver://login:haslo@host:port/nazwa_bazy
>>>db = create_engine('oracle://Django:password@xe')
# przypisanie tabel do MetaData
>>>metadata = MetaData(db)
>>>metadata.echo = True
>>>users_db = Table('users_sql', metadata, autoload=True)
>>> def run(stmt):
... rs=stmt.execute()
... for row in rs:
... print row
...
>>>
>>> s=user_db.select(user_db.c.user_name=='Edyta')
>>> run(s)
>>> s=user_db.select(user_db.c.user_name=='edyta')
>>> run(s)
(2, u'edyta', u'aw@wp.pl', u'foo123', None, None)
>>> s=user_db.select(user_db.c.user_name=='Edyta')
>>> print s
#Zapytanie SQL wysłane do Bazy Danych Oracle
SELECT user_sql.id, user_sql.user_name, user_sql.email, user_sql.password, user_sql.first_name, user_sql.last_name
FROM user_sql
WHERE user_sql.user_name = :user_name_1
>>>
# Zapytanie z prostym warunkiem jednego pola
>>> s=user_db.select(user_db.c.user_name!='Edyta')
>>> run(s)
(5, u'zdzichu', u'sw@wp.pl', u'42zdzich', None, None)
(6, u'lepper123', u'lepp@qo.pl', u'0700LEP', None, None)
(7, u'Carla', u'clara@wp.pl', u'foobar', None, None)
(2, u'edyta', u'aw@wp.pl', u'foo123', None, None)
(3, u'edyta123', u'ed@wp.pl', u'foo123', None, None)
(4, u'edyta1234', u'test', u'for234', None, None)
>>>
>>>s = users_db.select(users_db.c.id < 40)
>>>run(s)
(2, u'edyta', u'aw@wp.pl', u'foo123', None, None)
(3, u'edyta123', u'ed@wp.pl', u'foo123', None, None)
(4, u'edyta1234', u'test', u'for234', None, None)
(5, u'zdzichu', u'sw@wp.pl', u'42zdzich', None, None)
(6, u'lepper123', u'lepp@qo.pl', u'0700LEP', None, None)
(7, u'Carla', u'clara@wp.pl', u'foobar', None, None)
# dostępne są też funkcje and_, or_ i not_
>>>s = users_db.select(and_(users_db.c.id < 40, users_db.c.user_name != 'Mary'))
>>>run(s)
(5, u'zdzichu', u'sw@wp.pl', u'42zdzich', None, None)
(6, u'lepper123', u'lepp@qo.pl', u'0700LEP', None, None)
(7, u'Carla', u'clara@wp.pl', u'foobar', None, None)
(2, u'edyta', u'aw@wp.pl', u'foo123', None, None)
(3, u'edyta123', u'ed@wp.pl', u'foo123', None, None)
(4, u'edyta1234', u'test', u'for234', None, None)
>>>
# Są też inne funkcje jak "like", "startswith", "endswith"
>>> s = user_db.select(user_db.c.user_name.startswith('e'))
>>> run(s)
(2, u'edyta', u'aw@wp.pl', u'foo123', None, None)
(3, u'edyta123', u'ed@wp.pl', u'foo123', None, None)
(4, u'edyta1234', u'test', u'for234', None, None)
>>>
>>>s = user_db.select(user_db.c.user_name.like('%a%'))
>>>run(s)
(2, u'edyta', u'aw@wp.pl', u'foo123', None, None)
(3, u'edyta123', u'ed@wp.pl', u'foo123', None, None)
(4, u'edyta1234', u'test', u'for234', None, None)
(6, u'lepper123', u'lepp@qo.pl', u'0700LEP', None, None)
>>>
>>>s = user_db.select(user_db.c.user_name.endswith('4'))
>>>run(s)
(4, u'edyta1234', u'test', u'for234', None, None)
>>>
# "func" służy do wywoływania funkcji SQL
>>>s = user_db.select(func.substr(user_db.c.user_name, 2, 1) == 'a')
>>>run(s)
(7, u'Carla', u'clara@wp.pl', u'foobar', None, None)
# pobieranie danych z określonych pól
>>>s = select([user_db.c.id, user_db.c.user_name], user_db.c.user_name != 'Carl')
>>>run(s)
(7, u'Carla')
(2, u'edyta')
(3, u'edyta123')
(4, u'edyta1234')
(6, u'lepper123')
(5, u'zdzichu')
# SQLowy count()
>>>s = select([func.count(user_db.c.id)])
>>>run(s)
(6,)
# count(*) czyli liczymy wszystko
s = select([func.count("*")], from_obj=[user_db])
run(s)
(6,)
Przykład wykonywania zapytań z łączonymi tabelami.
from sqlalchemy import *
#driver://login:haslo@host:port/nazwa_bazy</pre>
>>>engine = create_engine('oracle://django:password@xe')
>>>engine.echo = True
>>>metadata = MetaData(engine)
>>>emails2 = Table('emails2', metadata,
... Column('email_id', Integer, primary_key=True),
... Column('address', Unicode(20)),
... Column('user_id', Integer, ForeignKey('user_sql.id')),
)
>>>emails2.create(engine)
>>>i = emails.insert()
>>>metadata.bind=engine
>>> engine.execute(i,
... {'email_id':1, 'address': 'mary@example.com', 'user_id': 1},
... {'email_id':2, 'address': 'john@nowhere.net', 'user_id': 2},
... {'email_id':3, 'address': 'john@example.org', 'user_id': 2},
... {'email_id':4, 'address': 'carl@nospam.net', 'user_id': 4},
... )
<sqlalchemy.engine.base.ResultProxy object at 0x02D25FB0>
>>>
>>>def run(stmt):
... rs = stmt.execute()
... for row in rs:
... print row
# pełen join, brak where, zwraca "dużo" wyników
>>>s = select([user_db, emails2])
>>>run(s)
(1, u'zdzichu', u'sw@wp.pl', u'42zdzich', None, None, 1, u'mary@example.com', 1)
(1, u'zdzichu', u'sw@wp.pl', u'42zdzich', None, None, 2, u'john@nowhere.net', 2)
(1, u'zdzichu', u'sw@wp.pl', u'42zdzich', None, None, 3, u'john@example.org', 2)
(1, u'zdzichu', u'sw@wp.pl', u'42zdzich', None, None, 4, u'carl@nospam.net', 4)
(5, u'lepper123', u'lepp@qo.pl', u'0700LEP', None, None, 1, u'mary@example.com',1)
(5, u'lepper123', u'lepp@qo.pl', u'0700LEP', None, None, 2, u'john@nowhere.net',2)
(5, u'lepper123', u'lepp@qo.pl', u'0700LEP', None, None, 3, u'john@example.org',2)
(5, u'lepper123', u'lepp@qo.pl', u'0700LEP', None, None, 4, u'carl@nospam.net',4)
(6, u'Carla', u'clara@wp.pl', u'foobar', None, None, 1, u'mary@example.com', 1)
(6, u'Carla', u'clara@wp.pl', u'foobar', None, None, 2, u'john@nowhere.net', 2)
(6, u'Carla', u'clara@wp.pl', u'foobar', None, None, 3, u'john@example.org', 2)
(6, u'Carla', u'clara@wp.pl', u'foobar', None, None, 4, u'carl@nospam.net', 4)
(2, u'edyta', u'aw@wp.pl', u'foo123', None, None, 1, u'mary@example.com', 1)
(2, u'edyta', u'aw@wp.pl', u'foo123', None, None, 2, u'john@nowhere.net', 2)
(2, u'edyta', u'aw@wp.pl', u'foo123', None, None, 3, u'john@example.org', 2)
(2, u'edyta', u'aw@wp.pl', u'foo123', None, None, 4, u'carl@nospam.net', 4)
(3, u'edyta123', u'ed@wp.pl', u'foo123', None, None, 1, u'mary@example.com', 1)
(3, u'edyta123', u'ed@wp.pl', u'foo123', None, None, 2, u'john@nowhere.net', 2)
(3, u'edyta123', u'ed@wp.pl', u'foo123', None, None, 3, u'john@example.org', 2)
(3, u'edyta123', u'ed@wp.pl', u'foo123', None, None, 4, u'carl@nospam.net', 4)
(4, u'edyta1234', u'test', u'for234', None, None, 1, u'mary@example.com', 1)
(4, u'edyta1234', u'test', u'for234', None, None, 2, u'john@nowhere.net', 2)
(4, u'edyta1234', u'test', u'for234', None, None, 3, u'john@example.org', 2)
(4, u'edyta1234', u'test', u'for234', None, None, 4, u'carl@nospam.net', 4)
>>>
# join z określonym warunkiem łączenia
>>>s = select([user_db, emails2], emails2.c.user_id == user_db.c.id)
>>>run(s)
(1, u'zdzichu', u'sw@wp.pl', u'42zdzich', None, None, 1, u'mary@example.com', 1)
(2, u'edyta', u'aw@wp.pl', u'foo123', None, None, 2, u'john@nowhere.net', 2)
(2, u'edyta', u'aw@wp.pl', u'foo123', None, None, 3, u'john@example.org', 2)
(4, u'edyta1234', u'test', u'for234', None, None, 4, u'carl@nospam.net', 4)
>>>
# obiekt join jest inteligentny
# i określi pole łączenia po ForeignKey
s = join(user_db, emails2).select()
run(s)
(1, u'zdzichu', u'sw@wp.pl', u'42zdzich', None, None, 1, u'mary@example.c,1)
(2, u'edyta', u'aw@wp.pl', u'foo123', None, None, 2, u'john@nowhere.net',2)
(2, u'edyta', u'aw@wp.pl', u'foo123', None, None, 3, u'john@example.org',3)
(4, u'edyta1234', u'test', u'for234', None, None, 4, u'carl@nospam.net',4)
>>>
# wszyscy userzy, nawet jak nie mają emaila
# potrzebny "outer" join.
s = outerjoin(user_db, emails2).select()
run(s)
(1, u'zdzichu', u'sw@wp.pl', u'42zdzich', None, None, 1, u'mary@example.com', 1)
(2, u'edyta', u'aw@wp.pl', u'foo123', None, None, 2, u'john@nowhere.net', 2)
(2, u'edyta', u'aw@wp.pl', u'foo123', None, None, 3, u'john@example.org', 2)
(3, u'edyta123', u'ed@wp.pl', u'foo123', None, None, None, None, None)
(4, u'edyta1234', u'test', u'for234', None, None, 4, u'carl@nospam.net', 4)
(5, u'lepper123', u'lepp@qo.pl', u'0700LEP', None, None, None, None, None)
(6, u'Carla', u'clara@wp.pl', u'foobar', None, None, None, None, None)
>>>
# outer joiny są domyślnie "left outer join" czyli tabela po lewej + odpowiadające wartości z prawej tabeli.
# tutaj nie będzie rekordu z "Susane"
s = outerjoin(emails2, user_db).select()
run(s)
(1, u'mary@example.com', 1, 1, u'zdzichu', u'sw@wp.pl', u'42zdzich', None, None)
(2, u'john@nowhere.net', 2, 2, u'edyta', u'aw@wp.pl', u'foo123', None, None)
(3, u'john@example.org', 2, 2, u'edyta', u'aw@wp.pl', u'foo123', None, None)
(4, u'carl@nospam.net', 4, 4, u'edyta1234', u'test', u'for234', None, None)
>>>
>>> from sqlalchemy import *
>>> db=create_engine('oracle://django:password@xe')
>>> metadata=MetaData(db)
>>> metadata.echo=True
>>> def run(stmt):
... rs = stmt.execute()
... for row in rs:
... print row
...
>>> user_db=Table('user_sql',metadata,autoload=True)
#proste sortowanie
>>> s=user_db.select(order_by=[user_db.c.user_name])
>>> run(s)
(6, u'Carla', u'clara@wp.pl', u'foobar', None, None)
(2, u'edyta', u'aw@wp.pl', u'foo123', None, None)
(3, u'edyta123', u'ed@wp.pl', u'foo123', None, None)
(4, u'edyta1234', u'test', u'for234', None, None)
(5, u'lepper123', u'lepp@qo.pl', u'0700LEP', None, None)
(1, u'zdzichu', u'sw@wp.pl', u'42zdzich', None, None)
>>>
# rosnące, malejące sortowanie na wielu kolumnach
>>>s= user_db.select(user_db.c.user_name>'J', order_by=[desc(user_db.c.id), asc(user_db.c.user_name)])
>>>run(s)
(5, u'lepper123', u'lepp@qo.pl', u'0700LEP', None, None)
(4, u'edyta1234', u'test', u'for234', None, None)
(3, u'edyta123', u'ed@wp.pl', u'foo123', None, None)
(2, u'edyta', u'aw@wp.pl', u'foo123', None, None)
(1, u'zdzichu', u'sw@wp.pl', u'42zdzich', None, None)
>>>
# wybieranie niepowtarzalnych wierszy
>>>s = select([user_db.c.user_name], distinct=True)
>>>run(s)
(u'Carla',)
(u'edyta',)
(u'edyta123',)
(u'edyta1234',)
(u'lepper123',)
(u'zdzichu',)
>>>
# limit i offset
>>>s = user_db.select(offset=2, limit=2)
>>>run(s)
(6, u'Carla', u'clara@wp.pl', u'foobar', None, None)
(2, u'edyta', u'aw@wp.pl', u'foo123', None, None)
# zmiana 'zdzichu' na 'krzychu'
>>> user_db.update(user_db.c.user_name=='zdzichu').execute(user_name='krzychu')
<sqlalchemy.engine.base.ResultProxy object at 0x02ACD650>
# przypisane wartości
>>>u = user_db.update(user_db.c.user_name==bindparam('name'),
values={'user_name':bindparam('newname')})
>>> u.execute(name='edyta', newname='ed')
<sqlalchemy.engine.base.ResultProxy object at 0x02B2C210>
# update jednej kolumny do drugiej
>>>user_db.update(values={user_db.c.password:user_db.c.user_name}).execute()
>>>user_db.delete(user_db.c.id==6).execute() <sqlalchemy.engine.base.ResultProxy object at 0x02ACD9D0> >>>
Timer napisany w pythonie z wykorzystaniem modułu Tkinter. Pełny opis modułu można znaleźć tutaj
http://www.pythonware.com/library/tkinter/introduction/
The Tkinter module („Tk interface”) is the standard Python interface to the Tk GUI toolkit from Scriptics (formerly developed by Sun Labs).Both Tk and Tkinter are available on most Unix platforms, as well as on Windows and Macintosh systems. Starting with the 8.0 release, Tk offers native look and feel on all platforms.Tkinter consists of a number of modules. The Tk interface is located in a binary module named _tkinter (this was tkinter in earlier versions). This module contains the low-level interface to Tk, and should never be used directly by application programmers. It is usually a shared library (or DLL), but might in some cases be statically linked with the Python interpreter.In addition to the Tk interface module, Tkinter includes a number of Python modules. The two most important modules are the Tkinter module itself, and a module called Tkconstants. The former automatically imports the latter, so to use Tkinter, all you need to do is to import one module:….
<pre>from Tkinter import *
#from Tkinter import tkMessageBox
import time
import sys
class StopWatch(Frame):
""" Implements a stop watch frame widget. """
def __init__(self, parent=None, **kw):
Frame.__init__(self, parent, kw)
self._start = 0.0
self._elapsedtime = 0.0
self._running = 0
self.timestr = StringVar()
self.makeWidgets()
def makeWidgets(self):
""" Make the time label. """
l = Label(self, textvariable=self.timestr)
self._setTime(self._elapsedtime)
l.pack(fill=X, expand=NO, pady=2, padx=2)
def _update(self):
""" Update the label with elapsed time. """
self._elapsedtime = time.time() - self._start
self._setTime(self._elapsedtime)
self._timer = self.after(50, self._update)
def _setTime(self, elap):
""" Set the time string to Minutes:Seconds:Hundreths """
minutes = int(elap/60)
seconds = int(elap - minutes*60.0)
hseconds = int((elap - minutes*60.0 - seconds)*100)
self.timestr.set('%02d:%02d:%02d' % (minutes, seconds, hseconds))
def Start(self):
""" Start the stopwatch, ignore if running. """
if not self._running:
self._start = time.time() - self._elapsedtime
self._update()
self._running = 1
def Stop(self):
""" Stop the stopwatch, ignore if stopped. """
if self._running:
self.after_cancel(self._timer)
self._elapsedtime = time.time() - self._start
self._setTime(self._elapsedtime)
self._running = 0
def Reset(self):
""" Reset the stopwatch. """
self._start = time.time()
self._elapsedtime = 0.0
self._setTime(self._elapsedtime)
def callback():
print('Test menu')
def main():
root = Tk()
root.title('PythonTimer')
# create a menu
menu = Menu(root)
root.config(menu=menu)
filemenu = Menu(menu)
menu.add_cascade(label="File", menu=filemenu)
filemenu.add_command(label="New", command=callback)
#filemenu.add_command(label="Open...", command=callback)
#filemenu.add_separator()
filemenu.add_command(label="Exit", command=root.quit)
helpmenu = Menu(menu)
menu.add_cascade(label="Help", menu=helpmenu)
helpmenu.add_command(label="About...", command=callback)
sw = StopWatch(root)
sw.pack(side=TOP)
Button(root, text='Start', command=sw.Start).pack(side=LEFT)
Button(root, text='Stop', command=sw.Stop).pack(side=LEFT)
Button(root, text='Reset', command=sw.Reset).pack(side=LEFT)
Button(root, text='Quit', command=root.quit).pack(side=LEFT)
root.mainloop()
if __name__ == '__main__':
main()
Problemem z klasycznego repertuaru podstawowych zadań w jakimś języku programowania jest np. szukanie liczb doskonałych w danym przedziale (od 1 do jakiejś liczby naturalnej). Kiedyś też to musiałem pisać na wprowadzeniu do programowania (to, co napisałem (metoda klasyczna) wlokło się jak mucha w smole). Nawet mnie się kiedyś o ten algorytm koleżanka pytała. Dzisiaj, na poczekaniu, z nudów wymyśliłem szybki algorytm realizujący to zadanie. Postanowiłem się nim podzielić.
Simple script to backup some databases from PostgreSQL on unixlinux.
#!/usr/bin/env python
import os
import time
username = 'root'
defaultdb = 'postgres'
port = '5433'
backupdir='/www/backup/'
date = time.strftime('%Y-%m-%d')
#GET DB NAMES
get_db_names="psql -U%s -d%s -p%s --tuples-only -c 'l' | awk -F| '{ print $1 }' | grep -E -v '(template0|template1|^$)'" % (username, defaultdb, port)
#MAKE BACKUP OF SYSTEMGRANTS
os.popen("pg_dumpall -p%s -g|gzip -9 -c > %s/system.%s.gz" % (port, backupdir, date))
#MAKING DB BACKUP
for base in os.popen(get_db_names).readlines():
base = base.strip()
fulldir = backupdir + base
if not os.path.exists(fulldir):
os.mkdir(fulldir)
filename = "%s/%s-%s.sql" % (fulldir, base, date)
os.popen("nice -n 19 pg_dump -C -F c -U%s -p%s %s > %s" % (username, port, base, filename))
import csv
from django.http import HttpResponse, HttpResponseForbidden
from django.template.defaultfilters import slugify
from django.db.models.loading import get_model
def export(qs, fields=None):
model = qs.model
response = HttpResponse(mimetype='text/csv')
response['Content-Disposition'] = 'attachment; filename=%s.csv' % slugify(model.__name__)
writer = csv.writer(response)
# Write headers to CSV file
if fields:
headers = fields
else:
headers = []
for field in model._meta.fields:
headers.append(field.name)
writer.writerow(headers)
# Write data to CSV file
for obj in qs:
row = []
for field in headers:
if field in headers:
val = getattr(obj, field)
if callable(val):
val = val()
row.append(val)
writer.writerow(row)
# Return CSV file to browser as download
return response
def admin_list_export(request, model_name, app_label, queryset=None, fields=None, list_display=True):
"""
Put the following line in your urls.py BEFORE your admin include
(r'^admin/(?P<app_label>[dw]+)/(?P<model_name>[dw]+)/csv/', 'util.csv_view.admin_list_export'),
"""
if not request.user.is_staff:
return HttpResponseForbidden()
if not queryset:
model = get_model(app_label, model_name)
queryset = model.objects.all()
filters = dict()
for key, value in request.GET.items():
if key not in ('ot', 'o'):
filters[str(key)] = str(value)
if len(filters):
queryset = queryset.filter(**filters)
if not fields:
if list_display and len(queryset.model._meta.admin.list_display) > 1:
fields = queryset.model._meta.admin.list_display
else:
fields = None
return export(queryset, fields)
"""
Create your own change_list.html for your admin view and put something like this in it:
{% block object-tools %}
<ul>
<li><a href="csv/{%if request.GET%}?{{request.GET.urlencode}}{%endif%}">Export to CSV</a></li>
{% if has_add_permission %}
<li><a href="add/{% if is_popup %}?_popup=1{% endif %}">{% blocktrans with cl.opts.verbose_name|escape as name %}Add {{ name }}{% endblocktrans %}</a></li>
{% endif %}
</ul>
{% endblock %}
"""
[code]]czoxOlwiClwiO3tbJiomXX0=[[/code]
1.0 Introduction
When a machine has only port 80 opened, your most trusted vulnerability scanner cannot return anything useful, and you know that the admin always patch his server, we have to turn to web hacking. SQL injection is one of type of web hacking that require nothing but port 80 and it might just work even if the admin is patch-happy. It attacks on the web application (like ASP, JSP, PHP, CGI, etc) itself rather than on the web server or services running in the OS.