第九章 基本名字和位址轉換

2021-06-01 14:12:50 字數 2641 閱讀 1127

第九章基本名字和位址轉換

fqdn:(fully qualified domain name)完全合格網域名稱/全稱網域名稱,是指主機名加上全路徑,全路徑中列出了序列中所有域成員。全網域名稱可以從邏輯上準確地表示出主機在什麼地方,也可以說全網域名稱是主機名的一種完全表示形式。從全網域名稱中包含的資訊可以看出主機在網域名稱樹中的位置。全網域名稱在實際中是非常有用的。電子郵件就使用全網域名稱作為收信人的電子郵件位址,如janicejones@ acmecompany. com,其中收信人為janicejones,跟在收信人名字後面是符號@,@後面是郵件伺服器的全網域名稱,或者說是郵件伺服器所在企業的網域名稱,最後是頂層網域名稱.com。. com意味著acmecompany是乙個商業機構

dns中的條目稱為資源記錄rr,有如下幾類rr

a                   將主機名對映成32位ipv4位址。a(代表32位)

aaaa            將主機名對映成128位ipv6位址。aaaa(4*32=128位)

ptr              將ip位址對映成主機位址,ipv4和ipv6的規則是不一樣的

mx                指定一主機作為某主機的郵件交換器,如果有多個,先使用數字小的那個mx

cname         cname指別名記錄也被稱為規範名字。這種記錄允許您將多個名字對映到同一臺計算機。 通常用於同時提供www和mail服務的計算機。例如,有一台計算機名為「host.mydomain.com」(a記錄)。 它同時提供www和mail服務,為了便於使用者訪問服務。可以為該計算機設定兩個別名(cname):www和mail。 這兩個別名的全稱就是「www.mydomain.com」和「mail.mydomain.com」。實際上他們都指向「host.mydomain.com」

函式呼叫過程:一般根據主機名稱找到主機的ip,或者根據主機的ip找到主機的名字,都是通過呼叫函式gethostbyname和gethostbyaddr來呼叫解析器**,解析器**根據根據系統配置來找到名字伺服器的位址,解析器會利用udp給本地名字伺服器傳送查詢,如果本地名字伺服器不知道答案,他會用internet中的名字伺服器來查詢

查詢主機名最重要的函式是gethostbyname 如果成功返回乙個hostent的指標,該結構包含ipv4或ipv6位址,函式如下

struct hostent gethostbyname(const char*hostname);

struct hostent

gethostbyname 函式出現錯誤的時候,並不設定errno這個變數,而是將h_errno設定定義在中的下面的錯誤值

host_not_found

try_again

no_recovery

no_data

hstrerror函式類似於strerror 使用的是h_error這個變數

gethostbyname2函式如下

struct hostent*gethostbyname2(const char* hostname, int family)

這個函式family是af_inet 或者af_inet6

如果family設定成af_inet的話,就會在dns中查詢rr為a的記錄,如果沒有找到則返回空,如果找到了,看又沒有設定res_use_inet6若選項未設定則返回ipv4     位址,若設定了則返回ipv4位址到ipv6位址的對映 ,同時更新長度

如果family設定的是af_inet6的話,在dns中主機記錄為hostname中aaaa的記錄,如果找到了則返回,如果沒有找到則返回空

而函式structhostent* gethostbyname(const char* hostname)

這個函式,如果沒有設定res_use_inet6則搜尋a記錄,如果找到返回,如果沒有找到則返回錯誤,如果設定了res_usr_inet先找aaaa記錄,如果沒找到則找a記錄

struct hostent*gethostbyaddr(const char* addr,size_t len, int family)

使用引數addr(in_addr型別)的ip位址來找主機,是與gethostbyname函式相反的,len是代表in_addr的長度,family是可以是af_inet或者af_inet6

int uname(struct utsname* name)

獲得主機的名稱

struct utsname

並沒有說統一的size和size1的大小,每個系統都不一樣。

int gethostname(char name,size_tnamelen)也能夠獲得主機的名稱;

struct servent* getservbyname(constchar sername ,const char*proto);

根據服務名稱來找servent這個結構體中的詳細資訊

struct servent

struct servent* getservbyport(int port, constchar*proto)

根據埠來找servent的詳細資訊

第九章 基本名字和位址轉換

第九章基本名字和位址轉換 fqdn fully qualified domain name 完全合格網域名稱 全稱網域名稱,是指主機名加上全路徑,全路徑中列出了序列中所有域成員。全網域名稱可以從邏輯上準確地表示出主機在什麼地方,也可以說全網域名稱是主機名的一種完全表示形式。從全網域名稱中包含的資訊可...

第九章(筆記)

轉移指令是可以修改ip,或同時修改cs和ip的指令 offset 是用於提取標號偏移位址的操作符 jmp在第2章裡說到時用於修改ip或同時修改cs和ip的轉移指令,這章裡單獨的jmp指令是乙個無條件的轉移指令 jmp short 標號 是實現段內短轉移 jmp near ptr 標號 是實現段內近轉...

第九章作業

班級 0401304 學號 2013211526 姓名 鄧小俊 2.身份驗證 依據使用者所提供的身份資訊,來進行登入驗證,可以再細分為使用者是否可以登入sql sever 使用者是否可以登入到指定的目標資料庫等。授權 已通過身份驗證的使用者,檢查其所被賦予的許可權,是否可以訪問或者執行目標的物件 3...