日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IP地址转换函数 inet_pton、inet_ntop与 inet_aton、inet_addr、 inet_ntoa

發布時間:2024/1/8 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IP地址转换函数 inet_pton、inet_ntop与 inet_aton、inet_addr、 inet_ntoa 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

inet_pton

NAME
????inet_pton - 將 IPv4 和 IPv6 地址從點分十進制轉換為二進制

SYNOPSIS

#include <arpa/inet.h>int inet_pton(int af, const char *src, void *dst);

DESCRIPTION
????該函數將字符串src轉換為af地址類型協議簇的網絡地址,并存儲到dst中。對于af參數,必須為AF_INET或AF_INET6

RETURN VALUE
????inet_pton轉換成功則返回1,對于指定的地址類型協議簇,如果不是一個有效的網絡地址,將轉換失敗,返回 0,如果指定的地址類型協議簇不合法,將返回-1并,并且errno設置為EAFNOSUPPORT

NOTES
????不同于inet_aton和inet——addr,inept_pton支持 IPv6 地址。另一方面,inet_pton僅支持點分十進制表示的 IPv4 地址,而inet_aton和inet_addr接受更通用的數字和點表示法(十六進制和八進制數字格式,以及格式不需要顯式寫入所有四個字節)。

inet_ntop

NAME
????inet_ntop - 將 IPv4 和 IPv6 地址從二進制轉換為點分十進制

SYNOPSIS

#include <arpa/inet.h>const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);

DESCRIPTION
????該函數將地址類型協議簇為af的網絡地址src轉換為字符串,并將其存儲到dst中,其中dst不能是空指針。調用者在參數size中指定可使用的緩沖字節數。
????inet_ntop拓展自inet_ntoa來支持多種地址類型協議簇,inet_ntoa現在已經被棄用。

RETURN VALUE
????inet_ntop執行成功,返回一個指向dst的非空指針,如果執行失敗,將返回NULL,并且errno設置為相應的錯誤類型。

ERRORS

  • EAFNOSUPPORT
    af并不是一個合法的地址類型協議簇
  • ENOSPC
    要轉換的字符串地址src其字節大小超過了給定的緩沖字節大小

EXAMPLE

????以下是關于inet_pton和inet_ntop函數使用的例子

#include <arpa/inet.h> #include <stdio.h> #include <stdlib.h> #include <string.h>int main(int argc, char *argv[]) {unsigned char buf[sizeof(struct in6_addr)];int domain, s;char str[INET6_ADDRSTRLEN];if (argc != 3) {fprintf(stderr, "Usage: %s {i4|i6|<num>} string\n", argv[0]);exit(EXIT_FAILURE);}domain = (strcmp(argv[1], "i4") == 0) ? AF_INET :(strcmp(argv[1], "i6") == 0) ? AF_INET6 : atoi(argv[1]);s = inet_pton(domain, argv[2], buf);if (s <= 0) {if (s == 0)fprintf(stderr, "Not in presentation format");elseperror("inet_pton");exit(EXIT_FAILURE);}if (inet_ntop(domain, buf, str, INET6_ADDRSTRLEN) == NULL) {perror("inet_ntop");exit(EXIT_FAILURE);}printf("%s\n", str);exit(EXIT_SUCCESS); }

inet_aton inet_addr inet_ntoa

NAME
????inet_aton, inet_addr, inet_ntoa - 網絡地址操作例程

SYNOPSIS

#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>typedef uint32_t in_addr_t;struct in_addr{in_addr_t s_addr;};int inet_aton(const char *cp, struct in_addr *inp);in_addr_t inet_addr(const char *cp);char *inet_ntoa(struct in_addr in);

DESCRIPTION
????inet_aton函數將網絡主機地址cp從 IPv4 的點分十格式轉換為二進制值(以網絡字節序)并且把它保存在inp指針指向的結構體中。如果地址是合法的,那么inet_aton函數返回非0值,反之返回0值。cp中提供的地址可以要有以下幾種格式:

  • a.b.c.d 四個數字部分中的每一個指定地址的一個字節,字節按從左到右的順序分配以產生二進制地址。
  • a.b.c a和b指定二進制地址的前兩個字節,c被解釋為16位值,它定義二進制地址的最右邊兩個字節。此表示法適用于指定(過時的)B類網絡地址。
  • a.b a指定二進制地址的第一個字節,b被解釋為24位值,它定義了二進制地址的最右邊三個字節。此表示法適用于指定(過時的)A類網絡地址。
  • a a被解釋為32位值,直接存儲到二進制地址中而不進行任何字節重新排列。
    ????在所有上述形式中,虛線標示的地址格式可以用十進制,八進制(帶前導0)或十六進制指定(前導0X)。任何這些形式的地址統稱為IPV4數字和點符號。使用正好四個十進制數稱為 IPv4 點分十進制表示法。
    ????如果提供的字符串地址被成功轉換,inet_aton函數返回1,如果提供的字符串地址不合法,返回0(此時errno不會被設置為錯誤)

????inet_addr函數將網絡主機地址cp從 IPv4 的數字點表示形式轉換為以網絡字節順序的二進制形式。如果輸入不合法,INADDR_NONE(通常為-1)被返回。這個函數存在一個問題,因為-1是一個合法的地址(255.255.255.255)。可以使用inet_aton函數、inet_pton函數或者getaddrinfo函數來代替使用它,這些函數提供了一種更清晰的方式來指示錯誤返回。

????inet_ntoa函數將網絡主機地址in轉換為點分十格式的 IPv4 地址。該函數的返回值所指向的字符串駐留在靜態內存中,后續調用將覆蓋該緩沖區。

NOTES
????在 x86 架構中,主機字節順序首先是最低有效字節(小端),而在因特網上使用的網絡字節順序是最高有效字節(大端)。

EXAMPLE

#include <arpa/inet.h> #include <stdio.h> #include <stdlib.h> #include <string.h>int main(int argc, char *argv[]) {unsigned char buf[sizeof(struct in6_addr)];int domain, s;char str[INET6_ADDRSTRLEN];if (argc != 3) {fprintf(stderr, "Usage: %s {i4|i6|<num>} string\n", argv[0]);exit(EXIT_FAILURE);}domain = (strcmp(argv[1], "i4") == 0) ? AF_INET :(strcmp(argv[1], "i6") == 0) ? AF_INET6 : atoi(argv[1]);s = inet_pton(domain, argv[2], buf);if (s <= 0) {if (s == 0)fprintf(stderr, "Not in presentation format");elseperror("inet_pton");exit(EXIT_FAILURE);}if (inet_ntop(domain, buf, str, INET6_ADDRSTRLEN) == NULL) {perror("inet_ntop");exit(EXIT_FAILURE);}printf("%s\n", str);exit(EXIT_SUCCESS); }

轉自:https://www.cnblogs.com/ZhaoxiCheung/p/9388009.html

作者:zxzhang

總結

以上是生活随笔為你收集整理的IP地址转换函数 inet_pton、inet_ntop与 inet_aton、inet_addr、 inet_ntoa的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。