How can I get the ip address of my host system
Hello
I have tried to get the ip address of my host mechine , I have used the following code but here I am geting only MAC address of eth0. How can I find mac address of eth1 and also init addr of ppp0 when I will connect any data card, Actually I have to make a C equivalent code of the following shell script ifconfig eth0 up eth0=`echo ""` echo $eth0 for fn in `ifconfig eth0 | grep "Ethernet HWaddr" | sed "s/.*Ethernet HWaddr \(.*\) .*/\1/"`; do eth0=`echo "$fn$eth0"`; done echo $eth0 > eth0.txt sleep 10 wvdial& sleep 30 ifconfig ppp0 up ping valuefirstmessaging.com > /dev/null & ppp0=`echo ""` echo $ppp0 for fn in `ifconfig ppp0 | grep "inet addr" | cut -d: -f2 | awk '{print $1}'`; do ppp0=`echo "$fn$ppp0"`; done echo $ppp0 > ppp0.txt the c code is for getting the eth0 address is #include <stdio.h> #include <fcntl.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #ifdef Linux #include <sys/ioctl.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <linux/if.h> #endif #ifdef HPUX #include <netio.h> #endif #ifdef AIX #include <sys/ndd_var.h> #include <sys/kinfo.h> #endif long mac_addr_sys ( u_char *addr) { /* implementation for Linux */ #ifdef Linux struct ifreq ifr; struct ifreq *IFR; struct ifconf ifc; char buf[1024]; int s, i; int ok = 0; s = socket(AF_INET, SOCK_DGRAM, 0); if (s==-1) { return -1; } ifc.ifc_len = sizeof(buf); ifc.ifc_buf = buf; ioctl(s, SIOCGIFCONF, &ifc); IFR = ifc.ifc_req; for (i = ifc.ifc_len / sizeof(struct ifreq); --i >= 0; IFR++) { strcpy(ifr.ifr_name, IFR->ifr_name); if (ioctl(s, SIOCGIFFLAGS, &ifr) == 0) { if (! (ifr.ifr_flags & IFF_LOOPBACK)) { if (ioctl(s, SIOCGIFHWADDR, &ifr) == 0) { ok = 1; break; } } } } close(s); if (ok) { bcopy( ifr.ifr_hwaddr.sa_data, addr, 6); } else { return -1; } return 0; #endif /* implementation for HP-UX */ #ifdef HPUX #define LAN_DEV0 "/dev/lan0" intfd; struct fisiocnt_block; inti; charnet_buf[sizeof(LAN_DEV0)+1]; char*p; (void)sprintf(net_buf, "%s", LAN_DEV0); p = net_buf + strlen(net_buf) - 1; /* * Get 802.3 address from card by opening the driver and interrogating it. */ for (i = 0; i < 10; i++, (*p)++) { if ((fd = open (net_buf, O_RDONLY)) != -1) { iocnt_block.reqtype = LOCAL_ADDRESS; ioctl (fd, NETSTAT, &iocnt_block); close (fd); if (iocnt_block.vtype == 6) break; } } if (fd == -1 || iocnt_block.vtype != 6) { return -1; } bcopy( &iocnt_block.value.s[0], addr, 6); return 0; #endif /* HPUX */ /* implementation for AIX */ #ifdef AIX int size; struct kinfo_ndd *nddp; size = getkerninfo(KINFO_NDD, 0, 0, 0); if (size <= 0) { return -1; } nddp = (struct kinfo_ndd *)malloc(size); if (!nddp) { return -1; } if (getkerninfo(KINFO_NDD, nddp, &size, 0) < 0) { free(nddp); return -1; } bcopy(nddp->ndd_addr, addr, 6); free(nddp); return 0; #endif /* Not implemented platforms */ return -1; } /***********************************************************************/ /* * Main (only for testing) */ #ifdef MAIN int main( int argc, char **argv) { long stat; int i; u_char addr[6]; FILE *fp; fp = fopen("eth0.txt","w"); stat = mac_addr_sys( addr); if (0 == stat) { //printf( "MAC address = "); for (i=0; i<6; ++i) { fprintf(fp,"%2.2x", addr[i]); } printf( "\n"); } else { fprintf( stderr, "can't get MAC address\n"); exit( 1); } return 0; } #endif /**************************************************************************************** E.g you want to use on Linux, save it as file.c simply compile like this: gcc -O2 -DMAIN -DLinux file.c -o file And run it ./file MAC address = 0008c7e9e386 Compare with /sbin/ifconfig result: /sbin/ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:08:C7:E9:E3:86 inet addr:***.***.***.*** Bcast:***.***.***.*** Mask:255.255.255.0 inet6 addr: ********************* Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:265555947 errors:0 dropped:0 overruns:0 frame:0 TX packets:50507373 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:4090310752 (3.8 GiB) TX bytes:1085018636 (1.0 GiB) *********************************************************************************************/ please respond me. Thanks in advance Dwijesh. |
please put fragments of code inside code tags (code and /code between [ and ] )
you can read up with Code:
man grep Code:
ifconfig |
Hi,
I agree that using the vbcode tag '#' for code will make your post cleaner. You should also 'man ethtool' along with janhe's suggestions. |
Quote:
Thanks for your kind replay ,please suggest me how can I ping a URL like ping valuefirstmessaging.com through c code I have tried to use cURLpp which is a c++ application . I want c code to implement actually wgen I am calling the .cpp file where all the entire code is writen in like c and compiled with g++ I get a error at realloc() . Is there any function in c++ that can be replaced realloc(). Thanks & Regards Dwijesh |
All times are GMT -5. The time now is 12:04 PM. |