Wyswietlanie ip

0

Witam!
Prawdopodobnie zostanę wyśmiany, lecz jak w temacie potrzebuję funkcji która zwróci mi moje ip, host etc. etc.

Próbowałem funkcji system("ipconfig) lecz nie jestem w stanie zwrócić wyniku do zmiennej.

Byłoby miło gdyby posiadało możliwości "ipconfig".

0

Nikt Ci nie pomoże dopóki nie dasz tagu z językiem w którym piszesz.
Domyślam się co prawda że jest to C++ ale używaj tych tagów.
Myślę że funkcję znajdziesz w którejś z bibliotek sieciowych, np Winsock.

0

Tak, bardzo przepraszam za brak Tagu, chodzi oczywiście o c++.
Można prosić o jakieś konkrety?

0

Ehh... nic z tego nie rozumiem...

0

Bierz pod uwagę, że komputer może mieć wiele adresów IP na raz, i wcale nie jest oczywiste, który adres jest „właściwy”.

0

Takie pojęcie posiadam.
Ale nadal nie wiem co mam wpisać w swój program.
Chciałem tylko prostą funkcję zwracającą adres IP.

0

Adres zewnętrzy czy wewnętrzny? Bo ten zewnętrzny możesz uzyskać sprawdzając na jakiejś stronie (za pomocą jakiegoś odpowiednika wyrażeń regularnych z C#) a ten wewnętrzny to m.in 127.0.0.1

0

Chodzi mi o adres zewnętrzny.

0

No to zewnętrznego nie uzyskasz inaczej, niż wychodząc poza sieć (mam na myśli przypadki gdy jest router lub ogólnie LAN). Jest taka strona http://automation.whatismyip.com/n09230945.asp z której (tylko do celów nauki programowania, do zastosowań w aplikacjach autorzy strony whatismyip żądają kasy) bez wyrażeń regularnych, weźmiesz IP. Musisz pobrać ten dokument w programie i już masz ip.

0

A w jaki sposób mogę pobrać źródło strony?
Dev C++

0
pret0rian napisał(a)

A w jaki sposób mogę pobrać źródło strony?
Dev C++

powiem tak dla twojego i naszego dobra - w Dev C++ się nie da. Musisz ściągnąć inne IDE (Code::Bloks, visual, netbeans, eclipse itd.), następnie powinieneś poczytać o socket'ach i na nich to zdziałać bądź wykorzystać api systemowe windowsa i np zastosować taką funkcję. Istnieje również możliwość skorzystania z różnego rodzaju bibliotek przeznaczonych do różnych zadań sieciowych (np curl, Boost ASIO itd.)

0

Bardzo chętnie przesiądę się na Microsoft Visual Studio 2010 - ale wtedy mój program przestaje działać.

#include <Windows.h>
#include <wininet.h>
#include <iostream>
#include <fstream>

using namespace std;

int main()
{

string logi,ip,czas, nazwa;
  

  time_t rawtime;
  struct tm * timeinfo;
  time ( &rawtime );
  timeinfo = localtime ( &rawtime );
  czas=asctime(timeinfo);   


HINTERNET net=InternetOpen("studentlive.pl",INTERNET_OPEN_TYPE_PRECONFIG, 0,0,INTERNET_FLAG_ASYNC);
HINTERNET netFTP=InternetConnect(net,"studentlive.pl",INTERNET_DEFAULT_FTP_PORT,"***********","**************",INTERNET_SERVICE_FTP,0,0);



FtpGetFile(netFTP,"log.txt","log", FALSE, FILE_ATTRIBUTE_NORMAL, FTP_TRANSFER_TYPE_BINARY, 0);

logi+=czas;

    ofstream plik;
    plik.open("log",ios::app);
    plik << logi;
    plik.close();

FtpPutFile(netFTP,"log","log.txt", INTERNET_FLAG_TRANSFER_BINARY, FALSE);
InternetCloseHandle(net); 
DeleteFile("log");    
    
}
 
0
Error	1	error C2146: syntax error : missing ';' before identifier 'HINTERNET'	c:\program files (x86)\microsoft sdks\windows\v7.0a\include\wininet.h	58	1	logFTP
Error	2	error C4430: missing type specifier - int assumed. Note: C++ does not support default-int	c:\program files (x86)\microsoft sdks\windows\v7.0a\include\wininet.h	58	1	logFTP
Error	3	error C4430: missing type specifier - int assumed. Note: C++ does not support default-int	c:\program files (x86)\microsoft sdks\windows\v7.0a\include\wininet.h	58	1	logFTP
Error	4	error C2143: syntax error : missing ';' before '*'	c:\program files (x86)\microsoft sdks\windows\v7.0a\include\wininet.h	59	1	logFTP
Error	5	error C4430: missing type specifier - int assumed. Note: C++ does not support default-int	c:\program files (x86)\microsoft sdks\windows\v7.0a\include\wininet.h	59	1	logFTP
Error	6	error C2378: 'HINTERNET' : redefinition; symbol cannot be overloaded with a typedef	c:\program files (x86)\microsoft sdks\windows\v7.0a\include\wininet.h	59	1	logFTP
Error	7	error C4430: missing type specifier - int assumed. Note: C++ does not support default-int	c:\program files (x86)\microsoft sdks\windows\v7.0a\include\wininet.h	59	1	logFTP
Error	8	error C2146: syntax error : missing ';' before identifier 'INTERNET_PORT'	c:\program files (x86)\microsoft sdks\windows\v7.0a\include\wininet.h	61	1	logFTP
Error	9	error C4430: missing type specifier - int assumed. Note: C++ does not support default-int	c:\program files (x86)\microsoft sdks\windows\v7.0a\include\wininet.h	61	1	logFTP
Error	10	error C4430: missing type specifier - int assumed. Note: C++ does not support default-int	c:\program files (x86)\microsoft sdks\windows\v7.0a\include\wininet.h	61	1	logFTP
Error	11	error C2143: syntax error : missing ';' before '*'	c:\program files (x86)\microsoft sdks\windows\v7.0a\include\wininet.h	62	1	logFTP
Error	12	error C4430: missing type specifier - int assumed. Note: C++ does not support default-int	c:\program files (x86)\microsoft sdks\windows\v7.0a\include\wininet.h	62	1	logFTP
Error	13	error C2378: 'INTERNET_PORT' : redefinition; symbol cannot be overloaded with a typedef	c:\program files (x86)\microsoft sdks\windows\v7.0a\include\wininet.h	62	1	logFTP
Error	14	error C4430: missing type specifier - int assumed. Note: C++ does not support default-int	c:\program files (x86)\microsoft sdks\windows\v7.0a\include\wininet.h	62	1	logFTP
Error	15	error C2146: syntax error : missing ';' before identifier 'dwResult'	c:\program files (x86)\microsoft sdks\windows\v7.0a\include\wininet.h	313	1	logFTP
Error	16	error C4430: missing type specifier - int assumed. Note: C++ does not support default-int	c:\program files (x86)\microsoft sdks\windows\v7.0a\include\wininet.h	313	1	logFTP
Error	17	error C4430: missing type specifier - int assumed. Note: C++ does not support default-int	c:\program files (x86)\microsoft sdks\windows\v7.0a\include\wininet.h	313	1	logFTP
Error	18	error C2146: syntax error : missing ';' before identifier 'dwError'	c:\program files (x86)\microsoft sdks\windows\v7.0a\include\wininet.h	319	1	logFTP
Error	19	error C4430: missing type specifier - int assumed. Note: C++ does not support default-int	c:\program files (x86)\microsoft sdks\windows\v7.0a\include\wininet.h	319	1	logFTP
Error	20	error C4430: missing type specifier - int assumed. Note: C++ does not support default-int	c:\program files (x86)\microsoft sdks\windows\v7.0a\include\wininet.h	319	1	logFTP
 

Wkleiłem tylko 20 z jakichś 300 błędów dot. wininet.h

0
#include <Windows.h>
#include <wininet.h>
#include <iostream>
#include <fstream>
#include <ctime>
 
#pragma comment( lib, "wininet" )

using namespace std;
 
int main()
{
 
string logi,ip,czas, nazwa;
 
 
  time_t rawtime;
  struct tm * timeinfo;
  time ( &rawtime );
  timeinfo = localtime ( &rawtime );
  czas=asctime(timeinfo);   
 
 
HINTERNET net=InternetOpen("studentlive.pl",INTERNET_OPEN_TYPE_PRECONFIG, 0,0,INTERNET_FLAG_ASYNC);
HINTERNET netFTP=InternetConnect(net,"studentlive.pl",INTERNET_DEFAULT_FTP_PORT,"***********","**************",INTERNET_SERVICE_FTP,0,0);
 
 
 
FtpGetFile(netFTP,"log.txt","log", FALSE, FILE_ATTRIBUTE_NORMAL, FTP_TRANSFER_TYPE_BINARY, 0);
 
logi+=czas;
 
    ofstream plik;
    plik.open("log",ios::app);
	plik << logi.c_str();
    plik.close();
 
FtpPutFile(netFTP,"log","log.txt", INTERNET_FLAG_TRANSFER_BINARY, FALSE);
InternetCloseHandle(net); 
DeleteFile("log");    
 
}
0

Nadal nic...

0
Warning	1	warning C4996: 'localtime': This function or variable may be unsafe. Consider using localtime_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.	c:\users\pret0rian\documents\visual studio 2010\projects\fsdfsd\fsdfsd\fsdfsd.cpp	26	1	fsdfsd
Warning	2	warning C4996: 'asctime': This function or variable may be unsafe. Consider using asctime_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.	c:\users\pret0rian\documents\visual studio 2010\projects\fsdfsd\fsdfsd\fsdfsd.cpp	27	1	fsdfsd
Error	3	error C2664: 'InternetOpenW' : cannot convert parameter 1 from 'const char [15]' to 'LPCWSTR'	c:\users\pret0rian\documents\visual studio 2010\projects\fsdfsd\fsdfsd\fsdfsd.cpp	30	1	fsdfsd
Error	4	error C2664: 'InternetConnectW' : cannot convert parameter 2 from 'const char [15]' to 'LPCWSTR'	c:\users\pret0rian\documents\visual studio 2010\projects\fsdfsd\fsdfsd\fsdfsd.cpp	31	1	fsdfsd
Error	5	error C2664: 'FtpGetFileW' : cannot convert parameter 2 from 'const char [8]' to 'LPCWSTR'	c:\users\pret0rian\documents\visual studio 2010\projects\fsdfsd\fsdfsd\fsdfsd.cpp	35	1	fsdfsd
Error	6	error C2664: 'FtpPutFileW' : cannot convert parameter 2 from 'const char [4]' to 'LPCWSTR'	c:\users\pret0rian\documents\visual studio 2010\projects\fsdfsd\fsdfsd\fsdfsd.cpp	44	1	fsdfsd
Error	7	error C2664: 'DeleteFileW' : cannot convert parameter 1 from 'const char [4]' to 'LPCWSTR'	c:\users\pret0rian\documents\visual studio 2010\projects\fsdfsd\fsdfsd\fsdfsd.cpp	46	1	fsdfsd
	8	IntelliSense: argument of type "const char *" is incompatible with parameter of type "LPCWSTR"	c:\users\pret0rian\documents\visual studio 2010\projects\fsdfsd\fsdfsd\fsdfsd.cpp	30	28	fsdfsd
	9	IntelliSense: argument of type "const char *" is incompatible with parameter of type "LPCWSTR"	c:\users\pret0rian\documents\visual studio 2010\projects\fsdfsd\fsdfsd\fsdfsd.cpp	31	38	fsdfsd
	10	IntelliSense: argument of type "const char *" is incompatible with parameter of type "LPCWSTR"	c:\users\pret0rian\documents\visual studio 2010\projects\fsdfsd\fsdfsd\fsdfsd.cpp	31	81	fsdfsd
	11	IntelliSense: argument of type "const char *" is incompatible with parameter of type "LPCWSTR"	c:\users\pret0rian\documents\visual studio 2010\projects\fsdfsd\fsdfsd\fsdfsd.cpp	31	87	fsdfsd
	12	IntelliSense: argument of type "const char *" is incompatible with parameter of type "LPCWSTR"	c:\users\pret0rian\documents\visual studio 2010\projects\fsdfsd\fsdfsd\fsdfsd.cpp	35	19	fsdfsd
	13	IntelliSense: argument of type "const char *" is incompatible with parameter of type "LPCWSTR"	c:\users\pret0rian\documents\visual studio 2010\projects\fsdfsd\fsdfsd\fsdfsd.cpp	35	29	fsdfsd
	14	IntelliSense: argument of type "const char *" is incompatible with parameter of type "LPCWSTR"	c:\users\pret0rian\documents\visual studio 2010\projects\fsdfsd\fsdfsd\fsdfsd.cpp	44	19	fsdfsd
	15	IntelliSense: argument of type "const char *" is incompatible with parameter of type "LPCWSTR"	c:\users\pret0rian\documents\visual studio 2010\projects\fsdfsd\fsdfsd\fsdfsd.cpp	44	25	fsdfsd
	16	IntelliSense: argument of type "const char *" is incompatible with parameter of type "LPCWSTR"	c:\users\pret0rian\documents\visual studio 2010\projects\fsdfsd\fsdfsd\fsdfsd.cpp	46	12	fsdfsd
 
0

Tutaj masz odpowiedź: 'IntelliSense: argument of type "const char *" is incompatible with parameter of type "LPCWSTR"'. Wejdź w ustawienia projektu i zmień wartość 'Character Set'.

0

Blee, to zła metoda. ANSI to przeżytek, który się skończył na czasach Windows 98.

Poprzedź wszystkie literały prefiksem L, a najlepiej obejmij je w makro TEXT.

0

Fajnie, działa.
Ale niech mi teraz wciśnie "kit", że to lepsze środowisko. W swoim syfnym Devie nic nie musiałem kombinować. A tutaj kilka godzin...
Nadal jak to w tym temacie zacząłem chcę pobrać swoje IP. Doszliśmy do tego, że pobiorę IP z źródła strony, lecz nadal nie wiem jak to zrobić.

PS Czy ta funkcja FTP jest dobra? (w sensie optymalna)

2
pret0rian napisał(a)

Ale niech mi teraz wciśnie "kit", że to lepsze środowisko. W swoim syfnym Devie nic nie musiałem kombinować. A tutaj kilka godzin...

Masz świętą rację. Projekt Dev-C++ dlatego nie jest rozwijany od 2005r., bo jest taki świetny. Ma świetną atrapę debuggera i w ogóle jest "dopracowany".
Jeśli z jakichkolwiek przyczyn Visual Express ci nie odpowiada, masz jeszcze kilka IDE do wyboru. Tu na forum popularne jest Code::Blocks. Ściągnij.

Źródło strony pobierzesz łącząc się socketem ze stroną (po uprzednim wysłaniu GET)

0
#include <wininet.h>

HINTERNET net, url;
DWORD dwRead;
CHAR buffer[1024];
net =  InternetOpen("HTTPGET", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
url = InternetOpenUrl(net, "               jakies url        ", NULL, 0, 0, 0);
InternetReadFile(url, buffer, 1023, &dwRead);
buffer[dwRead]=0;
ip+=buffer;
InternetCloseHandle(net);

Może się komuś przyda.

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