Ich habe Programm geschrieben das den aufgelösten Namen einer IPv4 Adresse ausgibt. Eigentlich wäre dieser Quellcode umfangreicher, aber für Neulinge die in der Socket Programmierung Fussfassen möchten eher ungeeignet. Weshalb ich kurz zwei abgespeckte Versionen davon programmiert habe. Der erste Quellcode beinhaltet nur die notwendigsten Funktionen die man für eine solche Aufgabe benötigt, der zweite Quellcode verfügt über eine Schleife in der man die IPv4 eingeben kann, worauf dieser auf die Gültigkeit geprüft wird bevor die Namensauflösung stattfindet.
Viel Spass!
C
#include <winsock2.h>
#include <WS2tcpip.h>
#include <iostream>
#pragma comment(lib, "Ws2_32.lib")
int main()
{
WSADATA wsaData;
struct addrinfo* result = NULL;
char hostname[512];
WSAStartup(MAKEWORD(2, 2), &wsaData);
getaddrinfo("8.8.8.8", 0, 0, &result);
getnameinfo(result->ai_addr, result->ai_addrlen, hostname, sizeof(hostname), 0, 0, 0);
std::cout << "> " << hostname << "\n" << std::endl;
return 0;
}
Alles anzeigen
C
#include <winsock2.h>
#include <WS2tcpip.h>
#include <iostream>
#include <string>
#pragma comment(lib, "Ws2_32.lib")
bool checkString(const std::string& str)
{
return str.find_first_not_of(".0123456789") == std::string::npos;
}
int main()
{
WSADATA wsaData;
struct addrinfo* result = NULL;
WSAStartup(MAKEWORD(2, 2), &wsaData);
char hostname[512];
std::string input;
while (true)
{
std::cout << "> IPv4: ";
std::getline(std::cin, input);
if (checkString(input))
{
if (getaddrinfo(input.c_str(), 0, 0, &result) == 0)
{
getnameinfo(result->ai_addr, result->ai_addrlen, hostname, sizeof(hostname), 0, 0, 0);
std::cout << "> " << hostname << "\n" << std::endl;
}
else
{
std::cout << "> Ung\201ltige IPv4 Adresse!\n" << std::endl;
continue;
}
}
else
{
std::cout << "> Ung\201ltige IPv4 Adresse!\n" << std::endl;
continue;
}
}
return 0;
}
Alles anzeigen