Hi,

Please disregard the previous attachment - what started out as a bugreport
became a patch, and I forgot to remove the pcap dump of the offending
packets.

Thanks,
-b

On Sun, Jan 24, 2010 at 4:15 AM, Brandon Heller <[email protected]>wrote:

> Hi,
>
> Parsing the first packet in an iperf TCP session produced the following:
>
>   File "./nox/lib/packet/packet_base.py", line 114, in tostring
>     return ''.join((buf, self.next.tostring()))
>   File "./nox/lib/packet/packet_base.py", line 114, in tostring
>     return ''.join((buf, self.next.tostring()))
>   File "./nox/lib/packet/packet_base.py", line 109, in tostring
>     buf = self.hdr()
>   File "./nox/lib/packet/tcp.py", line 215, in hdr
>     packet += option.to_bytes()
>   File "./nox/lib/packet/tcp.py", line 70, in to_bytes
>     return struct.pack('!BBH',self.type,4,self.val)
>   File "/usr/lib/python2.5/struct.py", line 63, in pack
>     return o.pack(*args)
> TypeError: unsupported operand type(s) for &: 'tuple' and 'long'
>
> This first packet had an MSS TCP option set.
>
> The error is caused when the packet is parsed: the single value in the
> tuple returned by struct.unpack() on the MSS value was not extracted, and
> caused an unsupported operand exception when to_bytes was later called to
> write the packet out.
>
> The fix is to append [0] to extract the first tuple value.  I didn't see
> any other options for which a single value was unpacked.
>
> Patch:
>
> diff --git a/src/nox/lib/packet/tcp.py b/src/nox/lib/packet/tcp.py
> index 9842673..af1546e 100644
> --- a/src/nox/lib/packet/tcp.py
> +++ b/src/nox/lib/packet/tcp.py
> @@ -150,7 +150,7 @@ class tcp(packet_base):
>              elif arr[i] == tcp_opt.MSS:
>                  if arr[i+1] != 4:
>                      raise Exception()
> -                val = struct.unpack('!H',arr[i+2:i+4])
> +                val = struct.unpack('!H',arr[i+2:i+4])[0]
>                  self.options.append(tcp_opt(tcp_opt.MSS,val))
>              elif arr[i] == tcp_opt.WSOPT:
>                  if arr[i+1] != 3:
>
>
> Please add this to NOX.
>
> Thanks,
> -b
>
_______________________________________________
nox-dev mailing list
[email protected]
http://noxrepo.org/mailman/listinfo/nox-dev_noxrepo.org

Reply via email to