請問如何取得Internet的IP? |
答題得分者是:RaynorPao
|
purejack
一般會員 發表:8 回覆:8 積分:3 註冊:2002-12-18 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 我用討論區裡的範例是可以抓到IP. 但我想先抓Internet IP,如果沒連上Internet再抓LAN IP. 我是把範例改成h_addr_list[i],用迴圈抓最後一個IP. 原本以為可以了,但我試了三台電腦結果有一台仍抓到LAN IP. 請問該怎麼處理才能固定先抓Internet IP?purejack 你好: 請把你的程式碼貼上來,讓各位大大幫你看一看 --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
purejack
一般會員 發表:8 回覆:8 積分:3 註冊:2002-12-18 發送簡訊給我 |
struct hostent *thisHost;
struct in_addr in;
char MyName[80];
char *ptr,*hostname;
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(2,0);
err=WSAStartup(wVersionRequested,&wsaData);
if( err != 0 )return;
if( LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 0 )
{
WSACleanup();
return;
}
if( gethostname(MyName,80) == SOCKET_ERROR )return;
if( !(thisHost=gethostbyname(MyName)) )return;
hostname = thisHost->h_name;
memset((void*)&in,sizeof(in),0); // Get Last IP
int i;
for ( i = 0 ; thisHost->h_addr_list[i] ; i );
i--;
in.s_addr = *((unsigned long*)thisHost->h_addr_list[i]); if( !(ptr = inet_ntoa(in)) )return;
WSACleanup();
EstablishForm->Edit4->Text = AnsiString(ptr); Get Last IP的部份,for迴圈是我自己加的,程式哪來的我也不大記得了,而且complie會有三個warning,因為看不懂所以我也沒改.
只是後來發覺抓IP會抓錯,看了一下發現h_addr_list[n]是指定哪一個IP用的,原本以為只要抓最後一個就沒錯了,但試的結果大多數是沒錯,但有時好像還是會錯.
不知h_addr_list[n]的IP是依照什麼規則來排的?
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: struct hostent *thisHost; struct in_addr in; char MyName[80]; char *ptr,*hostname; WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD(2,0); err=WSAStartup(wVersionRequested,&wsaData); if( err != 0 )return; if( LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 0 ) { WSACleanup(); return; } if( gethostname(MyName,80) == SOCKET_ERROR )return; if( !(thisHost=gethostbyname(MyName)) )return; hostname = thisHost->h_name; memset((void*)&in,sizeof(in),0); // Get Last IP int i; for ( i = 0 ; thisHost->h_addr_list[i] ; i ); i--; in.s_addr = *((unsigned long*)thisHost->h_addr_list[i]); if( !(ptr = inet_ntoa(in)) )return; WSACleanup(); EstablishForm->Edit4->Text = AnsiString(ptr); Get Last IP的部份,for迴圈是我自己加的,程式哪來的我也不大記得了,而且complie會有三個warning,因為看不懂所以我也沒改. 只是後來發覺抓IP會抓錯,看了一下發現h_addr_list[n]是指定哪一個IP用的,原本以為只要抓最後一個就沒錯了,但試的結果大多數是沒錯,但有時好像還是會錯. 不知h_addr_list[n]的IP是依照什麼規則來排的? purejack 你好: (1)我已經試過你的程式碼了,在三台電腦上測試的結果,應該是沒有問題 ( > (> --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
purejack
一般會員 發表:8 回覆:8 積分:3 註冊:2002-12-18 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |