Return to BSD News archive
Path: euryale.cc.adfa.oz.au!newshost.carno.net.au!harbinger.cc.monash.edu.au!munnari.OZ.AU!uunet!in3.uu.net!207.172.3.52!feed1.news.erols.com!howland.erols.net!news.mathworks.com!rill.news.pipex.net!pipex!tank.news.pipex.net!pipex!news.utell.co.uk!usenet
From: brian@shift.utell.net (Brian Somers)
Newsgroups: comp.unix.bsd.misc
Subject: Re: How can I use Sockets at the IP level (SOCK_RAW) ??
Date: 22 May 1997 10:55:47 GMT
Organization: Awfulhak Ltd.
Lines: 61
Message-ID: <5m18nj$aq7@ui-gate.utell.co.uk>
References: <338283DE.41C67EA6@ee.bilkent.edu.tr>
Reply-To: brian@awfulhak.org, brian@utell.co.uk
NNTP-Posting-Host: shift.utell.net
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
X-Newsreader: knews 0.9.8
Xref: euryale.cc.adfa.oz.au comp.unix.bsd.misc:3372
In article <338283DE.41C67EA6@ee.bilkent.edu.tr>,
Khaled Benfatma <khaled@ee.bilkent.edu.tr> writes:
> I am trying to write a C program on SunOS which sends and a receives
> data between two different machines using 'SOCKET'.
>
> This worked pretty well for both TCP (SOCK_STREAM) and UDP (SOCK_DGRAM),
> but I need to work at the IP level, that is, I want to use a raw socket:
>
> socket(AF_INET, SOCK_RAW, proto)
>
> I already got the super-user previlege but I can only create this type
> of sockets, I could not transmit any data thru it. I tried to use the
> following code, but I couldn't get any result.
>
>
>
> #include <sys/types.h>
> #include <sys/socket.h>
> #include <netinet/in.h>
> #include <netdb.h>
> #include <stdio.h>
>
> #define DATA "The sea is calm tonight, the tide is full . . ."
>
> main()
> {
> int sock;
> struct sockaddr_in receiver;
>
> sock = socket(AF_INET,SOCK_RAW, 0);
> if (sock < 0) {
> perror("opening socket");
> exit(1);
> }
>
> receiver.sin_family = AF_INET;
> receiver.sin_port = htons(2000);
> receiver.sin_addr.s_addr = inet_addr("139.179.12.18");
>
> if (sendto(sock,DATA,sizeof(DATA),0,&receiver,sizeof(receiver)) < 0)
> perror("sending datagram message");
> close(sock);
>
> }
>
>
> And I used a pretty similar code for the receiver program, it didn't
> work.
> If you have any idea about this please help me, I need it very urgently.
You're going to have to write a valid IP packet into a SOCK_RAW.
Have a browse through the /usr/include/net*/*.h, starting with
struct ip.
>
> Thanks!
--
Brian <brian@awfulhak.org> <brian@freebsd.org>
<http://www.awfulhak.org>
Don't _EVER_ lose your sense of humour !