日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

isc-dhcp监听网口的实现步骤

發(fā)布時間:2023/12/31 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 isc-dhcp监听网口的实现步骤 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

? ?在啟動dhcpd進程的日志記錄開始部分,我們都會看到類似如下的打印:

create for interface for eth5 dhcp_interface_setup_hook eth5, for addr 10.40.124.205 create for interface for base0 dhcp_interface_setup_hook base0, for addr 169.254.1.1 add to interface for base0 dhcp_interface_setup_hook base0, for addr 169.254.100.100 add to interface for VIF2 dhcp_interface_setup_hook VIF2, for addr 192.168.1.10 Listening on LPF/VIF2/b8:c8:55:ac:03:81/network-VIF2 Sending on LPF/VIF2/b8:c8:55:ac:03:81/network-VIF2 Sending on Socket/fallback/fallback-net

? ?如果你再使用ifconfig查看一下系統(tǒng)的網(wǎng)口信息就會發(fā)現(xiàn),eth5/base0/VIF2都是有ip地址,其他的網(wǎng)口是沒有地址的(當然lo除外),并且它們與上面的前8行對應。

? ?我將dhcpd監(jiān)聽網(wǎng)口的步驟理解為兩大步:發(fā)現(xiàn)網(wǎng)口監(jiān)聽網(wǎng)口。在common/discover.c中我們能找到函數(shù)void discover_interfaces(int state)。所有被發(fā)現(xiàn)的網(wǎng)口都會存放到全局變量interfaces鏈表中,然后調(diào)用判斷網(wǎng)口信息是否合法,與地址池是否匹配等等,最后完成網(wǎng)口接收和發(fā)送報文的初始化。


一、發(fā)現(xiàn)網(wǎng)口

? ?在這一步主要使用了三個函數(shù)(begin_iface_scan/next_iface/end_iface_scan)組成。但對于不同的系統(tǒng)它們的實現(xiàn)也有所不同。在這里支持三個類型的系統(tǒng)Solaris、Linux、BSD,他們都是類UNIX系統(tǒng),之間有很多相似之處,也有很多不同。為什么要做這樣的區(qū)分呢?

? ?Solaris:ioctl()支持SIOCGLIFCONF參數(shù)擴展來獲取網(wǎng)口配置信息。

? ?Linux:通過/proc/net/dev文件來讀取本機所有網(wǎng)口名,同樣也通過ioctl()來獲取ip/flag等信息。

? ?BSD:提供getifaddrs() 函數(shù)來獲取所有網(wǎng)口。


? ?在進行上述三個函數(shù)來發(fā)現(xiàn)所有網(wǎng)口時,同時過濾掉不可用的網(wǎng)口(loopback或者沒有ip的網(wǎng)口),并調(diào)用dhcp_interface_setup_hook找出每個可用的網(wǎng)口所在的網(wǎng)段(subnet)。


二、監(jiān)聽網(wǎng)口

? ?這一步只需要關(guān)注兩個函數(shù)(if_register_receive/if_register_send)。這兩個函數(shù)只是針對dhcpv4來說,dhcpv6則需要使用if_register6

? ?與第一步類似,對于不同的系統(tǒng)也有所區(qū)分。主要有以下幾種:

1. LPF

? ?全稱Linux Packet Filter,主要適用一般linux系統(tǒng)。接收/發(fā)送報文使用raw socket,并在接收報文時通過setsockopt()過濾指定端口的報文。dhcpv4使用67端口,v6則使用547。

2. Socket

? ?主要適用BSD系統(tǒng),使用udp socket。

3. UPF

? ?全稱 Ultrix Packet Filter。然后打一個upf設備,通過ioctl()來關(guān)聯(lián)對應的網(wǎng)口進行收發(fā)報文。

4. BPF

? ?與UPF類似,只是打開的設備文件不同。

5. NIT

? ?全稱Network Interface Tap。與UPF也類似,區(qū)別在于打開的設備文件。

6. DLPI

? ?全稱Data Link Provider Interface。打開一個dlpi設備,同樣將這個打開的設備文件與網(wǎng)口綁定。


? ?在根據(jù)上面各種不同情況,初始化了接收/發(fā)送報文的文件描述符,然后調(diào)用omapi_register_io_object()來注冊回調(diào)函數(shù),接收報文,并調(diào)用處理報文函數(shù)。


? ?over



轉(zhuǎn)載于:https://blog.51cto.com/cizyzhang/1384513

總結(jié)

以上是生活随笔為你收集整理的isc-dhcp监听网口的实现步骤的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。