GNU/Linux >> Tutoriels Linux >  >> Linux

'inet_pton' :identifiant introuvable

Sous Windows XP (et versions ultérieures), vous pouvez utiliser ces fonctions :

#include <stdlib.h>
#include <string.h>
#include <stdio.h>    

#include <winsock2.h>
#include <ws2tcpip.h>


int inet_pton(int af, const char *src, void *dst)
{
  struct sockaddr_storage ss;
  int size = sizeof(ss);
  char src_copy[INET6_ADDRSTRLEN+1];

  ZeroMemory(&ss, sizeof(ss));
  /* stupid non-const API */
  strncpy (src_copy, src, INET6_ADDRSTRLEN+1);
  src_copy[INET6_ADDRSTRLEN] = 0;

  if (WSAStringToAddress(src_copy, af, NULL, (struct sockaddr *)&ss, &size) == 0) {
    switch(af) {
      case AF_INET:
    *(struct in_addr *)dst = ((struct sockaddr_in *)&ss)->sin_addr;
    return 1;
      case AF_INET6:
    *(struct in6_addr *)dst = ((struct sockaddr_in6 *)&ss)->sin6_addr;
    return 1;
    }
  }
  return 0;
}

const char *inet_ntop(int af, const void *src, char *dst, socklen_t size)
{
  struct sockaddr_storage ss;
  unsigned long s = size;

  ZeroMemory(&ss, sizeof(ss));
  ss.ss_family = af;

  switch(af) {
    case AF_INET:
      ((struct sockaddr_in *)&ss)->sin_addr = *(struct in_addr *)src;
      break;
    case AF_INET6:
      ((struct sockaddr_in6 *)&ss)->sin6_addr = *(struct in6_addr *)src;
      break;
    default:
      return NULL;
  }
  /* cannot direclty use &size because of strict aliasing rules */
  return (WSAAddressToString((struct sockaddr *)&ss, sizeof(ss), NULL, dst, &s) == 0)?
          dst : NULL;
}

Lien avec la bibliothèque ws2_32.


la fonction

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

est déclaré dans le fichier d'en-tête :

#include <arpa/inet.h>

s'il s'agit de Windows (Vista ou version ultérieure), Winsock est analogue à cette version ANSI :

INT WSAAPI InetPton(
  _In_   INT  Family,
  _In_   PCTSTR pszAddrString,
  _Out_  PVOID pAddrBuf
);

essayez #include <Ws2tcpip.h> ajouter Ws2_32.lib


Les utilisateurs de Windows peuvent également trouver la réponse ici :

https://docs.microsoft.com/en-us/windows/desktop/api/ws2tcpip/nf-ws2tcpip-inetptonw

Le InetPton convertit une adresse réseau Internet IPv4 ou IPv6 sous sa forme de présentation textuelle standard en sa forme numérique binaire. La version ANSI de cette fonction est inet_pton .

Le InetPton la fonction est prise en charge sur Windows Vista et versions ultérieures.

Quand UNICODE ou _UNICODE n'est pas défini, InetPton est défini sur InetPtonA , la version ANSI de cette fonction. La version ANSI de cette fonction est toujours définie comme inet_pton .

Header      ws2tcpip.h
Library     Ws2_32.lib
DLL         Ws2_32.dll

Vous devez utiliser le ws2tcpip.h en-tête et ajoutez Ws2_32.lib à votre éditeur de liens.


Dans mon cas, la fonction n'a pas pu être trouvée, car il y avait un "#define WINVER 0x0502" quelque part dans un fichier d'en-tête.

Sur les systèmes Windows, la version 0x600 (=Vista) est au minimum requise pour cette fonction.


Linux
  1. gestionnaire d'abonnement :commande introuvable

  2. dnf :commande introuvable

  3. bc :commande introuvable

  4. dpkg :commande introuvable

  5. netstat :commande introuvable

Pas trouvé

ifrename :commande introuvable

nc :commande introuvable

aws-shell :commande introuvable

mv :commande introuvable

ln :commande introuvable