Unix Socket - Chức năng Địa chỉ IP
Unix cung cấp các lệnh gọi hàm khác nhau để giúp bạn thao tác địa chỉ IP. Các hàm này chuyển đổi địa chỉ Internet giữa các chuỗi ASCII (những gì con người thích sử dụng) và các giá trị nhị phân có thứ tự byte mạng (các giá trị được lưu trữ trong cấu trúc địa chỉ socket).
Ba lệnh gọi hàm sau được sử dụng để định địa chỉ IPv4:
- int inet_aton (const char * strptr, struct in_addr * addrptr)
- in_addr_t inet_addr (const char * strptr)
- char * inet_ntoa (struct in_addr inaddr)
int inet_aton (const char * strptr, struct in_addr * addrptr)
Lệnh gọi hàm này chuyển đổi chuỗi được chỉ định trong ký hiệu chấm chuẩn Internet thành địa chỉ mạng và lưu trữ địa chỉ trong cấu trúc được cung cấp. Địa chỉ được chuyển đổi sẽ nằm trong Thứ tự Byte Mạng (các byte được sắp xếp theo thứ tự từ trái sang phải). Nó trả về 1 nếu chuỗi hợp lệ và 0 khi có lỗi.
Sau đây là ví dụ sử dụng -
#include <arpa/inet.h>
(...)
int retval;
struct in_addr addrptr
memset(&addrptr, '\0', sizeof(addrptr));
retval = inet_aton("68.178.157.132", &addrptr);
(...)
in_addr_t inet_addr (const char * strptr)
Lệnh gọi hàm này chuyển đổi chuỗi được chỉ định trong ký hiệu dấu chấm tiêu chuẩn Internet thành giá trị số nguyên phù hợp để sử dụng làm địa chỉ Internet. Địa chỉ được chuyển đổi sẽ nằm trong Thứ tự Byte Mạng (các byte được sắp xếp theo thứ tự từ trái sang phải). Nó trả về một địa chỉ IPv4 theo thứ tự byte mạng nhị phân 32 bit và INADDR_NONE do lỗi.
Sau đây là ví dụ sử dụng -
#include <arpa/inet.h>
(...)
struct sockaddr_in dest;
memset(&dest, '\0', sizeof(dest));
dest.sin_addr.s_addr = inet_addr("68.178.157.132");
(...)
char * inet_ntoa (struct in_addr inaddr)
Lệnh gọi hàm này chuyển đổi địa chỉ máy chủ Internet được chỉ định thành một chuỗi trong ký hiệu dấu chấm chuẩn Internet.
Sau đây là ví dụ sử dụng -
#include <arpa/inet.h>
(...)
char *ip;
ip = inet_ntoa(dest.sin_addr);
printf("IP Address is: %s\n",ip);
(...)