×

inetntop头文件

inetntop头文件(windows inet_pton头文件)

admin admin 发表于2023-04-02 20:33:09 浏览58 评论0

抢沙发发表评论

本文目录一览:

获取网关IP地址

需要导入的头文件:

#define IOS_CELLULAR    @"pdp_ip0"

#define IOS_WIFI        @"en0"

#define IOS_VPN        @"utun0"

#define IP_ADDR_IPv4    @"ipv4"

#define IP_ADDR_IPv6    @"ipv6"

#include sys/socket.h

#include sys/sysctl.h

#include net/if.h

#include net/if_dl.h

实现:

- (NSString *)getIPAddress:(BOOL)preferIPv4

{

NSArray *searchArray = preferIPv4 ?

@[ IOS_VPN @"/" IP_ADDR_IPv4, IOS_VPN @"/" IP_ADDR_IPv6, IOS_WIFI @"/" IP_ADDR_IPv4, IOS_WIFI @"/" IP_ADDR_IPv6, IOS_CELLULAR @"/" IP_ADDR_IPv4, IOS_CELLULAR @"/" IP_ADDR_IPv6 ] :-inetntop头文件

@[ IOS_VPN @"/" IP_ADDR_IPv6, IOS_VPN @"/" IP_ADDR_IPv4, IOS_WIFI @"/" IP_ADDR_IPv6, IOS_WIFI @"/" IP_ADDR_IPv4, IOS_CELLULAR @"/" IP_ADDR_IPv6, IOS_CELLULAR @"/" IP_ADDR_IPv4 ] ;-inetntop头文件

NSDictionary *addresses = [self getIPAddresses];

//    NSLog(@"addresses: %@", addresses);

__block NSString *address;

[searchArray enumerateObjectsUsingBlock:^(NSString *key, NSUInteger idx, BOOL *stop)

{

address = addresses[key];

//筛选出IP地址格式

if([self isValidatIP:address]) *stop = YES;

} ];

return address ? address : @"0.0.0.0";

}

//  判断是不是ip地址格式

- (BOOL)isValidatIP:(NSString *)ipAddress {

if (ipAddress.length == 0) {

return NO;

}

NSString *urlRegEx = @"^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."

"([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."

"([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."

"([01]?\\d\\d?|2[0-4]\\d|25[0-5])$";

NSError *error;

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:urlRegEx options:0 error:error];-inetntop头文件

if (regex != nil) {

NSTextCheckingResult *firstMatch=[regex firstMatchInString:ipAddress options:0 range:NSMakeRange(0, [ipAddress length])];-inetntop头文件

if (firstMatch) {

//            NSRange resultRange = [firstMatch rangeAtIndex:0];

//            NSString *result=[ipAddress substringWithRange:resultRange];

//            NSLog(@"result==%@",result);

return YES;

}

}

return NO;

}

- (NSDictionary *)getIPAddresses

{

NSMutableDictionary *addresses = [NSMutableDictionary dictionaryWithCapacity:8];

// retrieve the current interfaces - returns 0 on success

struct ifaddrs *interfaces;

if(!getifaddrs(interfaces)) {

// Loop through linked list of interfaces

struct ifaddrs *interface;

for(interface=interfaces; interface; interface=interface-ifa_next) {

if(!(interface-ifa_flags IFF_UP) /* || (interface-ifa_flags IFF_LOOPBACK) */ ) {

continue; // deeply nested code harder to read

}

const struct sockaddr_in *addr = (const struct sockaddr_in*)interface-ifa_addr;

char addrBuf[ MAX(INET_ADDRSTRLEN, INET6_ADDRSTRLEN) ];

if(addr (addr-sin_family==AF_INET || addr-sin_family==AF_INET6)) {

NSString *name = [NSString stringWithUTF8String:interface-ifa_name];

NSString *type;

if(addr-sin_family == AF_INET) {

if(inet_ntop(AF_INET, addr-sin_addr, addrBuf, INET_ADDRSTRLEN)) {

type = IP_ADDR_IPv4;

}

} else {

const struct sockaddr_in6 *addr6 = (const struct sockaddr_in6*)interface-ifa_addr;

if(inet_ntop(AF_INET6, addr6-sin6_addr, addrBuf, INET6_ADDRSTRLEN)) {

type = IP_ADDR_IPv6;

}

}

if(type) {

NSString *key = [NSString stringWithFormat:@"%@/%@", name, type];

addresses[key] = [NSString stringWithUTF8String:addrBuf];

}

}

}

freeifaddrs(interfaces);

}

return [addresses count] ? addresses : nil;

}

无法定位程序输入点inet_ntop于动态链接库WS2_32.DLL上

无法定位程序输入点inet_ntop于动态链接库WS2_32.DLL上是因为相关的dll文件丢失造成的,能通过修复来处理。以金山毒霸为例,步骤如下:

1、直接在主页里面,点击百宝箱跳转。

2、下一步,需要选择电脑医生进入。

3、这个时候,继续搜索对象进行确定。

4、如果没问题,就立即修复。

5、这样一来等提示修复成功以后,即可达到目的了。

xp无法定位程序输入点inet_ntop于动态链接库ws2_32.dll

缺失ws2_32.dll文件造成,解决步骤如下:

1、首先,在一定途径获取ws2_32.dll文件,例如搜索引擎查询并下载。

2、其次,将ws2_32.dll文件复制到DLL目录“C:\Windows\System32”下。

3、点击“开始菜单”,选择“运行”按钮,输入:regsvr32 ws2_32.dll,点击确定。

4、此时弹出安装完成ws2_32.dll文件的提示,点击确定。

如何使用unix网络编程第三版的源码

unix网络编程书中所有代码都基于它提供的头文件和库。所以学习时要用书中的代码做练习就必须配置好他需要的环境。

首先到 ht tp:/ /ishare.iask.sin a.c om.c n/f/1323 85 21.ht m l?sudaref=blog.cs dn.netretcode=0 下载源码包-inetntop头文件

第一步:在终端中进入upnv13e目录,然后执行代码:

./configure

第二步:这里有问题及解决方法

cd lib

make(如果报如下错误: inet_ntop.c:61: error: argument 'size' doesn't match prototype

/usr/include/arpa/inet.h:153: error: prototype declaration-inetntop头文件

inet_ntop.c第61行 size_t size -改成 socklen_t size)

第三步:这一步没有问题

cd ../libfree

make

第四步:

cd ../libgai

make

cd .. //回到unpv13e目录

然后拷贝生成的ku到系统库目录:

sudo cp libunp.a /usr/lib

sudo cp libunp.a /usr/lib32

第五步:修改unp.h并将其和config.h拷贝到/usr/include中,为了以后include方便

vim lib/unp.h

sudo cp lib/unp.h /usr/include

sudo cp config.h /usr/include

以后编译代码的时候加上-lunp链接我们的库。(貌似只能用gcc,不能用g++)

gethostbyname 用法 ,高手一定要帮忙看看

使用这个东西,首先要包含2个头文件:

#include netdb.h

#include sys/socket.h

struct hostent *gethostbyname(const char *name);

这个函数的传入值是域名或者主机名,例如"","wpc"等等。

传出值,是一个hostent的结构(如下)。如果函数调用失败,将返回NULL。

struct hostent {

char *h_name;

char **h_aliases;

int h_addrtype;

int h_length;

char **h_addr_list;

};

解释一下这个结构, 其中:

char *h_name 表示的是主机的规范名。例如的规范名其实是。

char **h_aliases 表示的是主机的别名。就是google他自己的别名。有的时候,有的主机可能有好几个别名,这些,其实都是为了易于用户记忆而为自己的网站多取的名字。

int h_addrtype 表示的是主机ip地址的类型,到底是ipv4(AF_INET),还是ipv6(AF_INET6)

int h_length 表示的是主机ip地址的长度

int **h_addr_lisst 表示的是主机的ip地址,注意,这个是以网络字节序存储的。千万不要直接用printf带%s参数来打这个东西,会有问题的哇。所以到真正需要打印出这个IP的话,需要调用inet_ntop()。-inetntop头文件

const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt) :

这个函数,是将类型为af的网络地址结构src,转换成主机序的字符串形式,存放在长度为cnt的字符串中。

这个函数,其实就是返回指向dst的一个指针。如果函数调用错误,返回值是NULL。

下面是例程,有详细的注释。

#include netdb.h

#include sys/socket.h

int main(int argc, char **argv)

{

char *ptr,**pptr;

struct hostent *hptr;

char str[32];

/* 取得命令后第一个参数,即要解析的域名或主机名 */

ptr = argv[1];

/* 调用gethostbyname()。调用结果都存在hptr中 */

if( (hptr = gethostbyname(ptr) ) == NULL )

{

printf("gethostbyname error for host:%s\n", ptr);

return 0; /* 如果调用gethostbyname发生错误,返回1 */

}

/* 将主机的规范名打出来 */

printf("official hostname:%s\n",hptr-h_name);

/* 主机可能有多个别名,将所有别名分别打出来 */

for(pptr = hptr-h_aliases; *pptr != NULL; pptr++)

printf(" alias:%s\n",*pptr);

/* 根据地址类型,将地址打出来 */

switch(hptr-h_addrtype)

{

case AF_INET:

case AF_INET6:

pptr=hptr-h_addr_list;

/* 将刚才得到的所有地址都打出来。其中调用了inet_ntop()函数 */

for(;*pptr!=NULL;pptr++)

printf(" address:%s\n", inet_ntop(hptr-h_addrtype, *pptr, str, sizeof(str)));

break;

default:

printf("unknown address type\n");

break;

}

return 0