Yxqq378287007 2022-01-15 02:57:13 阅读数:56
Adresse du réseau(Internet Address)
IPv4(Internet Protocol version 4),4Famille d'adresses Byte
IPv6(Internet Protocol version 6),16Famille d'adresses Byte
IPv4De4 Les adresses Byte sont divisées en adresses réseau et hôtes (Ordinateur)Adresse.
AAdresse de classe,1 Réseau Byte ID,3 Hôte Byte ID.
(La première0,0xxxxxxx, Plage du premier octet 0~127[2^7-1])
BAdresse de classe,2 Réseau Byte ID,2 Hôte Byte ID.
(Les deux premiers10,10xxxxxx, Plage du premier octet 128[2^7]~191[2^7+2^6-1])
CAdresse de classe,3 Réseau Byte ID,1 Hôte Byte ID.
(Les trois premiers110,110xxxxx, Plage du premier octet 192[2^7+2^6]~223[2^7+2^6+2^5-1])
DAdresse de classe(Adresse de diffusion),Quelle que soit l'adresse du réseau et l'adresse de l'hôte, Est une adresse réservée , Principalement pour la diffusion multipoint (Multicast, Aussi appelé Multicast ).
(Top 41110,1110xxxx, Plage du premier octet 224[2^7+2^6+2^5]~239[2^7+2^6+2^5+2^4-1])
EAdresse de classe,Réservé à une utilisation future.
(Top 41111,1111xxxx, Plage du premier octet 240[2^7+2^6+2^5]~255[2^8-1])
240.0.0.0~255.255.255.254 Comme adresse réservée ,255.255.255.255 Comme adresse de diffusion .
IP Différencier les ordinateurs ,Port Différencier les sockets .
Numéro de port,16Bits,0~655350
.0~1023
,Port bien connu(Well-known PORT).
TCPEtUDP La prise permet la duplication du numéro de port .
struct sockaddr_in {
sa_family_t sin_family;//Famille d'adresses(Address Family)
uint16_t sin_port;//16BitsTCP/UDPNuméro de port
struct in_addr sin_addr;//32BitsIPAdresse
char sin_zero[8];//Non utilisé
};
struct in_addr {
in_addr_t s_addr; //32BitsIPv4Adresse
};
(u)int8_t、(u)int16_t、(u)int32_t,sys/types.h
sa_family_t、socklen_t,sys/socket.h
in_addr_t(IPAdresse,uint32_t)、in_port_t(Numéro de port,uint16_t),netinet/in.h
structural sockaddr {
sa_family_t sin_family;//Famille d'adresses(Address Family)
char sa_data[14];//Adresse
};
Entier0x12345678,Haut de gamme0x12,Position la plus basse0x78.
Enregistrement de l'ordre des grandes extrémités :
0x20No. 0x21No. 0x22No. 0x23No.
0x12 0x34 0x56 0x78
Enregistrement des petits terminaux :
0x20No. 0x21No. 0x22No. 0x23No.
0x78 0x56 0x34 0x12
Ordre des octets hôtes(Host Byte Order),CPU Méthode d'enregistrement des données ,MainstreamIntelSérie etAMD La série adopte une petite séquence terminale .
Ordre des octets réseau(Network Byte Order), Convenir d'un mode uniforme de transmission des données sur le réseau ,Grande séquence terminale.
unsigned short htons(unsigned short);
unsigned short ntohs(unsigned short);
unsigned long htonl(unsigned long);
unsigned long ntohl(unsigned long);
hÇa veut direhost(Ordre des octets hôtes),nÇa veut direnetwork(Ordre des octets réseau),sÇa veut direshort,lÇa veut direlong.
htons,shortConversion des données de type de l'ordre des octets hôtes en ordre des octets réseau.
endian_conv.c
#include <stdio.h>
#include <arpa/inet.h>
int main(int argc, char *argv[]) {
unsigned short host_port = 0x1234;
unsigned short net_port;
unsigned long host_addr = 0x12345678;
unsigned long net_addr;
net_port = htons(host_port);
net_addr = htonl(host_addr);
printf("Host ordered port: %#x \n", host_port);
printf("Network ordered port: %#x \n", net_port);
printf("Host ordered address: %#lx \n", host_addr);
printf("Network ordered address: %#lx \n", net_addr);
return 0;
}
gcc endian_conv.c -o conv
./conv
Host ordered port: 0x1234
Network ordered port: 0x3412
Host ordered address:0x12345678
Network ordered address:0x78563412
#include <arpa/inet.h>
//Retour réussi32 Bit Big end Order Integer ,Échec retournéINADDR_NONE
in_addr_t inet_addr(const char *string);
inet_addr.c
#include <arpa/inet.h>
int main(int argc, char *argv[]) {
char *addr1="1.2.3.4";
char *addr2="1.2.3.256";
unsigned long conv_addr = inet_addr(addr1);
if(conv_addr==INDADDR_NONE)
printf("Error occured!\n");
else
printf("Network ordered integer addr: %#lx\n", conv_addr);
conv_addr = inet_addr(addr2);
if(conv_addr==INDADDR_NONE)
printf("Error occured!\n");
else
printf("Network ordered integer addr: %#lx\n", conv_addr);
return 0;
}
gcc inet_addr.c -o addr
./addr
//0x4030201
//Error occured!
#include <arpa/inet.h>
//Retour réussi1,Échec retourné0
int inet_aton(const char *string, struct in_addr *addr);
inet_aton.c
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
void error_handling(char *message);
int main(int argc, char *argv[]) {
char *addr1="127.232.124.79";
struct sockaddr_in addr_inet;
if(!inet_aton(addr, &addr_inet.sin_addr))
error_handling("Conversion error");
else
printf("Network ordered integer addr: %#lx\n", addr_inet.sin_addr.s_addr);
return 0;
}
void error_handling(char *message) {
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}
gcc inet_aton.c -o aton
./aton
//Network ordered integer addr: 0x4f7ce87f
//79 124 232 127
#include <arpa/inet.h>
// Valeur d'adresse de chaîne convertie retournée avec succès ( Copie en temps opportun ),Échec retournénull
char * inet_ntoa(struct in_addr adr);
inet_ntoa.c
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
int main(int argc, char *argv[]) {
struct sockaddr_in addr1, addr2;
char *str_ptr;
char str_arr[20];
addr1.sin_addr.s_addr=htonl(0x01020304);
addr2.sin_addr.s_addr=htonl(0x01010101);
str_ptr=inet_ntoa(addr1.sin_addr);
strcpy(str_arr, str_ptr);
printf("Dotted-Decimal notation1: %s\n", str_ptr);
inet_ntoa(addr2.sin_addr);
printf("Dotted-Decimal notation2: %s\n", str_ptr);
printf("Dotted-Decimal notation3: %s\n", str_arr);
return 0;
}
gcc inet_ntoa.c -o ntoa
./ntoa
//Dotted-Decimal notation1: 1.2.3.4
//Dotted-Decimal notation2: 1.1.1.1
//Dotted-Decimal notation3: 1.2.3.4
struct sockaddr_in addr;
char *serv_ip = "211.217.168.13";
char *serv_port = "9190";
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr(serv_ip);
addr.sin_port = htons(atoi(serv_port));
struct sockaddr_in addr;
char *serv_port = "9190";
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
//0.0.0.0,Acquisition automatiqueIPAdresse(Si plusieursIP, Surveillance simultanée )
addr.sin_addr.s_addr = inet_addr(INADDR_ANY);
addr.sin_port = htons(atoi(serv_port));
127.0.0.1,Adresse de retour(loopback address),L'ordinateur lui - mêmeIPAdresse.
endian_conv_win.c
#include <stdio.h>
#include <winsock2.h>
void ErrorHanding(char *message);
int main(int argc, char *argv[]) {
WSADATA wsaData;
unsigned short host_port = 0x1234;
unsigned short net_port;
unsigned long host_addr = 0x12345678;
unsigned long net_addr;
if(WSAStartup(MAKEWORD(2, 2), &wsaData)!=0)
ErrorHanding("WSAStartup() error!");
net_port = htons(host_port);
net_addr = htonl(host_addr);
printf("Host ordered port: %#x \n", host_port);
printf("Network ordered port: %#x \n", net_port);
printf("Host ordered address: %#lx \n", host_addr);
printf("Network ordered address: %#lx \n", net_addr);
WSACleanup();
return 0;
}
void ErrorHanding(char *message) {
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}
cl /EHsc endian_conv_win.c /Fe:endian_conv_win.exe /link ws2_32.lib
endian_conv_win
Host ordered port: 0x1234
Network ordered port: 0x3412
Host ordered address:0x12345678
Network ordered address:0x78563412
inet_adrconv_win.c
#include <stdio.h>
#include <string.h>
#include <winsock2.h>
void ErrorHanding(char *message);
int main(int argc, char *argv[]) {
WSADATA wsaData;
if(WSAStartup(MAKEWORD(2, 2), &wsaData)!=0)
ErrorHanding("WSAStartup() error!");
//inet_addr
{
char *addr="127.212.124.78";
unsigned long conv_addr = inet_addr(addr);
if(conv_addr==INDADDR_NONE)
printf("Error occured!\n");
else
printf("Network ordered integer addr: %#lx\n", conv_addr);
}
//inet_ntoa
{
struct sockaddr_in addr;
char *strPtr;
char strArr[20];
addr.sin_addr.s_addr=htonl(0x01020304);
strPtr=inet_ntoa(addr.sin_addr);
strcpy(strArr, strPtr);
printf("Dotted-Decimal notation: %s\n", strArr);
}
WSACleanup();
return 0;
}
void ErrorHanding(char *message) {
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}
cl /EHsc inet_adrconv_win.c /Fe:inet_adrconv_win.exe /link ws2_32.lib
inet_adrconv_win
//Network ordered integer addr: 0x4e7cd47f
//78 124 212 127
//Dotted-Decimal notation: 0x1.2.3.4
#include <winsock2.h>
//Succès0,ÉchecSOCKET_ERROR
INT WSAStringToAddress(LPTSTR AddressString, INT AddressFamily, LPWSAPROTOCOL_INFO lpProtocolInfo, LPSOCKADDR lpAddress, LPINT lpAddressLength);
#include <winsock2.h>
//Succès0,ÉchecSOCKET_ERROR
INT WSAStringToString(LPSOCKADDR lpsaAddress, DWORD dwAddressLength, LPWSAPROTOCOL_INFO lpProtocolInfo, LPSTR lpszAddressString, LPDWORD lpdwAddressStringLength);
conv_addr_win.c
#include <stdio.h>
#include <winsock2.h>
void ErrorHanding(char *message);
int main(int argc, char *argv[]) {
char *strAddr="203.211.218.102:9190";
char strAddrBuf[50];
SOCKADDR_IN servAddr;
int size;
WSADATA wsaData;
if(WSAStartup(MAKEWORD(2, 2), &wsaData)!=0)
ErrorHanding("WSAStartup() error!");
size=sizeof(servAddr);
WSAStringToAddress(strAddr, AF_INET, NULL, (SOCKADDR*)&servAddr, &size);
size=sizeof(strAddrBuf);
WSAStringToString((SOCKADDR*)&servAddr, sizeof(servAddr), NULL, strAddrBuf, &size);
printf("Second conv result: %s\n", strAddrBuf);
WSACleanup();
return 0;
}
void ErrorHanding(char *message) {
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}
cl /EHsc conv_addr_win.c /Fe:conv_addr_win.exe /link ws2_32.lib
conv_addr_win
//Second conv result: 203.211.218.102:9190
版权声明:本文为[Yxqq378287007]所创,转载请带上原文链接,感谢。 https://javamana.com/2022/01/202201080603388887.html