socket sends unexpected extra word in UDP packet

Chris Liechti cliechti at gmx.net
Sat May 25 19:25:52 EDT 2002


Pierre Fortin <pfortin at pfortin.com> wrote in
news:20020525181034.42ffddb0.pfortin at pfortin.com: 
> On 25 May 2002 23:32:42 +0200 Chris Liechti <cliechti at gmx.net> wrote:
>> Pierre Fortin <pfortin at pfortin.com> wrote in 
>> news:20020525170124.3b2d7755.pfortin at pfortin.com:
>> > I created a simple UDP script which does not work with some remote
>> > hosts...  the only difference I can find is that the packet start
>> > looks like this:
>> > 
>> >   MACdst, MACsrc, 0x0000, 0x0800, 0x45...
>> >                   ^^^^^^  This is extra.
>> > 
>> > Some systems seem to ignore the extra 0x0000; but my customer's
>> > server doesn't...  At this point, I don't
>> > know precisely what OS the server is running.
>> > 
>> > I can have a fix tested if someone has a patch...  I'm not
>> > comfortable with the socketmodule.c source; but I'm hunting for the
>> > bug in the meanwhile...
>> 
>> it would help when you could post some small script that shows you
>> problem. not many people will come up with their own test script but
>> if you post one many people could verify your results and code and
>> give you some specific advice (or even guess the unknown OS :-).
> 
> Sorry...  I assumed that the problem was a generic bug...  the script
> sends fine from my Mandrake8.2 system (I'm in NC, USA); but sends the
> extra 0x0000 from a RedHat7.2 system (in India)...  
> 
> Besides, s.sendto() does not give the user access to those parts of
> the packet; just the target host/port and the data payload...  not an
> excuse for not including, just my thinking... :^)

these extra bytes seem to be in the ethernet level. thats a problem of the 
OS and not of python.

do you capture the frames from india localy there or at your place? when 
you capture those frames on you local net from outside, then it could be 
your router that causes the problem (as ethernet level info does not leave 
your local network, only IP level and above)

> The following script sends correctly from my system; I'll have it
> tried in India...
> 
> #!/usr/bin/env python
> import socket
> s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
> s.sendto("Hello World",('1.2.3.4',1234))
> 
> Sends:
> 
> 0000  00 20 78 c9 e1 1a 00 01  02 e8 d8 8d*08 00 45 00
> 0010  00 27 00 00 40 00 40 11  74 b4 c0 a8 01 64 01 02
> 0020  03 04 80 7f 04 d2 00 13  62 96 48 65 6c 6c 6f 20
> 0030  57 6f 72 6c 64                            

grr, copy&paste does not work in the hex view of ethereal on win32 :-(
but i get the same (except the MACs of course)
 
> On the RedHat7.2 system, Python 2.2.1 was not included (1.5.2), so it
> was built from the tarball.  That system gives this on every packet of
> the production script (won't know the results of the above test script
> for a day or two...):
> 
> 0000  00 04 00 01 00 06 00 02  44 16 3a 46 00 00 08 00
> 0010  45 00 ....                           ^^^^^

that should be the type, if its an Ethernet II frame but the 802.3 Ethernet 
has a length field there (at least when i interpret this page:  
http://www.rware.demon.co.uk/ethernet.htm)

looks to me as if there were a problem with the ethernet protocol version
 
> [Aside: if you're wondering about the weird dst MAC address, ethereal
> replaces it with:
>    Linux cooked capture
>         Packet type: Sent by us (4)
>         Link-layer address type: 1
>         Link-layer address length: 6
>]
> 
> HTH,
> Pierre



-- 
Chris <cliechti at gmx.net>




More information about the Python-list mailing list