*NetBIOS code :*
*
*
#!/usr/bin/env python

import struct

from umit.umpa.protocols import _consts
from umit.umpa.protocols import _fields
from umit.umpa.protocols import _protocols
import umit.umpa.utils.net as _net
import umit.umpa.utils.bits as _bits

__all__ = ["NetBIOS",]

class _MessageType(_fields.EnumField):
    '''
    This MessageType says if the NetBIOS Service is going to be a Name
service, Datagram service or a Session Service.

    For more details refer to RFC1002
    '''

    bits=8
    auto=False
    eunumerable={
        "SESSION MESSAGE" : 0x00,
        "SESSION REQUEST" : 0x81,
        "POSITIVE SESSION RESPONSE" : 0x82,
        "NEGATIVE SESSION RESPONSE" : 0x83,
        "RETARGET SESSION RESPONSE" : 0x84,
        "SESSION KEEPALIVE" : 0x85
    }

    def generate_value(self):
        return 0

class _Length(_fields.SpecialIntField):
    '''
    The LENGTH field is the number of bytes following the LENGTH field.
    For more details look into RFC1002
    '''
    bits=24
    auto=False

    def generate_value(self):
        return 0

class NetBIOS(_protocols.Protocol):
    layer = 5
    protocol_id=1027
    name="NetBIOS"

    _ordered_fields=('msgtype','length',)

    def __init__(self,**kwargs):
        fields_list= [ _MessageType("Message Type", 0),
                       _Length("Length",0)]

        super(NetBIOS,self).__init__(fields_list,**kwargs)
        self.get_field('msgtype').set_doc("The Message Type. See RFC 1001
for more")
        self.get_field('length').set_doc("The Length of the NetBIOS
message")

    #Dummy raw
    def _pre_raw(self, raw_value, bit, protocol_container, protocol_bits):
    return raw_value, bit

    def _post_raw(self, raw_value, bit, protoco_container, protocol_bits):
      return raw_value, bit


protocols = [NetBIOS,]

*Test:*
#!/usr/bin/env python
import py.test

from umit.umpa.protocols import NetBIOS

class TestNetBIOS(object):
    def test_get_raw(self):
        py.test.skip('Auto fields have to be implemented first')
        netb=NetBIOS(msgtype=0x82,length=0)
        ip = IP(src='127.0.0.1', dst='127.0.0.1')
        tcp = TCP(srcport=0, dstport=10)
        assert netb._raw(0,0,[netb, tcp, ip],0) == (0x82000000, 32)
------------------------------------------------------------------------------
Simplify data backup and recovery for your virtual environment with vRanger.
Installation's a snap, and flexible recovery options mean your data is safe,
secure and there when you need it. Data protection magic?
Nope - It's vRanger. Get your free trial download today.
http://p.sf.net/sfu/quest-sfdev2dev
_______________________________________________
Umit-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/umit-devel

Reply via email to