Função PTON INET na linguagem C

Função PTON INET na linguagem C

As funções do soquete usam estruturas em seus argumentos de entrada que contêm dados específicos do cliente e do servidor. A informação mais importante nessas estruturas é sem dúvida os endereços IP.

Existem vários tipos de estruturas que são usadas por funções de soquete para armazenar esses endereços. Por exemplo: Sockaddr, Addrinfo ou In_addr, etc.

Independentemente do tipo de estrutura em que são armazenados, os endereços IP não são codificados, o que significa que cada um dos números em seus campos é representado por seu equivalente binário. Isso significa que, em certos casos, é necessário converter os endereços IP em strings ou strings em endereços IP para trabalhar com eles.

Nisso Linux Dica Artigo, você aprenderá como converter as cordas em endereços IP usando o INT_PTON () função.

Veremos a sintaxe desta função e uma descrição teórica de como ela funciona, os argumentos de entrada e saída e o tipo de dados em cada um deles.

Em seguida, aplicamos o que aprendemos em exemplos práticos que incluem trechos de código e imagens que mostram como a função INET_PTON () na linguagem C converte as strings em endereços IP.

Sintaxe da função inet_pton () na linguagem C

int inet_pton (int af, const char *src, void *dst);

Descrição da função INET_PTON () na linguagem C

O INT_PTON () função converte a string que é referenciada em src para um endereço de rede da família que é especificado em AF. O resultado desse processo é um endereço no formato binário direto, retornado na estrutura que é apontada por dest.

Esta função aceita endereços IPv4 e IPv6 e é muito útil quando queremos criar os aplicativos de conexão em redes locais, onde conhecemos o endereço IP ao qual queremos conectar.

INT_PTON () é complementar à função inet_ntop () e executa uma conversão reversa.

Em seguida, analisamos os argumentos de entrada desta função em detalhes:

AF: Esta entrada especifica a família de endereços a ser convertida.

AF_INET converte a string em um endereço da família IPv4.

AF_INET6 converte a string em um endereço da família IPv6.

SRC: A string ou ponteiro para ela que especifica o endereço no formato de texto.

dest: O ponteiro para a estrutura onde armazenar o endereço em formato binário direto. Essas estruturas podem ser do tipo Sockaddr, Sockaddr_in, Sockaddr_in6, etc.

Se a conversão for bem -sucedida, esta função retornará 1. Se ocorrer um erro, ele retorna 0. O código de erro pode ser consultado no errno variável global.

O INT_PTON () A função é definida no “INET.h ”cabeçalho e é um de uma série de“.Arquivos H ”que definem as funções de conexão e são armazenados na pasta“ ARPA ”. Para usar esta função, devemos incluí -la em nosso arquivo C da seguinte forma:

#incluir

Como converter uma string em um endereço IP usando a função inet_pton () na linguagem C

No exemplo seguinte, convertemos o amortecedor string em um endereço e armazená -lo em uma estrutura de Sockaddr_in tipo cujo ponteiro é addr_in. Para fazer isso, atribuímos o “192.168.1.1 ” endereço para a string buffer e declare a estrutura addr_in e seu ponteiro.

Então, do se condicional, chamamos de INT_PTON () e passar na família de endereços como argumentos de entrada AF, que neste caso é AF _inet. Passamos no endereço que é armazenado no amortecedor Como o segundo argumento em formato de string. Finalmente, passamos o endereço do addr_in Ponteiro da estrutura em que armazenamos o endereço em formato binário.

Se ocorrer um erro durante a conversão, o programa entrará no se condicional e exibe a seguinte mensagem: "Erro de conversão".

Se INT_PTON () Não retorna um erro, verificamos o endereço armazenado na estrutura addr_in e usamos a função INET_ntop () complementar para convertê -la novamente em uma string e emitá -la para o shell com printf ().

A seguir, o código que executa a conversão com INT_PTON (). Em seguida, ele converte o endereço de volta em uma string e imprime o resultado para o console de comando:

#incluir
#incluir
#incluir
#incluir
int main ()

Buffer de char [inet_addrstrlen] = "192.168.1.1 ";
struct sockaddr_in *addr_in;
//conversão
if (inet_pton (af_inet, buffer, & addr_in) == 0)
printf ("erro de conversão");
retornar 1;
// Verifique o endereço armazenado
Memset (& Buffer, '\ 0', sizeof (buffer));
inet_ntop (af_inet, & addr_in, buffer, inet_addrstrlen);
printf ("Endereço IP: %s \ n \ n", buffer);

A imagem a seguir mostra a compilação e execução deste código:

A figura a seguir mostra o resultado do envio de uma string com um formato de endereço inválido. Nesse caso, o INT_PTON () retorna 0 e o fluxo do programa entra na condição if onde uma mensagem de erro é exibida.

Como converter uma string em um endereço IPv6 usando a função INET_PTON () na linguagem C

Para converter uma string em um endereço da família IPv6, o código do exemplo anterior pode ser usado. Só precisamos usar as estruturas e buffers com os tamanhos compatíveis com este tipo de endereço e definir a família AF _INET6 para AF entrada.

Nesse caso, o tamanho do buffer deve ser inet6_addrstrlen e a estrutura de destino deve ser do tipo Sockaddr_in6. Aqui está o código modificado para converter as strings em endereços IPv6:

#incluir
#incluir
#incluir
#incluir
int main ()

Buffer de char [INET6_ADDRSTLEN] = "FD10: 1AFF: 48CA: B5F4: 0: 0: 0: 0";
struct sockaddr_in6 *addr_in;
//conversão
if (inet_pton (af_inet6, buffer, & addr_in) == 0)
printf ("erro de conversão");
retornar 1;
// Verifique o endereço armazenado
Memset (& Buffer, '\ 0', sizeof (buffer));
inet_ntop (af_inet6, & addr_in, buffer, inet6_addrstrlen);
printf ("\ n \ nip endereço: %s \ n \ n", buffer);

A imagem a seguir mostra a compilação e a execução deste código que converte uma string em um endereço IPv6:

Conclusão

Nisso Linux dicas Artigo, explicamos como converter o formato da string em endereços IP em binário direto usando o INT_PTON () função.

Vimos uma descrição teórica dessa função, seus argumentos de entrada e o tipo de dados que cada um processa. Em seguida, implementamos essa função em exemplos práticos que mostram como converter seqüências de caracteres em endereços IP armazenados em estruturas de tipo Sockaddr_in que são mais frequentemente usadas para estabelecer as conexões.

Esperamos que você tenha achado este artigo útil. Inscreva -se em nosso site e use nosso mecanismo de pesquisa para obter mais artigos C e dicas de Linux.