יום שלישי, 31 במאי 2011

סיפור

תמונה ראשונה:
ראש הממשלה ואשתו מתארגנים לשינה
בקטע הזה אני רוצה לבסס:
- מחר יש דיון עם ראש המוסד, השבכ, רמטכ"ל אולי עוד - סיעור מוחות לשחרור החייל החטוף
- לראש הממשלה ממש לא בא על הדיון
- ראש הממשלה חושב שאין הבדל עקרוני בין חייל חטוף לחייל שנהרג בקרב ולכן לא מתכוון באמת לשלם שום מחיר
- אשתו של ראש הממשלה משפיעה עליו מאוד - הוא קצת מפחד ממנה במיוחד שהיא במצב כזה של טרום היסטריה
- אחד מבניו של ראש הממשלה השתחרר מהשירות הצבאי לפני כמה חודשים

יום ראשון, 17 בינואר 2010

יום ראשון, 27 בדצמבר 2009

capture vlan tagged frames

Capturing VLAN frames can be frustrated.

To make a long story short, the vlan-tag is stripped off  before the capturing so when looking at the capture all you see is the untagged frame.

This has a relatively easy solution. Linux Bridge. Any linux box can be a bridge and a bridge and better yet a bridge link must pass the packets as is.

Enough talking and onto an example:

we have 2 linux boxex connect via a vlan-enable network.

lets set up a vlan-tagged connection:

box1 # vconfig add eth1 2222
Added VLAN with VID == 2222 to IF -:eth1:-

# ifconfig eth1.2222 123.123.123.50 up





box2 # vconfig add eth1 2222
Added VLAN with VID == 2222 to IF -:eth1:-

# ifconfig eth1.2222 123.123.123.60 up

ping is working but capturing doesn't show the vlan frmae.

box2 is our target host for capturing:
box2:
 # vconfig rem eth1.2222
Removed VLAN -:eth1.2222:-
# ifconfig eth1 0.0.0.0 up
# brctl addbr br50
# brctl addif br50 eth1
# ifconfig br50 up
# vconfig add br50 2222
# ifconfig br50.2222 123.123.123.60 up

and we're done
capture on eth1
# tcpdump -ni eth1 -w /tmp/foo.pcap

and here is a sample frame:
17:59:04.850285 00:1a:64:f1:75:97 > 00:50:56:91:78:13, ethertype 802.1Q (0x8100), length 102: vlan 2222, p 0, ethertype IPv4, 123.123.123.50 > 123.123.123.60: ICMP echo request, id 9757, seq 3, length 64
and just for the fun of it here is one with the priority bit set to 4:
17:59:04.850450 00:50:56:91:78:13 > 00:1a:64:f1:75:97, ethertype 802.1Q (0x8100), length 102: vlan 2222, p 4, ethertype IPv4, 123.123.123.60 > 123.123.123.50: ICMP echo reply, id 9757, seq 3, length 64

don't you just love linux?


יום ראשון, 15 בנובמבר 2009

Overloading python getattr

Recently I've been trying to figure out how to elegantly polymorph using Python.
I'm writing a little library and I want to hide inside info from the caller - i.e. keep clean API.


Consider a library that drives database servers and suppose to support many kinds of such servers.
The user can ask his program to do some stuff with Oracle and some stuff with MySql


Naturally, the commit or connect methods of Oracle is different then those of MySql. However, the caller(in our case the user program) of such library does not care about it.


Lets look at the caller code:











db_type = get_db_type_from_user
db1 = DB(db_type)
#and a more vague operation
db_type = get_db_type(some_ip_we_got_from_user)
db2 = DB(db_type)
db1.connect()
db2.connect()





Nice and clean right?


But how can this be implemented in the DB library code?
Well, the title is not lying - overloading getattr:










class ORACLE:
    def GetDBType(self):
        return "ORACLE"
class MySql:
    def GetDBType(self):
        return "MySql"
class DB:
    def __init__(self, type):
        if type == "ORACLE":
            self.o = ORACLE()
        if type == "MySql":
            self.o = MySql()
    def __getattr__(self, name):
        return getattr(self.o, name)

All we need is a test program for this:









db1 = DB("Oracle")
db2 = DB("MySql")
print "db1 is a DB of type: ", db1.GetDBType()
print "db2 is a DB of type: ", db2.GetDBType()

Lets run it:










# python polyDB.py
db1 is a DB of type:  ORACLE
db2 is a DB of type:  MySql

Don't you just love python?