Sponsored Content
Top Forums Programming How to get IP Address of machine? Post 42248 by DreamWarrior on Friday 24th of October 2003 11:16:36 AM
Old 10-24-2003
I didn't think that inet_ntoa would work because I didn't have an in_addr structure to pass it, I only had a struct sockaddr_in, and I didn't see an in_addr structure residing within that. So I didn't want to sit and guess what part (if any) of that structure to pass it, or try and find something to extract that information. However the man page for what I ended up using (inet_ntop) does say that is equivalent to inet_ntoa, although it takes entirely different arguments.

Anyway, I found code (in the Steven's book) to obtain my desired results. I knew we had a copy laying around here somewhere, I just couldn't find it...but you're right it is the God of network books.

So (drumroll) for those curious, this is what I ended up doing. Keep in mind that I needed to go from an integer socket descriptor to an IP, so this code may not be exactly what you need.

Just a quick note, the saddr and slen variables work fine with the type I gave them for HP-UX (and Redhat - while it gives compile warnings it works)). However, some OSes want saddr to be of type struct sockaddr *, and some want slen to be of type socklen_t. And while that may work, sockaddr doesn't have the internet sin_addr field required...so some typecasting may need to be done to shut those compilers up.

Also, this isn't the exact code I used, but it does the job and presents the basics without all the garbage I put around it for my particular needs.

Code:
int getIP(int sfd, char *buf, size_t bufSize, int getMine)
{
   int  rVal;
   struct sockaddr_in saddr;
   int slen;

   /* get saddr depending on what caller wants */

   if (getMine)
   {
      rVal = getsockname(sfd, &saddr, &slen);
   }
   else
   {
      rVal = getpeername(sfd, &saddr, &slen);
   }

   /* insure saddr was filled in */

   if (rVal < 0)
   {
      /* it wasn't */

      rVal = 0;
   }
   else
   {
      /* it was - convert address in sin_addr to dotted IP */

      rVal = (inet_ntop (AF_INET, &saddr.sin_addr, buf, bufSize) == NULL) ? 0 : 1;
   }

   return rVal;
}

Also, if you wanted to know port information, you could get it with:

port = ntohs(saddr.sin_port);

Provided, of course, that saddr was filled in.

getMine allows you to get information regarding the local socket connection, otherwise (by passing it 0) you get information regarding the connection at the other end (the peer).

And that's it...hope this helps those curious.
 

10 More Discussions You Might Find Interesting

1. UNIX for Advanced & Expert Users

Changing Machine IP address

Hopefully someone can help with this. I need the command to change the IP address on a machine (7 Replies)
Discussion started by: kkinnon
7 Replies

2. UNIX for Dummies Questions & Answers

Restricting access to a machine by IP Address

I have a need to allow only certain IP addresses to access a machine running solaris 9. I am not sure how this can be accomplished. Thanks in advance for your help. Patch (2 Replies)
Discussion started by: patch
2 Replies

3. IP Networking

how to retrieve IP address of a machine

hi is there is any command that retrieves the IP address of a machine. Also is there any function in c that does the same. thankx (5 Replies)
Discussion started by: mridula
5 Replies

4. Shell Programming and Scripting

How to get Windows machine's IP address from Unix?

I am using windows Xp. From windows I would connect to my IBM AIX unix machine using telnet client. Is there any command available to view the IP address of Windows machine from Unix? (Note that ifconfig will give unix mahcine's IP address currently logged in.) (3 Replies)
Discussion started by: mvictorvijayan
3 Replies

5. UNIX for Advanced & Expert Users

IP address of machine

Hi i want to know the Ip address of the machine from where i logged into the unix server and made some changes to a file. Can I know the last changes made to a unix file ? (3 Replies)
Discussion started by: harneet2004us
3 Replies

6. UNIX for Dummies Questions & Answers

IP address of Unix machine

Can any one please tell me how to find the IP address of the Unix machine we are in? (9 Replies)
Discussion started by: thoothukudiking
9 Replies

7. Solaris

How to get the IP address / Host name of client machine

Hi How to get the IP address / Host name of a particular user connected to Unix Server. For example: If used 'DevUser1' is connected to Unix server. I need to find out from which PC this connection has been made. How can this be achieved? Thanks (6 Replies)
Discussion started by: MVL
6 Replies

8. UNIX for Dummies Questions & Answers

Static IP address for solaris 10 virtual machine

Hi All I am having a solaris 10 virtual machine on vista (using vmware 7) laptop. Now i want to access virtual machine from vista using putty. Problem is that i insalled the solaris machine as dhcp. and whenever i connect to internet or reboot my system the IP address of solaris... (1 Reply)
Discussion started by: ankurk
1 Replies

9. Solaris

i want to set ip address to a virtual machine

hi all i want to set ip address to a vitrual machine i am using following command. but it is not ifconfig -a command output. what is wrong i dont know bash# ifconfig interfacename plumb bash# ifconfig interfacename auto-dhcp Please use code tags next time for your code and data. (4 Replies)
Discussion started by: nikhil kasar
4 Replies

10. Programming

I.p address of machine

i m writing a program which finds the i.p address of the machine. but it just prints out the first three character of the ifconfig output but i want to just print my i.p address lik 10.0.0.222 which is in second line after inet addr: code : #include<iostream> #include<cstdlib> using... (1 Reply)
Discussion started by: console
1 Replies
in.h(3HEAD)							      Headers							       in.h(3HEAD)

NAME
in.h, in - Internet Protocol family SYNOPSIS
#include <netinet/in.h> DESCRIPTION
The <netinet/in.h> header defines the following types through typedef: in_port_t An unsigned integral type of exactly 16 bits. in_addr_t An unsigned integral type of exactly 32 bits. The <netinet/in.h> header defines the in_addr structure that includes the following member: The <netinet/in.h> header defines the in_addr structure that includes the following member: in_addr_t s_addr The <netinet/in.h> header defines the type sa_family_t as described in socket.h(3HEAD). The <netinet/in.h> header defines the following macros for use as values of the level argument of getsockopt() and setsockopt(): IPPROTO_IP Dummy for IP IPPROTO_ICMP Control message protocol IPPROTO_TCP TCP IPPROTO_UDP User datagram protocol The <netinet/in.h> header defines the following macros for use as destination addresses for connect(), sendmsg(), and sendto(): INADDR_ANY Local host address INADDR_BROADCAST Broadcast address The <netinet/in.h> header defines the sockaddr_in structure that is used to store addresses for the Internet protocol family. Values of this type must be cast to struct sockaddr for use with the socket interfaces. Default For applications that do not require standard-conforming behavior (those that use the socket interfaces described in section(3SOCKET) of the reference manual; see Intro(3) and standards(5)), the <netinet/in.h> header defines the sockaddr_in structure that includes the follow- ing members: sa_family_t sin_family in_port_t sin_port struct in_addr sin_addr char sin_zero[8] Standard conforming For applications that require standard-conforming behavior (those that use the socket interfaces described in section(3XNET) of the refer- ence manual; see Intro(3) and standards(5)), the <netinet/in.h> header defines the sockaddr_in structure that includes the following mem- bers: sa_family_t sin_family in_port_t sin_port struct in_addr sin_addr unsigned char sin_zero[8] ATTRIBUTES
See attributes(5) for descriptions of the following attributes: +-----------------------------+-----------------------------+ | ATTRIBUTE TYPE | ATTRIBUTE VALUE | +-----------------------------+-----------------------------+ |Interface Stability |Standard | +-----------------------------+-----------------------------+ SEE ALSO
Intro(3), connect(3SOCKET), connect(3XNET), getsockopt(3SOCKET), getsockopt(3XNET), sendmsg(3SOCKET), sendmsg(3XNET), sendto(3SOCKET), sendto(3XNET), setsockopt(3SOCKET), setsockopt(3XNET), socket.h(3HEAD), attributes(5), standards(5) SunOS 5.10 30 Aug 2002 in.h(3HEAD)
All times are GMT -4. The time now is 08:15 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy