komenda sprawdzająca ip strony www

0

Więc jestem bardzo początkujący w programowaniu w C++ i piszę mały program omijający blokady takie jak np. cenzor. Każdy wie że wystarczy wejść w CMD wpisać ping adres strony i skopiować ip do przeglądarki, ale ja piszę program który odwali za nas tą całą zabawę. I tu pojawia się problem ponieważ nie wiem jaka jest komenda na sprawdzenie ip strony. program piszę w programie dev c++. a tu moja dotychczasowa praca:

 

#include <cstdlib>
#include <iostream>


using namespace std;

int main()
{
    
    
    
  cout << "wpisz adres strony:" ;
   cin >> www ; // www to np. google.pl
   ?????????????????????????????????????????????? // tu powinien być kod na określenie ip strony www
   cout << endl << ip ; // ip wyświetlało by ip strony :)
   

}
 
0

Szczerze nie wydaję mi się to łatwe..
spingować możesz przez funkcje system("ping wp.pl");
ale nie mam pojęcia jak cokolwiek z tego wyciągnąć.

0

W unixie takie zadanie wykonałbym na potoku w windows nie wiem, jednak gdybym ja miał taki problem poszedłbym na łatwiznę i przekierował wyjście ping do jakiegoś pliku i potem spod c++ parsował co chcę. Nie jest to może eleganckie ale na pewno proste :) Chyba, że zabawa socketami.

0

Też tak myślałem, ale funkcja system zwraca 0 a nie to co wypisuję na konsoli,,
Nie wiem jak zapisać w takiej sytuacji wyniki do pliku..

0

no prosza cie ! system("ping google.pl > test.txt")

0

http://is.gd/jVzuJ nie starczy? Po co uruchamiać zewnętrzny proces?

0

no i po problemie :)

0
sid90 napisał(a)

http://www.cplusplus.com/forum/articles/9742/
właziłem na tą stronkę i nie mogę się połapać w tym skrypcie za bardzo :(

0

bo to nie jest kod po windowsa. Skorzystaj z winapi jak to już zaproponowano.

0

Ten parser byłby łatwy.. napisałem to, ale on tak "wygląda", że wstyd to na forum wrzucić:)
@szymongod1996 jak chcesz to na maila CI wyśle..

0
sid90 napisał(a)

Ten parser byłby łatwy.. napisałem to, ale on tak "wygląda", że wstyd to na forum wrzucić:)
@szymongod1996 jak chcesz to na maila CI wyśle..

wrzucaj na forum może sie komuś to jeszcze przyda :)

0

Nie przyda się:)
Wyślij maila na priva:)

0

dzięki sid90 :) trochę posiedzę nad tym skryptem to może jeszcze coś wykombinuję. pozdro :)

0
#include <winsock2.h>
#include <ws2tcpip.h>
#include <windows.h>
#include <string>
#include <iostream>
#include <fstream>
#pragma comment(lib, "ws2_32.lib")
using namespace std;
int main()
{
    
    WSADATA wsaData;
    int iResult;
    DWORD dwError;
    int i = 0;
    struct hostent *remoteHost;
    string host_name;
    cout<<"Enter host name\n:";
    cin>>host_name;
    struct in_addr addr;
    char **pAlias;
    iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if (iResult != 0) 
	{
        cout<<"WSAStartup failed: "<< iResult<<"\n";
        return 1;
    }
    cout<<"Calling gethostbyname with "<<host_name<<endl;
    remoteHost = gethostbyname(host_name.c_str());
    if (remoteHost == NULL) 
	{
        dwError = WSAGetLastError();
        if (dwError != 0) 
		{
            if (dwError == WSAHOST_NOT_FOUND) 
			{
                cout<<"Host not found\n";
                return 1;
            } 
			else if (dwError == WSANO_DATA) 
			{
               cout<<"No data record found\n";
                return 1;
            } 
			else 
			{
                cout<<"Function failed with error: "<<dwError<<"\n";
                return 1;
            }
        }
    } 
	else 
	{
        cout<<"Function returned:\n";
        cout<<"\tOfficial name:"<<remoteHost->h_name<<endl;
        for (pAlias = remoteHost->h_aliases; *pAlias != 0; pAlias++) 
            cout<<"\tAlternate name "<< ++i<< *pAlias<<"\n";
        cout<<"\tAddress type: ";
        switch (remoteHost->h_addrtype) 
		{
        case AF_INET:
            cout<<"AF_INET\n";
            break;
        case AF_NETBIOS:
            cout<<"AF_NETBIOS\n";
            break;
        default:
            cout<<"\n", remoteHost->h_addrtype;
            break;
        }
        cout<<"\tAddress length: "<<remoteHost->h_length<<"\n";
        i = 0;
        if (remoteHost->h_addrtype == AF_INET)
        {
			fstream save("ip.txt");
            while (remoteHost->h_addr_list[i] != 0) 
			{
                addr.s_addr = *(u_long *) remoteHost->h_addr_list[i++];
				cout<<"\tIP Address "<<i<<" : "<< inet_ntoa(addr)<<"\n";
				save<<inet_ntoa(addr)<<"\n";
            }
			save.close();
        }
        else if (remoteHost->h_addrtype == AF_NETBIOS)
            cout<<"NETBIOS address was returned\n"<<endl;  
    }
	
    return 0;
}

Z pozdrowieniami dla Rev.pl

0

Sid90: Brawo. Jesteś coraz lepszy w szukaniu kodów źródłowych w Google.

Wypadałoby jeszcze na koniec korzystania z Winsock, posprzątać po nim (wywołanie WSACleanup), tj. wyładować bibliotekę i zwolnić zasoby, które zostały przydzielone na potrzeby wywołań Winsock w aplikacji. Jeżeli jedyne, co ten program będzie robić to rozwiązywanie hosta do ip, to i obejdzie się bez tego, Winsock sam się wyładuje przy zamknięciu aplikacji. Jeżeli teraz bądź w przyszłości będziesz tworzyć aplikację, która będzie działać trochę dłużej i nie będzie musiała korzystać cały czas z Winsock, to wypadałoby ją wyładować samemu.

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