Date: Mon, 8 Dec 1997 18:12:49 +0200 (EET) From: Ruslan Ermilov <ru@ucb.crimea.ua> To: fwang2@unity.ncsu.edu (Feiyi Wang) Cc: hackers@freebsd.org Subject: Re: help: divert sockets question Message-ID: <199712081612.SAA11172@relay.ucb.crimea.ua> In-Reply-To: <Pine.SOL.3.96.971208095136.16834B-100000@loki.csc.ncsu.edu> from Feiyi Wang at "Dec 8, 97 09:54:53 am"
next in thread | previous in thread | raw e-mail | index | archive | help
Hi!
I did it the same way. It doesn't work for me ;-(
In general, I have a packet received trhu udp from remote machine,
and I need to write it as incoming on a local machine.
Usually, you read the packet from divert socket first using recvfrom(),
then optionally modify it, and then write it back using sendto().
My case is differ, because I just need to write a packet as incoming,
not reading it from divert socket first.
Does it make sense?
Once Feiyi Wang wrote:
> Hi,
>
> It will work. Here is the way I did it
>
> -- snip --
>
>
> /* this is readIncoming() */
>
> inbytes = recvfrom( fd,
> inPacketBuf,
> sizeof inPacketBuf,
> 0,
> (struct sockaddr*) &inPacketAddr,
> &addrsize);
>
>
> /* this is writeIncoming() */
>
> writeIncoming(int fd)
> {
> int wrote;
> wrote = sendto( fd,
> inPacketBuf,
> inPacketLen,
> 0,
> (struct sockaddr *) &inPacketAddr,
> sizeof inPacketAddr);
>
> if ( wrote != inPacketLen )
> fprintf(stderr, "failed to write packet back\n");
> else
> return wrote;
> }
>
>
>
> On Mon, 8 Dec 1997, Ruslan Ermilov wrote:
>
> > Hi, Hackers!
> >
> > I'm in process of writing a small `iptunnel' program
> > which lets me tunnel IP traffic thru UDP.
> >
> > My program uses two sockets: UDP and divert.
> >
> > It reads IP-packet from divert socket and
> > sends it to the remote machine thru UDP.
> > Remote machine then reads it from UDP and
> > reinjects the IP-packet by writing it to the
> > divert socket.
> >
> > And vice versa.
> >
> > It works greatly!
> >
> > Problem:
> >
> > I want to reinject received thru UDP IP-packet
> > as incoming. `man ipdivert' says that I should
> > use sendto() syscall with a destination address
> > equal to IP address of some my local interface.
> >
> > I did it and it doesn't works.
> >
> > It seems to me like a kernel is just dropping such a packet.
> > But no error returned from sendto(), no packets travel
> > thru the firewall.
> >
> > Can anyone point me a way to write packet as incoming?
> > Should I change some IP-packet fields?
> >
> > TIA,
> > --
> > Ruslan A. Ermilov System Administrator
> > ru@ucb.crimea.ua United Commercial Bank
> > +380-652-247647 Simferopol, Crimea
> > 2426679 ICQ Network, UIN
> >
>
>
--
Ruslan A. Ermilov System Administrator
ru@ucb.crimea.ua United Commercial Bank
+380-652-247647 Simferopol, Crimea
2426679 ICQ Network, UIN
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199712081612.SAA11172>
