#include #include #include #include #include // Das ist der Code, den ich in der Tafeluebung zur Demonstration genutzt habe. // Auf der Kommandozeile habe ich `host twitch.tv` benutzt, um dort die // DNS-Eintraege fuer die Adresse zu sehen. // Dieser Code ist nicht gerade toll: Fehlerbehandlungen fehlen, die Bit-Magie // (mit a/b/c/d unten) ist nicht gerade schoen, etc. Also bitte nicht zu viel // hiervon abschauen. :) int main() { struct addrinfo hints = { .ai_flags = AI_ADDRCONFIG, .ai_family = AF_INET, // ipv4 only .ai_socktype = SOCK_STREAM, }; struct addrinfo *result; getaddrinfo("twitch.tv", "80", &hints, &result); int n = 0; for (struct addrinfo *info = result; info != NULL; info = info->ai_next) { struct sockaddr_in *in4 = (struct sockaddr_in *)info->ai_addr; int full = in4->sin_addr.s_addr; uint8_t a = full >> 0 & 0xff; uint8_t b = full >> 8 & 0xff; uint8_t c = full >> 16 & 0xff; uint8_t d = full >> 24 & 0xff; printf("address #%d: %d.%d.%d.%d\n", n++, a, b, c, d); int sock = socket(info->ai_family, info->ai_socktype, info->ai_protocol); if (sock == -1) { perror("socket"); continue; } if (connect(sock, info->ai_addr, info->ai_addrlen) == 0) { printf("connection successful\n"); } close(sock); } printf("number of found addresses: %d\n", n); freeaddrinfo(result); }