在穿透Linux環(huán)境時(shí),有時(shí)由于權(quán)限或其他原因不能使用ifconfig命令,可以使用以下方法查看外部網(wǎng)絡(luò)IP,下面就跟著武林技術(shù)頻道小編的步伐來(lái)學(xué)習(xí)linux c 獲取本機(jī)公網(wǎng)IP的實(shí)現(xiàn)方法吧。
1、linux c代碼實(shí)現(xiàn)
?
?
?
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/socket.h>
typedef enum {false,true}bool;
int main()
{
??? bool flag;
??? int??? sock;
??? char **pptr = NULL;
??? struct sockaddr_in??? destAddr;
??? struct hostent??? *ptr = NULL;
??? char destIP[128];
??? char szBuffer[] = {"GET /ip2city.asp HTTP/1.1/r/nHost:www.ip138.com/r/nConnection:Close/r/n/r/n"};
??? char res[1024];
//初始化socket
??? sock = socket(AF_INET,SOCK_STREAM,0);
??? if( -1 == sock ){
??????? perror("creat socket failed");
??????? exit(0);
??? }
??? bzero((void *)&destAddr,sizeof(destAddr));
??? destAddr.sin_family = AF_INET;???????
??? destAddr.sin_port = htons(80);
? //首先是獲取www.ip138.com的IP地址
??? ptr = gethostbyname("www.ip138.com");
??? if(NULL == ptr){
??????? perror("gethostbyname error");
??????? exit(0);
??? }??
//對(duì)于www.ip138.com的每個(gè)IP進(jìn)行嘗試連接,直到有一個(gè)連接成功為止,或者無(wú)法連接,則退出程序
??? for(flag=false,pptr=ptr->h_addr_list ; NULL != *pptr ; ++pptr){
??????? inet_ntop(ptr->h_addrtype,*pptr,destIP,sizeof(destIP));
??????? printf("addr:%s/n",destIP);
??????? destAddr.sin_addr.s_addr = inet_addr(destIP);
??????? if(-1!=connect(sock,(struct sockaddr *)&destAddr,sizeof(struct sockaddr))){
??????????? flag = true;
??????????? break;
??????? }
??? }
??? if(false == flag){
??????? perror("connect failed");
??? }
//發(fā)送獲取IP的數(shù)據(jù)包給www.ip138.com
??? if(strlen(szBuffer) != send(sock,szBuffer,strlen(szBuffer),0)){
??????? perror("send error");
??????? exit(0);
??? }
//接收數(shù)據(jù)包
??? if(-1 == recv(sock,res,1024,0)){
??????? perror("recv error");
??????? exit(0);
??? }
??? printf("res:/n%s/n",res);???
??? return 0;
}
2、將上述代碼保存getip.c,并使用如下命令編譯
?
?
?
gcc -o getip getip.c
3、運(yùn)行程序
?
?
?
./getip
?以上就是武林技術(shù)頻道小編給大家介紹的linux c 獲取本機(jī)公網(wǎng)IP的實(shí)現(xiàn)方法,看完都明白了吧,希望以上內(nèi)容對(duì)大家有所幫助,更多技術(shù)必備知識(shí)請(qǐng)關(guān)注本站。