當(dāng)前位置:首頁(yè) > 芯聞號(hào) > 充電吧
[導(dǎo)讀]利用IP地址得到物理位置: 原理:這里要講的就是通過(guò)socket去發(fā)送GET請(qǐng)求,發(fā)送至轉(zhuǎn)換的網(wǎng)站,然后解析其中的內(nèi)容,這里GET的是http://ip.chinaz.com/網(wǎng)站。 步驟

利用IP地址得到物理位置: 原理:這里要講的就是通過(guò)socket去發(fā)送GET請(qǐng)求,發(fā)送至轉(zhuǎn)換的網(wǎng)站,然后解析其中的內(nèi)容,這里GET的是http://ip.chinaz.com/網(wǎng)站。 步驟: 先使用Wireshark抓包工具,抓取查詢http://ip.chinaz.com/的封包,然后就可以模仿這個(gè)封包,利用socket發(fā)送GET請(qǐng)求,獲取IP地址的物理地址信息了。

從上面可以得到要發(fā)送的封包的具體格式:

GET?/?IP=223.124.1.232?HTTP/1.1rn
Host:?ip.chinaz.comrn
Connection:?keep-alivern
Upgrade-Insecure-Requests:?1rn
User-Agent:?Mozilla/5.0?(Windows?NT?6.1;?WOW64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/55.0.2883.87?Safari/537.36rn
Accept:?text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8rn
Accept-Language:?zh-CN,zh;q=0.8rnrn

使用socket進(jìn)行send發(fā)送時(shí),緩沖區(qū)填入上面的固定格式即可,這里要改的只有?IP=你要查詢的IP地址
這里還要強(qiáng)調(diào)一點(diǎn),在上面的封包中最好不要加上Accept-Encoding: gzip, deflate, sdchrn,除非你會(huì)使用代碼解壓gzip壓縮包,否則recv接收服務(wù)器響應(yīng)回來(lái)的文檔的時(shí)候,發(fā)送的是gzip壓縮過(guò)的數(shù)據(jù)。由于我們只是查詢而已,所以去掉這個(gè)字段,讓服務(wù)器直接發(fā)回來(lái)html文檔,然后我們解析就可以了。

下面是一個(gè)解析http://ip.chinaz.com/獲取物理地址的例子:

//名字轉(zhuǎn)IP(OK,New)
char*?NET::GetIp(char*?szhostname)
{
????char*?szip?=?NULL;
????char*?ipbit?=?NULL;
????hostent*?ipstr?=?NULL;

????szip?=?new?char[30];
????if?(!szip)
????????goto?Err;
????ZeroMemory(szip,?30);
????ipstr?=?gethostbyname(szhostname);
????if?(ipstr?==?NULL)
????????goto?Err;
????ipbit?=?inet_ntoa(*(in_addr*)ipstr->h_addr);
????if?(ipbit?==?NULL)
????????goto?Err;
????memcpy(szip,?ipbit,?strlen(ipbit));


????return?szip;
Err:
????return?NULL;
}

//連接HTTP服務(wù)器(OK,Connected)
SOCKET?NET::ConnectHttpServer(char*?szip)
{
????SOCKET?szclient_socket?=?0;

????szclient_socket?=?socket(AF_INET,?SOCK_STREAM,?0);
????if?(INVALID_SOCKET?==?szclient_socket)
????????goto?Err;
????//連接服務(wù)器
????SOCKADDR_IN?info;
????info.sin_port?=?htons(80);
????info.sin_family?=?AF_INET;
????info.sin_addr.S_un.S_addr?=?inet_addr(szip);
????if?(0?!=?connect(szclient_socket,?(SOCKADDR*)&info,?sizeof(SOCKADDR)))
????????goto?Err;

????//返回
????return?szclient_socket;
Err:
????if?(szclient_socket?!=?NULL?&&?szclient_socket?!=?INVALID_SOCKET)
????{
????????closesocket(szclient_socket);
????????szclient_socket?=?0;
????}
????return?0;
}

//設(shè)置套接字緩沖區(qū)大?。∣K)
BOOL?NET::SetSocketInfo(SOCKET?szsocket,int?uBufferSize)
{
????if?(SOCKET_ERROR?==?setsockopt(szsocket,?SOL_SOCKET,?SO_RCVBUF,?(char*)&uBufferSize,?sizeof(int)))
????????goto?Err;
????if?(SOCKET_ERROR?==?setsockopt(szsocket,?SOL_SOCKET,?SO_SNDBUF,?(char*)&uBufferSize,?sizeof(int)))
????????goto?Err;
????return?TRUE;
Err:
????return?FALSE;
}


//UTF8轉(zhuǎn)ANSI字符串(OK,New)
char*?STR::Utf8ToAnsi(char*?utf8,int?len,char?szcc)
{
????BOOL?szok?=?FALSE;
????int?szlen?=?0;
????char*?szretstr?=?NULL;
????wchar_t*?whar_str?=?NULL;
????//UTF8轉(zhuǎn)UNICODE
????szlen?=?MultiByteToWideChar(CP_UTF8,?0,?utf8,?len,?NULL,?0);
????if?(szlen?<=?0)
????????goto?Err;
????szlen?+=?1;
????whar_str?=?new?wchar_t[szlen];
????if?(!whar_str)
????????goto?Err;
????ZeroMemory(whar_str,?szlen?*?sizeof(wchar_t));
????MultiByteToWideChar(CP_UTF8,?0,?utf8,?len,?whar_str,?szlen);
????if?(GetLastError()?!=?0)
????????goto?Err;
????//UNICODE轉(zhuǎn)ANSI
????szlen?=?WideCharToMultiByte(CP_ACP,?0,?whar_str,?len,?NULL,?0,&szcc,&szok);
????if?(szlen?<=?0)
????????goto?Err;
????szlen?+=?1;
????szretstr?=?new?char[szlen];
????if?(!szretstr)
????????goto?Err;
????ZeroMemory(szretstr,?szlen?*?sizeof(char));
????WideCharToMultiByte(CP_ACP,?0,?whar_str,?len,?szretstr,?szlen,?&szcc,?&szok);
????if?(GetLastError()?!=?0)
????????goto?Err;
????if?(whar_str)
????{
????????delete[]?whar_str;
????????whar_str?=?NULL;
????}
????return?szretstr;
Err:
????if?(whar_str)
????{
????????delete[]whar_str;
????????whar_str?=?NULL;
????}
????return?NULL;
}


//獲取物理地址(OK,ip.chinaz.com,New)
char*?GET_POINT::GetPoint(char*?ip_address,char*?get_ip_de_host_name)
{
????int?szlen?=?0;
????char*?szPoint?=?NULL;
????char*?szTemp?=?NULL;
????char*?szTemp2?=?NULL;
????char*?szTemp3?=?NULL;
????char*?get_host_name_ip?=?NULL;
????SOCKET?http_client_socket?=?NULL;
????char?packet[400]?="GET?/";
????strcat(packet,?"?IP=");
????strcat(packet,?ip_address);
????strcat(packet,?"?HTTP/1.1rn"?
????"Host:?"
????);
????strcat(packet,?get_ip_de_host_name);
????strcat(packet,?"rn"?
????????"Connection:?keep-alivern"?
????????"Cache-Control:?max-age=0rn"?
????????"Upgrade-Insecure-Requests:?1rn"?
????????"Accept:?text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8rn"?
????????"Accept-Language:?zh-CN,zh;q=0.8rnrn"
????);


????char*?recv_buffer?=?NULL;
????//代碼開始
????recv_buffer?=?new?char[50000];
????if?(!recv_buffer)
????????goto?Err;
????ZeroMemory(recv_buffer,?50000);
????//返回解析物理地址的主機(jī)的IP地址
????get_host_name_ip?=?NET::GetIp(get_ip_de_host_name);
????if?(get_host_name_ip?==?NULL)
????????goto?Err;

????//連接服務(wù)器
????http_client_socket?=?NET::ConnectHttpServer(get_host_name_ip);
????if?(http_client_socket?==?0)
????????goto?Err;

????//設(shè)置緩沖區(qū)大小
????if?(!NET::SetSocketInfo(http_client_socket,?30000))
????????goto?Err;
????if?(send(http_client_socket,?packet,?strlen(packet),?0)?<=?0)
????????goto?Err;
????if?(recv(http_client_socket,?recv_buffer,?50000,?0)?");?//???
????if?(szTemp?==?NULL)
????????goto?Err;
????szTemp2?=?strchr(szTemp,?'<');
????if?(szTemp2?==?NULL)
????????goto?Err;?
????szlen?=?szTemp2?-?szTemp;
????if?(szlen?<=?0)
????????goto?Err;
????szlen?+=?1;
????szPoint?=?new?char[szlen];
????if?(!szPoint)
????????goto?Err;
????ZeroMemory(szPoint,?szlen);
????memcpy(szPoint,?szTemp,?szlen?-?1);

????if?(get_host_name_ip)
????{
????????delete[]get_host_name_ip;
????????get_host_name_ip?=?NULL;
????}
????if?(http_client_socket)
????{
????????closesocket(http_client_socket);
????????http_client_socket?=?0;
????}
????if?(recv_buffer)
????{
????????delete[]recv_buffer;
????????recv_buffer?=?NULL;
????}
????if?(szTemp3)
????{
????????delete[]szTemp3;
????????szTemp3?=?NULL;
????}
????return?szPoint;
Err:
????if?(get_host_name_ip)
????{
????????delete[]get_host_name_ip;
????????get_host_name_ip?=?NULL;
????}
????if?(http_client_socket)
????{
????????closesocket(http_client_socket);
????????http_client_socket?=?0;
????}
????if?(recv_buffer)
????{
????????delete[]recv_buffer;
????????recv_buffer?=?NULL;
????}
????if?(szTemp3)
????{
????????delete[]szTemp3;
????????szTemp3?=?NULL;
????}
????return?NULL;
}

實(shí)現(xiàn):

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉