国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

linux c 獲取本機公網IP的實現方法

2020-02-24 14:28:10
字體:
來源:轉載
供稿:網友

在穿透Linux環境時,有時由于權限或其他原因不能使用ifconfig命令,可以使用以下方法查看外部網絡IP,下面就跟著武林技術頻道小編的步伐來學習linux c 獲取本機公網IP的實現方法吧。

1、linux c代碼實現

?

?

?


#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);
??? }??
  //對于www.ip138.com的每個IP進行嘗試連接,直到有一個連接成功為止,或者無法連接,則退出程序
??? 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");
??? }

  //發送獲取IP的數據包給www.ip138.com
??? if(strlen(szBuffer) != send(sock,szBuffer,strlen(szBuffer),0)){
??????? perror("send error");
??????? exit(0);
??? }

  //接收數據包
??? 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、運行程序

?

?

?


./getip

?以上就是武林技術頻道小編給大家介紹的linux c 獲取本機公網IP的實現方法,看完都明白了吧,希望以上內容對大家有所幫助,更多技術必備知識請關注本站。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 揭西县| 鹰潭市| 长乐市| 顺义区| 巫溪县| 临沂市| 洛隆县| 札达县| 泾源县| 大城县| 沧源| 仪征市| 南康市| 稻城县| 故城县| 南京市| 临湘市| 治多县| 台南县| 罗定市| 石屏县| 阜城县| 曲麻莱县| 定结县| 分宜县| 太仓市| 新营市| 汤原县| 蕲春县| 宁城县| 上犹县| 克拉玛依市| 介休市| 定兴县| 民丰县| 嘉荫县| 江华| 东方市| 安仁县| 安溪县| 绥棱县|