[SOLVED]Problem z zamiana: ip->domena

0

Witamm

Mam problem z zamienieniem adresu ip na adres strony, juz nie mam pomyslow, jakby ktos bardziej doswiadczony moglby mi pomoc bylbym wdzieczny :)
Caly czas jest zwracany pusty wskaznik, jak i przy fragmencie zakomentowanym jak i odkomentowanym.

unsigned int adres = inet_addr( nazwa.c_str() );
host = gethostbyaddr( (char*)&adres, 4, AF_INET );

/*in_addr adres;
inet_ntop( AF_INET, nazwa.c_str(), &adres );
host = gethostbyaddr( &adres, sizeof( adres ), AF_INET );*/

if( !host ) return 0;

std::cout << "Adres to: " << host->h_name << '\n';
std::cout << "IP to: " << nazwa2 << '\n'; 
0

Co to jest nazwa? To ma być adres IP, a nie FQDN.

0

nazwa jest to std::string, ktora zamieniam na char*.

0

Pytałem o zawartość, a nie o typ.
Czy poniższy kod Ci działa? Jeśli nie, to co masz na wyjściu:

#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>


int main(void) {
        unsigned int	ip_addr;
        struct hostent	*host;


        if ( (ip_addr = inet_addr("127.0.0.1")) == -1 ) {
                fprintf(stderr, "The IP address is fucked up\n");
                return 1;
        };

        host = gethostbyaddr((char *)&ip_addr, 4, AF_INET);

        if ( host == NULL ) {
                fprintf(stderr, "Name not found\n");
                return 2;
        };

        fprintf(stdout, "Host name: %s\n", host->h_name);
        return 0;
};
0

Powyzszy kod mi nie dziala, tzn na wyjsciu zadnek komunikat mi sie nie pokazuje.

0
bartek4833 napisał(a)

Powyzszy kod mi nie dziala, tzn na wyjsciu zadnek komunikat mi sie nie pokazuje.

Jak sobie przeanalizujesz powyższy kod zauważysz, że nie ma możliwości żeby ten program nic nie wypisał. Zakładając, że nic w nim nie zmieniałeś, powinien wywalić błąd albo zresolwowaną nazwę. Zatem albo masz coś pochrzanione w swoim środowisku, albo coś źle zrobiłeś.
Po kolei:

  • kompilujesz go tak (zakładamy, że zapisałeś go pod nazwą test.c):

    gcc -o test test.c

  • odpalasz:

    ./test

Jeśli nadal nie masz żadnego wyjścia, to możesz jeszcze spróbować sprawdzić jaki był kod błędu (echo $?), przepuścić go przez strace itp.
Może dla pewności nie używaj do kompilacji i uruchomienia tej binarki żadnego IDE.
Jeśli po zrobieniu wszystkiego powyżej nadal nic nie jest wypisywane na konsoli, to raczej Ci nie pomożemy. Napraw sobie środowisko.

0

Moje srodowisko nie wymaga naprawienia. Odpalalem go z: _getch i przez konsole, i zadna informacja mi sie nie wyswietlila, wiec nie wiem co jest grane.

0

Nie mam linuxa, i nie pisze w czystym C, chcialem to napisac w c++. Wiec nie mam jak wywolac tej komendy. :(

Nawet wzialem przyklad z msdn-a:

in_addr ad;
ad.S_un.S_addr = inet_addr( nazwa.c_str() );
host = gethostbyaddr( (char*) &ad, 4, AF_INET ); 

i tez nie chce dzialac.

PS: PROBLEM ROZWIAZANY, DZIALA :):)
Dzieki za podpowiedzi :)

0

No to napisz co było, bo ja nie mam pojęcia dlaczego Ci to nie działało, a ktoś kto ma podobny problem może skorzystać z rozwiązania.

0

Jednak metoda w pierwszym poscie byla dobra, czyli:

unsigned int adres = inet_addr( nazwa.c_str() );
host = gethostbyaddr( (char*)&adres, 4, AF_INET ); 

Zmylilo mnie to ze po wpisaniu ip pewnej domeny program mi sie wysypywal (choc do teraz nie wiem dlaczego), i wlasnie pare dni temu sprawdzilem dla localhosta i zadzialalo jak i dla paru sprawdzonych domen, troche pospieszylem sie z tym postem :)

0

Po wywołaniu gethostbyaddr() sprawdź zawartość zmiennej h_errno (globalna). Powinna tam być informacja o przyczynie. Mimo wszystko, program nie powinien się wysypać przy prawidłowej obsłudze błędów.

0

@up wygodniej użyć funkcji perror() która wypisze po ludzku ten błąd ;)

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