获取本机ip(成功版)

参照网上用ioctl的SIOCGIFCONF方法获取本地ip成功,代码如下:

#include <stdio.h>
#include <stdlib.h>           /* for exit() */
#include <string.h>
#include <sys/socket.h>       /* for socket() */
#include <sys/types.h>        /* for socket() */
#include <net/if.h>           /* for struct ifreq */
#include <linux/sockios.h>    /* for SIOCGIFADDR */
#include <netinet/in.h>       /* for struct sockaddr_in */
#include <arpa/inet.h>        /* for inet_ntoa() */

int main(int argc, char *argv[])
{
	char ipbuf[16];
	getlocaip(ipbuf);
	printf("local ip is: %s\n", ipbuf);
	exit(0);
}

int getlocaip(char *ip)
{
	int sockfd;
	struct ifreq req;
	struct sockaddr_in *host;

	if((sockfd = socket(PF_INET, SOCK_STREAM, 0)) == -1)
	{
		perror("socket");
		return -1;
	}

	bzero(&req, sizeof(struct ifreq));
	strcpy(req.ifr_name, "eth0");
	ioctl(sockfd, SIOCGIFADDR, &req);
	host = (struct sockaddr_in*)&req.ifr_addr;
	strcpy(ip, inet_ntoa(host->sin_addr));

	close(sockfd);
	return 0;
}

因为头文件是后来一个个的加上去的,所以在尝试的过程中,编译的时候出现很多错误,虽然都是比较常见的,也记录一下:

1.出现警告:

警告:
传递‘strcpy’的第 2
个参数时将整数赋给指针,未作类型转换

原因:没有把inet_ntoa()函数的头文件加上

解决方法:加上头文件 #include <arpa/inet.h>

2.出现错误:

错误:
提领指向不完全类型的指针

原因:这种错误主要是因为使用的结构体定义的头文件没有包含进来,我这主要是忘了把定义struct sockaddr_in的头文件

解决方法:加上结构体对应的头文件(我的是#include <netinet/in.h>)

3.执行程序打印的ip是0.0.0.0

原因:计算机网卡eth0没有获取到ip,可以用ifconfig看下:

解决方法:用ifconfig手动设置ip后再执行程序:

搞定碎觉!

时间: 2024-10-06 14:49:21

获取本机ip(成功版)的相关文章

Linux编程获取本机IP地址

使用函数getifaddrs来枚举网卡IP,其中使用到的结构体如下所示: struct ifaddrs { struct ifaddrs *ifa_next; /* Next item in list */ char *ifa_name; /* Name of interface */ unsigned int ifa_flags; /* Flags from SIOCGIFFLAGS */ struct sockaddr *ifa_addr; /* Address of interface *

用java获取本机IP地址

在网上找了几个用java获取本机IP地址的代码,发现都少都有些不完美,自己整理了一下.突然之间很想把自己的IP地址给获取了,虽然用系统自带命令可 以得到,但自己想写一个程序获取一下,到网上搜索了一下java获取本机IP地址的方法,结果居然发现没有一个是可以用的,气的我老人家吐血, 这些人闭着眼睛写程序,写完了就往网上发,也不测试一下,害的我以为自己RP问题,老是获取不到正确的IP地址,强烈谴责!!!为了表示鄙视,现把网上找到的主要的两种方法的不足给指出一下方法一(只能在Windows上使用,Li

Linux 获取本机IP、MAC地址用法大全

getifaddrs()和struct ifaddrs的使用,获取本机IP ifaddrs结构体定义如下: C代码   struct ifaddrs { struct ifaddrs  *ifa_next;    /* Next item in list */ char            *ifa_name;    /* Name of interface */ unsigned int     ifa_flags;   /* Flags from SIOCGIFFLAGS */ struc

获取本机IP地址

这里有两种方法: 1 //获取本机IP 2 - (NSString *)localIPAddress 3 { 4 NSString *localIP = nil; 5 struct ifaddrs *addrs; 6 if (getifaddrs(&addrs)==0) { 7 const struct ifaddrs *cursor = addrs; 8 while (cursor != NULL) { 9 if (cursor->ifa_addr->sa_family == AF_

python:使用netifaces模块获取本机IP网关等信息

python获取本机IP有很多种方法,可每种方法都有局限性. 使用netifaces模块获取本机IP网关等信息,需要安装netifaces模块,不管windows还是linux都可以通用. 一.程序: #!/usr/bin/env python2 # -*- coding: utf-8 -*- #实现本地网卡IP #需要安装netifaces模块 def GetNetworkIP():     #获取本地网卡IP地址     import netifaces     #routingGatewa

关于是用dotnet获取本机IP地址+计算机名的方法

印象中在maxscript帮助文档里找到过方法,但是当时没记下来.只能通过dotnet实现了. 如果电脑有无线网卡和本地连接,可能会出现乱码,也问了写dotnet的朋友,提供了一些思路,不过最终还是使用了这个笨办法. fn getIP_PCname = ( cc = (dotnetclass "System.Net.Dns") oo = cc.GetHostAddresses(cc.GetHostName()) for ip = 1 to oo.count do ( getip = f

获取本机IP

///////////////////////////////获取本机IP #define MAXADDRS    32 extern char *if_names[MAXADDRS]; extern char *ip_names[MAXADDRS]; extern char *hw_addrs[MAXADDRS]; externunsignedlong ip_addrs[MAXADDRS]; // Function prototypes void InitAddresses(); void F

Java编程实现获取本机IP和计算机名的功能

import java.net.InetAddress; import java.net.UnknownHostException; public class Test { public static void main(String[] args) { try { InetAddress inetAddress = InetAddress.getLocalHost(); System.out.println("本机IP:" + inetAddress.getHostAddress()

java 获取本机ip及mac地址

package com.achun.test; import java.net.Inet4Address;import java.net.Inet6Address;import java.net.InetAddress;import java.net.NetworkInterface;import java.util.Enumeration; public class HelloWorld { public static void main(String[] args) { // TODO Au

Windows phone8 获取本机 IP 地址

可以在 Bing 查找中输入: "my IP address",然后确认这样可以看到自己的 IP. 如果需要通过代码编程来获取本机 IP,可以使用以下代码: 注意:此段代码在 WP7.1 上无法编译通过,NetworkInformation 未定义. 1 public class GetHostIPAddress 2 { 3 public string GetIPAddress() 4 { 5 string strIPAddress = null; 6 List<string&g