getsockopt

Fabian Deutsch fabian.deutsch at gmx.de
Fri Dec 16 05:01:43 EST 2005


Stave Holde wrote:
> Fabian Deutsch wrote:
> >>--- Ursprüngliche Nachricht ---
> >>Von: Steve Holden <steve at holdenweb.com>
> >>An: python-list at python.org
> >>Betreff: Re: getsockopt
> >>Datum: Fri, 16 Dec 2005 08:29:08 +0000
> >>
> >>Fabian Deutsch wrote:
> >>
> >>>Hello,
> >>>
> >>>my name is fabian and i'm a student from northern germany. right now i
> >>>try to create som kind of decapsulation of esp-udp packets using
> python.
> >>>
> >>>therefor i need to use the socket.getsockopt (SOL_IP, IP_OPTIONS, 20)
> >>>method. But al i get is some empty value. Nothin.
> >>>
> >>>Does someone know or have an working exmaple of how to use this
> method??
> >>>
> >>>The lines:
> >>>s = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP)
> >>>s.bind(('',4500))
> >>>while 1:    # Run until cancelled
> >>>	message, client = s.recvfrom(1400) # <=256 byte datagram
> >>>        hdr = s.getsockopt (SOL_IP, IP_OPTIONS, 20)
> >>>        print "Client connected:", client
> >>>        print "HDR:" + binascii.hexlify(hdr)
> >>>
> >>
> >>Perhaps you're getting an empty string back because no IP options are 
> >>set in the received packets' headers?
> >>
> > 
> > Hey,
> > you are right - i just re-read the ip (7) man - i only get the ip
> options ..
> > 
> > but do you know a way of getting the whole header?
> > 
> > 'cause what i'm trying to do is, to "remove" the udp-header of the
> packet i
> > recieved and sendind a new packet without the udp-header.
> > I want to do this by taking it's payload (incl. esp-hdr) and ip-header
> and
> > resending it to my system creating a new packet with the old ip-header
> and
> > payload (incl. esp-hdr) i got from the recvd packet.
> > 
> > Before:
> > +--------+---------+----------+----------- - - 
> > | IP HDR | UDP HDR |  ESP HDR | PAYLOAD ...
> > +--------+---------+----------+----------- - - 
> > After :
> > +--------+---------+----------- - - 
> > | IP HDR | ESP HDR | PAYLOAD ...
> > +--------+---------+----------- - - 
> > 
> I'm not sure where ESP is going to come into this, or how the traffic 
> you will be receiving will be generated. I suspect you may need to 
> reconsider your application design a little.
> 
> The only way to get hold of the IP headers is to use SOCK_RAW, which 
> delivers everything that comes in from the packet driver.
> 
> What is it you're actually trying to do? If you perform the 
> transformation you outline in the diagrams above then the IP header will 
> certainly contain the wrong protocol value for a start.
> 
Well actually I managed to recieve the encapsulated esp packages,
decapsulate them and send them to my system using 

   sr = socket(AF_INET, SOCK_RAW, IPPROTO_ESP)
   ...
   sr.sendto(message (MY_IP,0))

it does work and my system correctly deciphers the packages (i get an icmo
oing request and my system answers with icmp reply) but the problem is, that
the src_adr of the esp_package is set to my local adr and not the adr of the
original esp-udp_packet sender ... so i try to  use
  sr.send 
to send the message, but then i will have to create the whole header ... but
i dont't want to create it but copy it from the recived packet to the new
one ..

i hope you understand what i am trying to say ..

fabian

-- 
Fabian Deutsch <fabian.deutsch at gmx.de>



More information about the Python-list mailing list