在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

TCP編程之網卡信息獲取和域名解析

嵌入式技術 ? 來源:嵌入式技術 ? 作者:嵌入式技術 ? 2023-06-06 11:31 ? 次閱讀

1.TCP/IP簡介

TCP/IP協議源于1969年,是針對Internet開發的一種體系結構和協議標準,目的在于解決異種計算機網絡通信問題。使得網絡在互聯時能為用戶提供一種通用、一致的通信服務。是Internet采用的協議標準。

TCP/IP是一組通信協議的代名詞,是由一系列協議組成的協議簇。它本身指兩個協議集:

TCP(傳輸控制協議)。
? IP(互聯網絡協議)。

TCP/IP協議的基本傳輸單位是數據包(Datagram)。

TCP/IP傳輸協議,即傳輸控制/網絡協議,也叫作網絡通訊協議。它是在網絡的使用中的最基本的通信協議。TCP/IP傳輸協議對互聯網中各部分進行通信的標準和方法進行了規定。并且,TCP/IP傳輸協議是保證網絡數據信息及時、完整傳輸的兩個重要的協議。TCP/IP傳輸協議是嚴格來說是一個四層的體系結構,應用層、傳輸層、網絡層和數據鏈路層都包含其中。

2.獲取本地網卡信息

??獲取本地網卡信息的方法有很多種,在Linux命令行下我們可以通過ifconfig命令查詢網卡信息。

poYBAGR-oB2AR-W5AATjYDM9kL8576.png

2.1 通過ioctl函數獲取網卡信息

??ioctl(input/output control)是一個專用于設備輸入輸出操作的系統調用,該調用傳入一個跟設備有關的請求碼,系統調用的功能完全取決于請求碼。

  • ioctl函數原型:
#include 
int ioctl(int fd, unsigned long request, ...);
形參:fd --文件描述符
      request --請求命令
      第三個參數為可變參數,該參數填寫取決于request 命令;
返回值:一般成功返回0

網絡相關的請求劃分為6 類:

  • 接口操作
  • 文件操作
  • 接口操作
  • ARP 高速緩存操作
  • 路由表操作
  • 流系統

下表列出了網絡相關ioctl 請求的request 參數以及arg 地址必須指向的數據類型:

wKgZomR-qKKAHjq-AAIzAeIHFhc610.png

獲取網卡信息示例:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

int main()
{
    int i=0;
	int sockfd;
	/*創建網絡套接字*/
	if((sockfd = socket(AF_INET, SOCK_STREAM,0))
pYYBAGR-oKqAHSLKAAOg2PVMPHk975.png

3.域名解析

域名(英語:Domain Name),又稱網域,是由一串用點分隔的名字組成的Internet上某一臺計算機或計算機組的名稱,用于在數據傳輸時對計算機的定位標識(有時也指地理位置)。

由于IP地址具有不方便記憶并且不能顯示地址組織的名稱和性質等缺點,人們設計出了域名,并通過網域名稱系統(DNS,Domain Name System)來將域名和IP地址相互映射,使人更方便地訪問互聯網,而不用去記住能夠被機器直接讀取的IP地址數串。

#include 
extern int h_errno;
struct hostent *gethostbyname(const char *name);
函數功能:域名解析
形參:name --域名
返回值:
struct hostent {
               char  *h_name;            /* 主機的正式名稱 */
               char **h_aliases;         /* 別名列表*/
               int    h_addrtype;        /* 主機地址類型*/
               int    h_length;          /* 地址長度*/
               char **h_addr_list;       /*地址列表 */
           }
void herror(const char *s); //錯誤輸出
const char *hstrerror(int err);//根據錯誤編號返回錯誤消息字符串

示例

#include 
#include 
#include 
#include 
#include 
#include 
int main(int argc,char *argv[])
{
	if(argc!=2)
	{
		printf("格式:./app n");
		return 0;
	}
	//域名解析
	struct hostent *host_info=gethostbyname(argv[1]);
	if(host_info==NULL)
	{
		printf("err=%d,%sn",h_errno,hstrerror(h_errno));
		return 0;
	}
	int i=0;
	struct in_addr addr;
	printf("主機名:%sn",host_info->h_name);
	for(i=0;host_info->h_aliases[i]!=0;i++)
	{
		printf("主機別名:%sn",host_info->h_aliases[i]);
	}
	for(i=0;host_info->h_addr_list[i]!=0;i++)
	{
		memcpy(&addr,host_info->h_addr_list[i],sizeof(addr));
		printf("ip地址:%sn",inet_ntoa(addr));
	}
}

運行效果:

poYBAGR-p_2AWCYqAACnu8EsZlU312.png

獲取邦定ip地址信息getsockname

getsockname()函數用于獲取一個套接字的名字。它用于一個已捆綁或已連接套接字,本地地址將被返回。本調用特別適用于如下情況:未調用bind()就調用了connect(),這時唯有getsockname()調用可以獲知系統內定的本地地址。在返回時,namelen參數包含了名字的實際字節數。

#include 
int getsockname(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
函數功能:獲取sockfd綁定的ip地址和端口號信息
形  參:sockfd --網絡套接字
      addr  --保存返回的ip地址和端口號信息
      addrlen --addr緩沖區大小(必須由用戶設置大小,函數調用成功返回實際addr大小)
返回值:成功返回0,失敗-1

示例:

#include 
#include           /* See NOTES */
#include 
#include 
#include 
#include 
#include  /* superset of previous */
#include 
int main(int argc,char *argv[])
{
	if(argc!=3)
	{
		printf("格式:./app  n");
		return 0;
	}
	/*創建網絡套接字*/
	int sockfd=socket(AF_INET, SOCK_STREAM,0);
	if(sockfd==-1)
	{
		printf("創建網絡套接字失敗n");
		return 0;
	}
	/*連接服務器*/
	struct sockaddr_in addr=
	{
		.sin_family=AF_INET,//IPV4
		.sin_port=htons(atoi(argv[1])),//服務器端口號
		.sin_addr=
		{
			.s_addr=inet_addr(argv[2]),//服務器IP
		}
	};
	if(connect(sockfd,(struct sockaddr *)&addr,sizeof(addr)))
	{
		printf("連接服務器失敗n");
		return 0;
	}
	printf("服務器連接成功n");
	struct sockaddr_in c_addr;
	socklen_t addrlen=sizeof(c_addr);
	getsockname(sockfd,(struct sockaddr *)&c_addr, &addrlen);
	printf("本地信息%s:%dn",inet_ntoa(c_addr.sin_addr),ntohs(c_addr.sin_port));
	while(1)
	{
		
	}
}
pYYBAGR-qHWAacHuAAQhmrabozM011.png
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5082

    文章

    19122

    瀏覽量

    305107
  • 網卡
    +關注

    關注

    4

    文章

    311

    瀏覽量

    27383
  • 編程
    +關注

    關注

    88

    文章

    3615

    瀏覽量

    93718
  • TCP
    TCP
    +關注

    關注

    8

    文章

    1353

    瀏覽量

    79068
收藏 人收藏

    評論

    相關推薦

    esp32連接手機熱點無法解析域名是什么原因?

    版本:idf3.3.3 硬件:esp32-worver-e esp32連接手機熱點后(紅米 note9 pro)成功后。無法進行域名解析。直接使用IP可以進行連接。 esp32 連接筆記本熱點,無線路由器等能正常使用域名連接。 這個是什么原因?是手機熱點沒有
    發表于 06-19 08:02

    為什么我將一個域名解析到了服務器的Ip,但是仍然無法訪問?

      有兩個原因,一個原因是您的域名解析還沒有生效,一般解析之后生效的時間是1-2小時。請點擊開始,選擇運行,然后輸入 ping 您的域名地址,比如 ping www.abc.com
    發表于 11-22 00:38

    [討論]域名解析了,網站卻打不開的原因

    域名解析了,網站卻打不開的原因 有兩個原因,一個原因是您的域名解析還沒有生效,一般解析之后生效的時間是1-2小時。請點擊開始,選擇運行,然后輸入 ping 您的域名地址,比如 ping
    發表于 11-25 18:54

    華為mu509支持域名解析嗎?

    最近調試3G模塊,mu203說明書里AT指令沒DNS域名解析介紹,請問哪位大俠知道它到底支不支持域名解析?還有mu509支持嗎?
    發表于 07-12 10:07

    mu203有域名解析功能嗎?

    內容最近調試3G模塊,mu203說明書里AT指令沒DNS域名解析介紹,請問哪位大俠知道它到底支不支持域名解析?謝謝
    發表于 07-12 10:10

    【BPI-M64試用體驗】如何判斷網絡是否公網ip及動態域名解析介紹

    諒。------------------------------------------------------------------------------------------公網ip是全球唯一的,所以你要想在家外訪問到家中的計算機,在不用域名解析的情況下就要求你要有公網ip。內網ip是經過網絡地址轉換(N
    發表于 06-21 01:10

    如何解決DNS解析錯誤故障

    沒有辦法的時候在用)小知識:每個windows系統都有個HOSTS文件,它的作用是加快域名解析,方便局域網用戶,屏蔽網站,順利連接系統等功能。3:清除DNS緩存信息的方法“開始->運行->
    發表于 09-29 15:14

    沒有操作系統真的不能使用LwIP套接字和域名解析嗎?

    裸機移植了LwIP協議棧,整體感覺不錯但是在使用套接字(Socket)功能和域名解析(lwip_gethostbyname)時發現編譯通不過,說是要啟用操作系統。如果不用操作系統就只能用RAW
    發表于 08-22 22:25

    esp32連接手機熱點無法解析域名是什么原因?

    版本:idf3.3.3硬件:esp32-worver-e esp32連接手機熱點后(紅米 note9 pro)成功后。無法進行域名解析。直接使用IP可以進行連接。esp32 連接筆記本熱點,無線路由器等能正常使用域名連接。這個是什么原因?是手機熱點沒有
    發表于 02-16 07:24

    動態域名解析、E-mail的工作原理

    闡述動態域名解析、E-mail 工作原理,重點介紹SMTP 及安全認證,在linux 下用動態域名解析與Sendmail+SASL 構建安全、經濟而實用的動態郵件服務器。為中小企業、部門架建小型服務器提
    發表于 08-06 08:59 ?35次下載

    漢邦高科域名解析教程

    漢邦高科域名解析教程
    發表于 01-04 14:22 ?0次下載

    漢邦高科域名解析設置說明

    漢邦高科域名解析設置說明
    發表于 01-04 14:34 ?0次下載

    域名解析是什么意思?

    域名解析是互聯網基礎設施中至關重要的一部分。 域名解析包括兩個主要的步驟: 1、域名查詢:當我們在瀏覽器中輸入一個域名(例如,www.hengxun.cn),我們的計算機首先需要查詢
    的頭像 發表于 11-21 17:36 ?2072次閱讀

    域名解析是什么 為什么要進行域名解析

    什么是域名解析?相信很多之前沒有接觸過建站的人不了解什么是域名解析,也不知道具體有啥作用。比如我們在地址欄里輸入“www.ipdatacloud.com”并點擊回車,展示出來的就是IP數據
    的頭像 發表于 11-22 10:12 ?170次閱讀

    西藏節點啟動,提升域名解析速度

    近日,中國互聯網絡信息中心與中國電信集團有限公司西藏自治區分公司攜手宣布,雙方合作建設的國家頂級域名西藏解析節點(簡稱“西藏節點”)已正式投入使用,為當地用戶帶來更加快速和穩定的網絡服務。 西藏節點
    的頭像 發表于 12-12 10:24 ?210次閱讀
    主站蜘蛛池模板: 天天综合天天干| 成人免费一区二区三区| 免费一级视频在线播放| 日本护士撒尿| 男人和女人做a免费视频 | 免费毛片大全| 天天综合色网| 亚洲涩综合| 欧美一区二区三区在线观看| 亚洲第一免费播放区| 成人免费国产gav视频在线| 免费播放欧美毛片欧美aaaaa| 日本大片免a费观看在线| 亚洲精品91香蕉综合区| 1024人成软件色www| 色香蕉在线观看| 亚洲午夜综合网| 亚洲免费视频一区二区三区| 女人张腿让男桶免费视频观看| 天天夜天干天天爽| 精品国产成人三级在线观看| 手机在线黄色| 永久视频在线观看| 婷婷国产成人久久精品激情| 特级aaaaaaaaa毛片免费视频| www.淫| 理论毛片| 亚洲精品成人网| 久青草免费在线视频| 国产香蕉久久精品综合网| 亚洲成人黄色| 中国特黄一级片| 亚洲欧美经典| 国模私拍福利一区二区| 亚洲成成品网站有线| 人人爱人人插| 狠狠干2019| 日韩一级免费毛片| 男子扒开美女尿口做羞羞的事| 亚洲成在线观看| 天天艹天天操|