Serwer HTTP - interfejs sieciowy

0

Witam serdecznie wszystkich użytkowników forum.
Problem na który napotkałem podczas mojej zabawy z programowaniem sieciowym związany jest z wyborem konkretnego interfejsu sieciowego dla serwera http. Mianowicie chciałbym aby serwer nasłuchiwał zarówno na wybranym przeze mnie porcie(z tym oczywiście nie mam problemu), jak i na wybranym interfejsie sieciowym(np. tylko wlan0). I mam problem ze znalezieniem jakichkolwiek informacji jak to zrealizować. Programuję pod linuxem, i korzystam między innym z wiedzy zawartej na stronie
http://www.asawicki.info/Mirror/Beej_s%20Guide%20to%20Network%20Programming%20PL/html/index.html
Jeśli ktoś byłby w stanie mi pomóc, ewentualnie naprowadzić na trop, byłbym bardzo wdzięczny.

Pozdrawiam.

1

Musisz najpierw wyciągnąć adres IP danego interfejsu. Zrobisz to np. tak:

#include <arpa/inet.h>
#include <net/if.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>

int main(void)  {
    struct ifreq    iface;
    int             sock;
    char            ip[16];


    if ( (sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0 ) {
        perror("socket()");
        return 1;
    };

    strncpy(iface.ifr_name, "eth0", 15);
    if ( ioctl(sock, SIOCGIFADDR, &iface) < 0 ) {
        close(sock);
        perror("ioctl()");
        return 2;
    };

    close(sock);

    strncpy(ip, inet_ntoa(((struct sockaddr_in*)&iface.ifr_addr)->sin_addr), 15);
    fprintf(stdout, "IP: %s\n", ip);
    return 0;
}
0

Dziękuję bardzo!

0

Na Twoim miejscu byłbym jednak ostrożny. Zapewne chcesz się podpiąć pod wlan0, który jest konfigurowany dynamicznie przez DHCP, więc użycie nazwy interfejsu zamiast IP jest uzasadnione. Pamiętaj jednak, że w takiej konfiguracji adres IP może się zmienić w dowolnej chwili (np. rekonfiguracja podsieci, albo serwer DHCP bez stałych/statycznych dzierżaw). Musisz być na to przygotowany, gdyż jeśli dostaniesz inny adres IP, Twoja aplikacja przestanie działać (prawidłowo). Rekonfiguracja interfejsu może nastąpić nawet w trakcie transmisji, gdyż DHCP nie czeka aż wszystkie połączenia się zakończą.
Ogólnie, nie powinno się wieszać aplikacji serwerowych na dynamicznie konfigurowanych interfejsach. Skoro to jest Linux, to można spróbować zaradzić temu stawiając przekierowanie portów z wlan0 na lo i powiesić serwer na 127.0.0.1, ale nigdy takiej rzeźby nie robiłem więc nie wiem jak się to sprawdzi. Teoretycznie powinno działać bez większych problemów.

1 użytkowników online, w tym zalogowanych: 0, gości: 1