Starting Python... some questions

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Tue Mar 13 08:05:04 CET 2007


En Tue, 13 Mar 2007 03:13:37 -0300, jezzzz . <jezonthenet at yahoo.com>  
escribió:

> I added the self parameter to the the chassis_id function, however I now  
> have a problem and question regarding encoding MAC addresses for a  
> struct. What string format am I supposed to use?

py> data = [int(x,16) for x in "2A:3B:01:9C:04:F0".split(":")]
py> print data
[42, 59, 1, 156, 4, 240]
py> struct.pack("6B", *data)
'*;\x01\x9c\x04\xf0'

That is: take the string "2A:3B:01:9C:04:F0", split it in parts at each  
":", iterate over them converting from hex to integer; the resulting list  
is called data.
Then, pack the numbers using "6B" format.

> Also, I think I will get rid of Scapy in my small program. Any  
> references I can use to easily send (no need to receive) a packet with a  
> Layer 1 and 2 only? (i.e. only Ethernet and LLDP - no need for IP, UDP,  
> TCP etc. I wish to create something like Ethernet | LLDP msg1 | LLDP  
> msg2 | ... | LLDP msgn)

I don't think you can do that with Python alone - that is, without using  
some other specific tool like scapy.

> class lldp_class:

Usually classes have UppercaseWords, and omit the word "class".
But since LLDP would be all uppercase, maybe another name would be better.
You appear to be storing just a few attributes, not implementing that  
protocol, so maybe LLDPInfo might be used.

>     def chassis_id(self, subtype, chassis_info):
>
>         if subtype == 4:
>
>             chassis_data = struct.pack("!B",chassis_info)
>
>         subtype_data = struct.pack("!B",subtype)
>
>         self.chassis_id_tlv = subtype_data + chassis_data

What should happen when subtipe is not 4? (Currently you get an error).

-- 
Gabriel Genellina




More information about the Python-list mailing list