I need to build a tcp frame with raw binary data, but all examples and tutorials I've found talking about bytes always involve conversion from a string, and that's not what I need.
In short, I need to build just an array of bytes:
0xA2 0x01 0x02 0x03 0x04
Please note that I come from C/C++ world.
I've tried this:
frame = b""
frame += bytes( int('0xA2',16) )
frame += bytes( int('0x01',16) )
frame += bytes( int('0x02',16) )
frame += bytes( int('0x03',16) )
frame += bytes( int('0x04',16) )
Then, throw this frame variable to send method of socket, but not working as expected as frame doesn't contain what I want...
I know this is a very basic question about Python, so if you could point me in the right direction...
Here is a solution to getting an array (list) of bytes:
I found that you needed to convert the Int to a byte first, before passing it to the bytes():
Then create a list from the bytes:
So your code should look like:
The question was for an array (list) of bytes. You accepted an answer that doesn't tell how to get a list so I'm not sure if this is actually what you needed.
wasn't mentionned till now...
agf's bytearray solution is workable, but if you find yourself needing to build up more complicated packets using datatypes other than bytes, you can try
struct.pack()
. http://docs.python.org/release/3.1.3/library/struct.htmlUse a
bytearray
:or, using your code but fixing the errors:
I think Scapy is what are you looking for.
http://www.secdev.org/projects/scapy/
you can build and send frames (packets) with it
what about simply constructing your frame from a standard list ?
the
bytes()
constructor can build a byte frame from an iterable containingint
values. an iterable is anything which implements the iterator protocol: an list, an iterator, an iterable object like what is returned byrange()
...