Re: Resend TCP segment modified to the sender

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 






hi,

   I am trying to do something similar, if anyone wants i can send the code
snippets. I start a telnet session between two hosts and then capture a
packet in between, and try to send back an RST segment, I do checksum
calculation and all my self. (both ip and tcp)
1. NF_IP_LOCAL_OUT queues the packet to user space
2. user space reads it using ipq_read, modifies packet, then sets a verdict
of NF_ACCEPT
3. This packet is now caught at NF_IP_POST_ROUTING, I call netif_rx for
that skb from here and return NF_STOLEN from hook call back function of
NF_IP_POST_ROUTING.
4. what happens after that is not clear to me, surely the RST i sent doesnt
reach the tcp connection it was intended for and hence the packet is
dropped  somewhere by the kernel. when and where is a problem for me, any
idea how do I fgiure that out.

Also Sven, The problem I talked about yesterday, POST_ROUTING not getting
the packet after LOCAL_OUT queued it to the user space. I overcame that
problem, but only after I started setting the mark to a particular value in
the NF_IP_LOCAL_OUT hooks function itself, before queuing it to the user
space. Earlier I was setting ipq_packet_msg->mark = THAT VALUE inside the
user level program.

Hence, these are my doubts :

   ipq_packet_msg-> mark i.e all the fields in ipq_packet msg can we modiy
   them in user space, and inject the "modified" packet back into the
   kernel ? I dont think this is possible with ipq_packet_msg->mark field,
   that is just for reading. Also, if i want to modify the packet before
   setting a verdict of NF_ACCEPT, how do I do it, the ip header starts
   from (unsigned char *)(packet+1), am I right ? Once i modify contents
   here, say interchange the src , dest ip, and then set verdict to
   NF_ACCEPT, the packet that is actually injected has the changed values.

regards
Amit




"Kotatsu" <naughtydog@xxxxxxxxxxx>@lists.netfilter.org on 06/02/2004
12:09:44 AM

Sent by:    netfilter-admin@xxxxxxxxxxxxxxxxxxx


To:    <netfilter@xxxxxxxxxxxxxxxxxxx>
cc:

Subject:    Resend TCP segment modified to the sender



Hi guys,
    I have a problem. I have a  client (192.168.9.2) that send TCP segment
to a server (192.168.11.2).  Between this PC there is a Linux router that
captures all the segment  and do forwarding. I want that it takes a client
packet (the 10th TCP data  packet sended, for example), modify it as i
want, and then resend it to the  client with ipq_set_verdict.
Is this operation possible? Or netfilter  can only send the modified packet
at the server? If it's possible, which  field must i modify to do this
(i've tried to modify some flag but it doesn't  work)?

Thanks for your help
Best regards







[Index of Archives]     [Linux Netfilter Development]     [Linux Kernel Networking Development]     [Netem]     [Berkeley Packet Filter]     [Linux Kernel Development]     [Advanced Routing & Traffice Control]     [Bugtraq]

  Powered by Linux