[Twisted-Python] New user, help needed with raw UDP packets
Jp Calderone
exarkun at divmod.com
Wed Apr 14 20:37:41 MDT 2004
Richard Taylor wrote:
>-----BEGIN PGP SIGNED MESSAGE-----
>Hash: SHA1
>
>Hi
>
>I am a completely new user of Twisted. I have read the tutorial and much o=
f =
>the manual and I have been searching the archives but I can't work out how=
to =
>get started with my problem.
>
>I am writing a UDP proxy/relay that needs to make detailed changes to the =
>internals of the UDP packets as they pass through. I intend to use 'Impack=
et' =
>to access the packet internals. One of the things that I need is to 'fake' =
>the destination address of packets leaving the proxy so that they look lik=
e =
>they have come from the original sender, Impacket has methods to do this f=
or =
>'raw' udp packets.
>
>I think that I need to use a sub-class of ConnectedDatagramProtocol to sen=
d my =
>packets but the "self.transport.write" method takes only the packet payloa=
d =
>not the headers.
> =
>
You will need to create a new kind of transport for this to work. I'm =
afraid you haven't picked a very easy task for which to start using =
Twisted :)
>I think that I need to use a sub-class of DatagramProtocol to receive my =
>packets but the datagramReceived method only gets the packet payload not t=
he =
>headers. =
> =
>
More likely you'll want either a RawUDPProtocol subclass, or something =
very much like one. You'll also need to create a new transport class =
which works on raw sockets. There isn't really any documentation for =
this, as it is something that needs to be done very infrequently. There =
is one example of creating a new transport type in my sandbox:
=
http://svn.twistedmatrix.com/cvs/trunk/sandbox/exarkun/ipv6.py?root=3DTwist=
ed
It is for TCP/IPv6 only, but should mostly be applicable to your case.
>How can I get at the 'raw' udp packets for receiving and sending?
>
>Sorry if this is obvious.
> =
>
Certainly not. :) If you get it working (documented, tested,etc ;), =
it might be nice if you could contribute it back, since raw socket =
support is something that does get asked for every once in a while. =
It'd be nice to be able to tell someone how to use existing support, =
instead of telling them they have to implement it.
Jp
More information about the Twisted-Python
mailing list