rirọpo olupin DB2DHCP (mi orita), atilẹba nibi, eyiti o n di pupọ ati siwaju sii nira lati pejọ fun OS tuntun. Ati pe Emi ko fẹran pe o jẹ alakomeji pe ko si ọna lati “yi pada ni bayi”
gbigba olupin DHCP ti n ṣiṣẹ pẹlu agbara lati yan adiresi IP ti alabapin nipa lilo mac alabapin tabi yipo mac + ibudo (Aṣayan 82)
kikọ keke miiran (Oh! eyi ni iṣẹ ayanfẹ mi)
gbigba awọn asọye nipa ọwọ ẹgbẹ rẹ lori Habrahabr (tabi dara julọ sibẹsibẹ, ifiwepe) 😉
Esi: o ṣiṣẹ 😉 Idanwo lori FreeBSD ati Ubuntu OS. Ni imọ-jinlẹ, koodu le beere lọwọ lati ṣiṣẹ labẹ OS eyikeyi, nitori O dabi pe ko si awọn asopọ kan pato ninu koodu naa.
Ni ifarabalẹ! Ọpọlọpọ diẹ sii wa lati wa.
Ọna asopọ si ibi ipamọ fun awọn ope "fọwọkan laaye".
Ilana fifi sori ẹrọ, tunto ati lilo abajade ti “kikọ ohun elo” jẹ kekere pupọ, ati lẹhinna imọ-jinlẹ diẹ nipa ilana DHCP. Fun ara mi. Ati fun itan 😉
Imọran kekere kan
Kini DHCP
Eyi jẹ ilana nẹtiwọọki ti o fun laaye ẹrọ laaye lati wa adiresi IP rẹ (ati awọn aye miiran bii ẹnu-ọna, DNS, ati bẹbẹ lọ) lati olupin DHCP kan. Awọn apo-iwe ti wa ni paarọ nipa lilo ilana UDP. Ilana gbogbogbo ti ẹrọ nigbati o ba beere fun awọn paramita nẹtiwọọki jẹ atẹle yii:
Ẹrọ naa (alabara) firanṣẹ ibeere igbohunsafefe UDP kan (DHCDISCOVER) jakejado nẹtiwọọki pẹlu ibeere “daradara, ẹnikan fun mi ni adiresi IP kan.” Pẹlupẹlu, nigbagbogbo (ṣugbọn kii ṣe nigbagbogbo) ibeere naa waye lati ibudo 68 (orisun), ati opin irin ajo naa jẹ ibudo 67 (ọna). Diẹ ninu awọn ẹrọ tun firanṣẹ awọn apo-iwe lati ibudo 67. Adirẹsi MAC ti ẹrọ onibara wa ninu apo-iwe DHCPDISCOVER.
Gbogbo awọn olupin DHCP ti o wa lori nẹtiwọọki (ati pe ọpọlọpọ wọn le wa) ṣe ipese DHCPOFFER pẹlu awọn eto nẹtiwọọki fun ẹrọ ti o firanṣẹ DHCPDISCOVER, ati tun gbejade lori nẹtiwọọki naa. Idanimọ ẹni ti a pinnu fun apo-iwe yii da lori adirẹsi MAC ti alabara ti a pese ni iṣaaju ninu ibeere DHCPDISCOVER.
Onibara gba awọn apo-iwe pẹlu awọn igbero fun awọn eto nẹtiwọọki, yan eyi ti o wuyi julọ (awọn iyasọtọ le yatọ, fun apẹẹrẹ, akoko ifijiṣẹ apo, nọmba awọn ipa-ọna agbedemeji), ati ṣe “ibeere osise” DHCPREQUEST pẹlu awọn eto nẹtiwọọki. lati olupin DHCP ti o fẹran. Ni idi eyi, apo-iwe naa lọ si olupin DHCP kan pato.
Olupin ti o gba DHCPREQUEST fi iwe kika DHCPACK kan ranṣẹ, ninu eyiti o tun ṣe atokọ awọn eto nẹtiwọọki ti a pinnu fun alabara yii.
Ni afikun, awọn apo-iwe DHCPINFORM wa ti o wa lati ọdọ alabara, ati idi rẹ ni lati sọ fun olupin DHCP pe “alabara wa laaye” ati pe o nlo awọn eto nẹtiwọọki ti a fun. Ninu imuse olupin yii, awọn apo-iwe wọnyi ko bikita.
Package kika
Ni gbogbogbo, fireemu soso Ethernet kan dabi nkan bi eyi:
Ninu ọran wa, a yoo gbero data nikan taara lati inu awọn akoonu ti apo UDP, laisi awọn akọle Ilana Layer OSI, eyun eto DHCP:
DHCPDISCOVER
Nitorinaa, ilana ti gbigba adiresi IP fun ẹrọ kan bẹrẹ pẹlu alabara DHCP ti o firanṣẹ ibeere igbohunsafefe kan lati ibudo 68 si 255.255.255.255:67. Ninu package yii, alabara pẹlu adiresi MAC rẹ, ati kini gangan ti o fẹ lati gba lati olupin DHCP. Ilana package jẹ apejuwe ninu tabili ni isalẹ.
DHCPDISCOVER Packet Be Table
Ipo ni package
Orukọ iye
Apeere:
Ifihan
Baiti
Alaye lori
1
Boot Ìbéèrè
1
hex
1
Iru ifiranṣẹ. 1 - ibeere lati ọdọ alabara si olupin, 2 - esi lati olupin si alabara
2
Hardware iru
1
hex
1
Iru ti hardware adirẹsi, ni yi bèèrè 1 - MAC
3
Hardware adirẹsi ipari
6
hex
1
Ipari adiresi MAC ẹrọ
4
Hops
1
hex
1
Nọmba awọn ipa-ọna agbedemeji
5
ID Idunadura
23:cf:de:1d
hex
4
Oto idunadura idamo. Ti ipilẹṣẹ nipasẹ alabara ni ibẹrẹ iṣẹ ibeere kan
7
Keji ti kọja
0
hex
4
Akoko ni iṣẹju-aaya lati ibẹrẹ ilana ti gbigba adirẹsi kan
9
Awọn asia bata
0
hex
2
Awọn asia kan ti o le šeto lati tọkasi awọn paramita ilana
11
Adirẹsi IP onibara
0.0.0.0
Laini
4
Adirẹsi IP onibara (ti o ba jẹ)
15
Adirẹsi IP onibara rẹ
0.0.0.0
Laini
4
Adirẹsi IP ti olupin funni (ti o ba wa)
19
Adirẹsi IP olupin atẹle
0.0.0.0
Laini
4
Adirẹsi IP olupin (ti o ba mọ)
23
Aṣoju IP adirẹsi
172.16.114.41
Laini
4
Adirẹsi IP ti oluranlowo yii (fun apẹẹrẹ, iyipada)
27
Adirẹsi MAC alabara
14:d6:4d:a7:c9:55
hex
6
Adirẹsi MAC ti olufiranṣẹ apo-iwe (alabara)
31
Owú adirẹsi hardware onibara
hex
10
Ni ipamọ ijoko. Maa kún pẹlu odo
41
Orukọ ogun olupin
Laini
64
DHCP orukọ olupin. Nigbagbogbo ko gbejade
105
Boot faili orukọ
Laini
128
Orukọ faili lori olupin ti a lo nipasẹ awọn ibudo disiki nigbati o ba n gbe soke
235
Magic cookies
63: 82: 53: 63
hex
4
"Magic" nọmba, gẹgẹ bi eyi ti, pẹlu. o le pinnu pe apo-iwe yii jẹ ti ilana DHCP
DHCP awọn aṣayan. Le lọ ni eyikeyi ibere
236
Nọmba aṣayan
53
Dec
1
Aṣayan 53, eyiti o ṣe pato iru idii DHCP
Nọmba aṣayan
50
Dec
1
Adirẹsi IP wo ni alabara fẹ lati gba?
Ipari aṣayan
4
Dec
1
Iye aṣayan
172.16.134.61
Laini
4
Nọmba aṣayan
55
1
Awọn paramita nẹtiwọki ti o beere nipasẹ alabara. Tiwqn le yatọ
01 - nẹtiwọki boju
03 - Ẹnu-ọna
06 - DNS
oc - Orukọ ogun
0f - orukọ ašẹ nẹtiwọki
1c - adirẹsi ti ibeere igbohunsafefe (igbohunsafefe)
42 - TFTP orukọ olupin
79 - Alailẹgbẹ Aimi Route
Ipari aṣayan
8
1
Iye aṣayan
01:03:06:0c:0f:1c:42:79
8
Nọmba aṣayan
82
Dec
Aṣayan 82, eyiti o ndari adiresi MAC ti ẹrọ atunwi ati diẹ ninu awọn iye afikun.
Ni ọpọlọpọ igba, eyi ni ibudo ti yipada lori eyiti opin DHCP alabara n ṣiṣẹ, aṣayan yii ni awọn aye afikun. Baiti akọkọ jẹ nọmba ti “suboption”, keji jẹ ipari rẹ, lẹhinna iye rẹ.
Ni ọran yii, ni aṣayan 82, awọn aṣayan-ipin ti wa ni itẹ-ẹiyẹ:
Agent Circuit ID = 00:04:00:01:00:04, nibiti awọn baiti meji ti o kẹhin jẹ ibudo alabara DHCP lati eyiti ibeere naa ti wa.
ID Latọna Aṣoju = 00:06:c8:be:19:93:11:48 - adirẹsi MAC ti ẹrọ atunwi DHCP
Ipari aṣayan
18
Dec
Iye aṣayan
01:06
00:04:00:01:00:04
02:08
00:06:c8:be:19:93:11:48
hex
Ipari ti package
255
Dec
1
255 ṣe afihan ipari ti apo
DHCPOFFER
Ni kete ti olupin naa ba gba idii DHCPDISCOVER ati pe ti o ba rii pe o le fun alabara ni nkan lati ọdọ ọkan ti o beere, lẹhinna o ṣe agbekalẹ esi fun rẹ - DHCPDISCOVER. Idahun naa ni a fi ranṣẹ si ibudo "lati ibi ti o ti wa", nipasẹ igbohunsafefe, nitori ni akoko yii, alabara ko ti ni adiresi IP kan, nitorinaa o le gba apo-iwe nikan ti o ba firanṣẹ nipasẹ igbohunsafefe. Onibara mọ pe eyi jẹ package fun u nipasẹ adiresi MAC rẹ inu package, ati nọmba idunadura ti o ṣe ni akoko ti a ṣẹda package akọkọ.
DHCPOFFER Packet Be Table
Ipo ni package
Orukọ iye (wọpọ)
Apeere:
Ifihan
Baiti
Alaye lori
1
Boot Ìbéèrè
1
hex
1
Iru ifiranṣẹ. 1 - ibeere lati ọdọ alabara si olupin, 2 - esi lati olupin si alabara
2
Hardware iru
1
hex
1
Iru ti hardware adirẹsi, ni yi bèèrè 1 - MAC
3
Hardware adirẹsi ipari
6
hex
1
Ipari adiresi MAC ẹrọ
4
Hops
1
hex
1
Nọmba awọn ipa-ọna agbedemeji
5
ID Idunadura
23:cf:de:1d
hex
4
Oto idunadura idamo. Ti ipilẹṣẹ nipasẹ alabara ni ibẹrẹ iṣẹ ibeere kan
7
Keji ti kọja
0
hex
4
Akoko ni iṣẹju-aaya lati ibẹrẹ ilana ti gbigba adirẹsi kan
9
Awọn asia bata
0
hex
2
Awọn asia kan ti o le šeto lati tọkasi awọn paramita ilana. Ni idi eyi, 0 tumọ si iru ibeere Unicast
11
Adirẹsi IP onibara
0.0.0.0
Laini
4
Adirẹsi IP onibara (ti o ba jẹ)
15
Adirẹsi IP onibara rẹ
172.16.134.61
Laini
4
Adirẹsi IP ti olupin funni (ti o ba wa)
19
Adirẹsi IP olupin atẹle
0.0.0.0
Laini
4
Adirẹsi IP olupin (ti o ba mọ)
23
Aṣoju IP adirẹsi
172.16.114.41
Laini
4
Adirẹsi IP ti oluranlowo yii (fun apẹẹrẹ, iyipada)
27
Adirẹsi MAC alabara
14:d6:4d:a7:c9:55
hex
6
Adirẹsi MAC ti olufiranṣẹ apo-iwe (alabara)
31
Owú adirẹsi hardware onibara
hex
10
Ni ipamọ ijoko. Maa kún pẹlu odo
41
Orukọ ogun olupin
Laini
64
DHCP orukọ olupin. Nigbagbogbo ko gbejade
105
Boot faili orukọ
Laini
128
Orukọ faili lori olupin ti a lo nipasẹ awọn ibudo disiki nigbati o ba n gbe soke
235
Magic cookies
63: 82: 53: 63
hex
4
"Magic" nọmba, gẹgẹ bi eyi ti, pẹlu. o le pinnu pe apo-iwe yii jẹ ti ilana DHCP
DHCP awọn aṣayan. Le lọ ni eyikeyi ibere
236
Nọmba aṣayan
53
Dec
1
Aṣayan 53, eyiti o ṣalaye iru idii DHCP 2 - DHCPOFFER
Ipari aṣayan
1
Dec
1
Iye aṣayan
2
Dec
1
Nọmba aṣayan
1
Dec
1
Aṣayan lati fun alabara DHCP ni iboju-boju nẹtiwọki kan
Ipari aṣayan
4
Dec
1
Iye aṣayan
255.255.224.0
Laini
4
Nọmba aṣayan
3
Dec
1
Aṣayan lati fun alabara DHCP ni ẹnu-ọna aiyipada
Ipari aṣayan
4
Dec
1
Iye aṣayan
172.16.12.1
Laini
4
Nọmba aṣayan
6
Dec
1
Aṣayan lati pese DHCP si alabara DNS
Ipari aṣayan
4
Dec
1
Iye aṣayan
8.8.8.8
Laini
4
Nọmba aṣayan
51
Dec
1
Igbesi aye ti awọn paramita nẹtiwọọki ti a fun ni iṣẹju-aaya, lẹhin eyi alabara DHCP gbọdọ tun beere wọn lẹẹkansi
Ipari aṣayan
4
Dec
1
Iye aṣayan
86400
Dec
4
Nọmba aṣayan
82
Dec
1
Aṣayan 82, tun ṣe ohun ti o wa ninu DHCPDISCOVER
Ipari aṣayan
18
Dec
1
Iye aṣayan
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d:ec
Dec
18
Ipari ti package
255
Dec
1
255 ṣe afihan ipari ti apo
DHCPREQUEST
Lẹhin ti alabara gba DHCPOFFER, o ṣe agbekalẹ apo-iwe kan ti n beere awọn paramita nẹtiwọọki kii ṣe si gbogbo awọn olupin DHCP lori nẹtiwọọki, ṣugbọn si ọkan kan pato, eyiti DHCPOFFER nfunni “fẹran” julọ. Awọn ibeere “bii” le yatọ ati dale lori imuse DHCP alabara. Olugba ibeere naa jẹ pato nipa lilo adiresi MAC ti olupin DHCP. Paapaa, idii DHCPREQUEST kan le firanṣẹ nipasẹ alabara laisi ipilẹṣẹ DHCPDISCOVER akọkọ, ti adiresi IP olupin ti ti gba tẹlẹ.
DHCPREQUEST Packet Be Table
Ipo ni package
Orukọ iye (wọpọ)
Apeere:
Ifihan
Baiti
Alaye lori
1
Boot Ìbéèrè
1
hex
1
Iru ifiranṣẹ. 1 - ibeere lati ọdọ alabara si olupin, 2 - esi lati olupin si alabara
2
Hardware iru
1
hex
1
Iru ti hardware adirẹsi, ni yi bèèrè 1 - MAC
3
Hardware adirẹsi ipari
6
hex
1
Ipari adiresi MAC ẹrọ
4
Hops
1
hex
1
Nọmba awọn ipa-ọna agbedemeji
5
ID Idunadura
23:cf:de:1d
hex
4
Oto idunadura idamo. Ti ipilẹṣẹ nipasẹ alabara ni ibẹrẹ iṣẹ ibeere kan
7
Keji ti kọja
0
hex
4
Akoko ni iṣẹju-aaya lati ibẹrẹ ilana ti gbigba adirẹsi kan
9
Awọn asia bata
8000
hex
2
Awọn asia kan ti o le šeto lati tọkasi awọn paramita ilana. Ni idi eyi, “igbohunsafefe” ti ṣeto
11
Adirẹsi IP onibara
0.0.0.0
Laini
4
Adirẹsi IP onibara (ti o ba jẹ)
15
Adirẹsi IP onibara rẹ
172.16.134.61
Laini
4
Adirẹsi IP ti olupin funni (ti o ba wa)
19
Adirẹsi IP olupin atẹle
0.0.0.0
Laini
4
Adirẹsi IP olupin (ti o ba mọ)
23
Aṣoju IP adirẹsi
172.16.114.41
Laini
4
Adirẹsi IP ti oluranlowo yii (fun apẹẹrẹ, iyipada)
27
Adirẹsi MAC alabara
14:d6:4d:a7:c9:55
hex
6
Adirẹsi MAC ti olufiranṣẹ apo-iwe (alabara)
31
Owú adirẹsi hardware onibara
hex
10
Ni ipamọ ijoko. Maa kún pẹlu odo
41
Orukọ ogun olupin
Laini
64
DHCP orukọ olupin. Nigbagbogbo ko gbejade
105
Boot faili orukọ
Laini
128
Orukọ faili lori olupin ti a lo nipasẹ awọn ibudo disiki nigbati o ba n gbe soke
235
Magic cookies
63: 82: 53: 63
hex
4
"Magic" nọmba, gẹgẹ bi eyi ti, pẹlu. o le pinnu pe apo-iwe yii jẹ ti ilana DHCP
DHCP awọn aṣayan. Le lọ ni eyikeyi ibere
236
Nọmba aṣayan
53
Dec
3
Aṣayan 53, eyiti o ṣalaye iru soso DHCP 3 - DHCPREQUEST
Ipari aṣayan
1
Dec
1
Iye aṣayan
3
Dec
1
Nọmba aṣayan
61
Dec
1
ID onibara: 01 (fun Ehernet) + adirẹsi MAC onibara
Ipari aṣayan
7
Dec
1
Iye aṣayan
01:2c:ab:25:ff:72:a6
hex
7
Nọmba aṣayan
60
Dec
"Idamo kilasi olùtajà". Ninu ọran mi, o ṣe ijabọ ẹya alabara DHCP. Boya awọn ẹrọ miiran pada nkan ti o yatọ. Windows fun apẹẹrẹ ijabọ MSFT 5.0
Ipari aṣayan
11
Dec
Iye aṣayan
udhcp 0.9.8
Laini
Nọmba aṣayan
55
1
Awọn paramita nẹtiwọki ti o beere nipasẹ alabara. Tiwqn le yatọ
01 - nẹtiwọki boju
03 - Ẹnu-ọna
06 - DNS
oc - Orukọ ogun
0f - orukọ ašẹ nẹtiwọki
1c - adirẹsi ti ibeere igbohunsafefe (igbohunsafefe)
42 - TFTP orukọ olupin
79 - Alailẹgbẹ Aimi Route
Ipari aṣayan
8
1
Iye aṣayan
01:03:06:0c:0f:1c:42:79
8
Nọmba aṣayan
82
Dec
1
Aṣayan 82, tun ṣe ohun ti o wa ninu DHCPDISCOVER
Ipari aṣayan
18
Dec
1
Iye aṣayan
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d:ec
Dec
18
Ipari ti package
255
Dec
1
255 ṣe afihan ipari ti apo
DHCPACK
Gẹgẹbi ijẹrisi pe “bẹẹni, iyẹn tọ, eyi ni adiresi IP rẹ, ati pe Emi kii yoo fun ẹnikẹni miiran” lati ọdọ olupin DHCP, apo kan ni ọna kika DHCPACK lati olupin si olupin alabara. O ti firanṣẹ igbohunsafefe gẹgẹ bi awọn apo-iwe miiran. Botilẹjẹpe, ninu koodu ti o wa ni isalẹ fun olupin DHCP ti a ṣe ni Python, ni ọran kan, Mo ṣe pidánpidán eyikeyi ibeere igbohunsafefe nipa fifiranṣẹ soso kan si IP alabara kan pato, ti o ba ti mọ tẹlẹ. Pẹlupẹlu, olupin DHCP ko bikita rara boya idii DHCPACK ti de ọdọ alabara. Ti alabara ko ba gba DHCPACK, lẹhinna lẹhin igba diẹ o kan tun ṣe DHCPREQUEST
DHCPACK Packet Table
Ipo ni package
Orukọ iye (wọpọ)
Apeere:
Ifihan
Baiti
Alaye lori
1
Boot Ìbéèrè
2
hex
1
Iru ifiranṣẹ. 1 - ibeere lati ọdọ alabara si olupin, 2 - esi lati olupin si alabara
2
Hardware iru
1
hex
1
Iru ti hardware adirẹsi, ni yi bèèrè 1 - MAC
3
Hardware adirẹsi ipari
6
hex
1
Ipari adiresi MAC ẹrọ
4
Hops
1
hex
1
Nọmba awọn ipa-ọna agbedemeji
5
ID Idunadura
23:cf:de:1d
hex
4
Oto idunadura idamo. Ti ipilẹṣẹ nipasẹ alabara ni ibẹrẹ iṣẹ ibeere kan
7
Keji ti kọja
0
hex
4
Akoko ni iṣẹju-aaya lati ibẹrẹ ilana ti gbigba adirẹsi kan
9
Awọn asia bata
8000
hex
2
Awọn asia kan ti o le šeto lati tọkasi awọn paramita ilana. Ni idi eyi, “igbohunsafefe” ti ṣeto
11
Adirẹsi IP onibara
0.0.0.0
Laini
4
Adirẹsi IP onibara (ti o ba jẹ)
15
Adirẹsi IP onibara rẹ
172.16.134.61
Laini
4
Adirẹsi IP ti olupin funni (ti o ba wa)
19
Adirẹsi IP olupin atẹle
0.0.0.0
Laini
4
Adirẹsi IP olupin (ti o ba mọ)
23
Aṣoju IP adirẹsi
172.16.114.41
Laini
4
Adirẹsi IP ti oluranlowo yii (fun apẹẹrẹ, iyipada)
27
Adirẹsi MAC alabara
14:d6:4d:a7:c9:55
hex
6
Adirẹsi MAC ti olufiranṣẹ apo-iwe (alabara)
31
Owú adirẹsi hardware onibara
hex
10
Ni ipamọ ijoko. Maa kún pẹlu odo
41
Orukọ ogun olupin
Laini
64
DHCP orukọ olupin. Nigbagbogbo ko gbejade
105
Boot faili orukọ
Laini
128
Orukọ faili lori olupin ti a lo nipasẹ awọn ibudo disiki nigbati o ba n gbe soke
235
Magic cookies
63: 82: 53: 63
hex
4
"Magic" nọmba, gẹgẹ bi eyi ti, pẹlu. o le pinnu pe apo-iwe yii jẹ ti ilana DHCP
DHCP awọn aṣayan. Le lọ ni eyikeyi ibere
236
Nọmba aṣayan
53
Dec
3
Aṣayan 53, eyiti o ṣalaye iru soso DHCP 5 - DHCPACK
Ipari aṣayan
1
Dec
1
Iye aṣayan
5
Dec
1
Nọmba aṣayan
1
Dec
1
Aṣayan lati fun alabara DHCP ni iboju-boju nẹtiwọki kan
Ipari aṣayan
4
Dec
1
Iye aṣayan
255.255.224.0
Laini
4
Nọmba aṣayan
3
Dec
1
Aṣayan lati fun alabara DHCP ni ẹnu-ọna aiyipada
Ipari aṣayan
4
Dec
1
Iye aṣayan
172.16.12.1
Laini
4
Nọmba aṣayan
6
Dec
1
Aṣayan lati pese DHCP si alabara DNS
Ipari aṣayan
4
Dec
1
Iye aṣayan
8.8.8.8
Laini
4
Nọmba aṣayan
51
Dec
1
Igbesi aye ti awọn paramita nẹtiwọọki ti a fun ni iṣẹju-aaya, lẹhin eyi alabara DHCP gbọdọ tun beere wọn lẹẹkansi
Ipari aṣayan
4
Dec
1
Iye aṣayan
86400
Dec
4
Nọmba aṣayan
82
Dec
1
Aṣayan 82, tun ṣe ohun ti o wa ninu DHCPDISCOVER
Ipari aṣayan
18
Dec
1
Iye aṣayan
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d:ec
Dec
18
Ipari ti package
255
Dec
1
255 ṣe afihan ipari ti apo
eto
Fifi sori ẹrọ gangan ni fifi sori ẹrọ awọn modulu Python pataki fun iṣẹ. O ti ro pe MySQL ti fi sii tẹlẹ ati tunto.
FreeBSD
pkg fi Python3 python3 -m ensurepip pip3 fi sori ẹrọ mysql-asopo
Ubuntu
sudo apt-gba fi sori ẹrọ python3 sudo apt-gba fi sori ẹrọ pip3 sudo pip3 fi sori ẹrọ mysql-asopo
A ṣẹda data MySQL kan, gbejade pydhcp.sql idalenu sinu rẹ, ati tunto faili iṣeto ni.
Iṣeto ni
Gbogbo eto olupin wa ninu faili xml kan. Faili itọkasi:
1.0 0.0.0.0 255.255.255.255 192.168.0.71 8600 1 255.255.255.0 192.168.0.1 localhost idanwo idanwo pydhcp aṣayan_8.8.8.8_hex:sw_port82:1:20 aṣayan_22_hex:sw_port82:2:16 aṣayan_18_hex:sw_mac:82:26 40 yan ip, mask,router,dns lati ọdọ awọn olumulo nibiti oke(mac)=oke('{option_3_AgentRemoteId_hex}') ati oke(port)=oke('{option_1_AgentCircuitId_port_hex}') yan ip,mask,router,dns lati ọdọ awọn olumulo nibiti oke(mac)=oke('{sw_mac}') ati oke(port)=oke('{sw_port82}') yan ip,mask,router,dns lati ọdọ awọn olumulo nibiti oke(mac)=oke('{ClientMacAddress}') fi sii sinu itan (id,dt,mac,ip, comment) iye (asan, bayi(),'{ClientMacAddress}','{RequestedIpAddress}','DHCPACK/INFORM')
Bayi ni alaye diẹ sii lori awọn afi:
Apakan dcpserver ṣe apejuwe awọn eto ipilẹ fun bibẹrẹ olupin naa, eyun:
agbalejo - kini adiresi IP ti olupin naa gbọ lori ibudo 67
igbohunsafefe - eyiti ip jẹ igbohunsafefe fun DHCPOFFER ati DHCPACK
DHCPServer – kini ip olupin DHCP
LeaseTime akoko yiyalo ti adiresi IP ti a fiweranṣẹ
ThreadLimit - melo ni awọn okun ti n ṣiṣẹ ni akoko kanna lati ṣe ilana awọn apo-iwe UDP ti nwọle lori ibudo 67. O yẹ lati ṣe iranlọwọ lori awọn iṣẹ akanṣe giga 😉
defaultMask,defaultRouter,defaultDNS - ohun ti a nṣe si alabapin nipasẹ aiyipada ti o ba ri IP kan ninu aaye data, ṣugbọn awọn afikun awọn paramita ko ni pato fun rẹ
apakan mysql:
ogun, olumulo, ọrọigbaniwọle, basename - ohun gbogbo soro fun ara rẹ. Ilana data isunmọ ti wa ni fifiranṣẹ lori GitHub
Abala ibeere: awọn ibeere fun gbigba OFFER/ACK jẹ apejuwe nibi:
offer_count - nọmba awọn laini pẹlu awọn ibeere ti o da abajade pada bi ip, boju, olulana, dns
offer_n - okun ìbéèrè. Ti ipadabọ ba ṣofo, lẹhinna ṣiṣẹ ibeere ipese atẹle
History_sql - ibeere ti o kọ, fun apẹẹrẹ, si “itan-aṣẹ” fun alabapin kan
Awọn ibeere le pẹlu eyikeyi awọn oniyipada lati apakan awọn aṣayan tabi awọn aṣayan lati Ilana DHCP.
Awọn aṣayan apakan. Eleyi jẹ ibi ti o ti n diẹ awon. Nibi a le ṣẹda awọn oniyipada ti a le lo nigbamii ni apakan ibeere.
Fun apere:
option_82_hex:sw_port1:20:22
Laini aṣẹ yii gba gbogbo laini ti o wa ni aṣayan ibeere DHCP 82, ni ọna kika hex, ni ibiti o wa lati 20 si 22 baiti pẹlu ati fi sii ni sw_port1 oniyipada tuntun (ibudo iyipada lati ibiti ibeere naa ti wa)
option_82_hex:sw_mac:26:40
, ṣalaye oniyipada sw_mac, mu hex lati iwọn 26:40
O le wo gbogbo awọn aṣayan ti o ṣee ṣe ti o le ṣee lo ninu awọn ibeere nipa bibẹrẹ olupin pẹlu -d yipada. A yoo rii nkan bi akọọlẹ yii:
Nitorinaa, a le fi ipari si eyikeyi oniyipada ni {} ati pe yoo ṣee lo ninu ibeere SQL.
Jẹ ki a gbasilẹ fun itan-akọọlẹ pe alabara gba adiresi IP naa:
Bibẹrẹ olupin naa
./pydhcpdb.py -d -c config.xml
- d console o wu mode DEBUG
- c <faili> faili iṣeto ni
Debriefing
Ati ni bayi awọn alaye diẹ sii lori imuse olupin ni Python. O jẹ irora. Python ti kọ ẹkọ lori fo. Ọpọlọpọ awọn akoko ni a ṣe ni ara ti “wow, bakan Mo jẹ ki o ṣiṣẹ.” Ko iṣapeye rara, ati fi silẹ ni fọọmu yii ni pataki nitori iriri kekere ni idagbasoke Python. Emi yoo gbe lori awọn aaye ti o nifẹ julọ ti imuse olupin ni “koodu”.
XML atunto faili parser
Awọn boṣewa Python module xml.dom ti lo. O dabi pe o rọrun, ṣugbọn lakoko imuse o jẹ akiyesi aini ti awọn iwe aṣẹ ti o han gbangba ati awọn apẹẹrẹ lori nẹtiwọọki nipa lilo module yii.
Ni iyalẹnu, multithreading ni Python ni imuse ni kedere ati irọrun.
def PacketWork(data, addr): ... # imuse ti sisọ pakẹti ti nwọle ati idahun si… lakoko Otitọ: data, addr = udp_socket.recvfrom(1024) # nduro fun okun packet UDP = threading.Thread( target=PacketWork , args=(data,addr,)))bẹrẹ() # bi o ti de - a ṣe ifilọlẹ iṣẹ PacketWork ti a ti sọ tẹlẹ ni abẹlẹ pẹlu awọn paramita nigba threading.active_count ()>gconfig["dhcp_ThreadLimit"]: akoko. sun(1) # ti nọmba ba wa ni awọn okun ti nṣiṣẹ tẹlẹ ju ninu awọn eto, a duro titi ti wọn yoo fi dinku.
Gba/firanṣẹ DHCP soso
Lati le ṣe idiwọ awọn apo-iwe UDP ti n bọ nipasẹ kaadi nẹtiwọọki, o nilo lati “gbe” iho naa:
AF_INET - tumọ si pe ọna kika adirẹsi yoo jẹ IP: ibudo. AF_UNIX le tun wa - nibiti a ti fun ni adirẹsi nipasẹ orukọ faili.
SOCK_DGRAM - tumọ si pe a ko gba “pakẹti aise” kan, ṣugbọn ọkan ti o ti kọja nipasẹ ogiriina, ati pẹlu soso gige kan. Awon. a gba nikan UDP soso lai si "ti ara" paati ti UDP packet wrapper. Ti o ba lo asia SOCK_RAW, lẹhinna iwọ yoo tun nilo lati ṣe itupalẹ “wrapper” yii.
Fifiranṣẹ apo-iwe kan le dabi igbohunsafefe:
udp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) #yipada iho si ipo igbohunsafefe rz=udp_socket.sendto(packetack, (gconfig["igbohunsafefe"],68))
, àti sí àdírẹ́sì “Níbi tí àpòpọ̀ náà ti wá”:
udp_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # yipada iho si ipo olutẹtisi pupọ rz=udp_socket.sendto(packetack, addr)
, nibiti SOL_SOCKET tumọ si “ipele ilana” fun eto awọn aṣayan,
, SO_BROADCAST aṣayan pe apo-iṣiro ibori jẹ “igbohunsafefe”
,SO_REUSEADDR aṣayan yipada iho si "ọpọlọpọ awọn olutẹtisi" mode. Ni imọran, ko ṣe pataki ninu ọran yii, ṣugbọn lori ọkan ninu awọn olupin FreeBSD lori eyiti Mo ṣe idanwo, koodu ko ṣiṣẹ laisi aṣayan yii.
Ṣiṣayẹwo idii DHCP kan
Eyi ni ibi ti Mo fẹran Python gaan. O wa ni jade pe ninu apoti ti o faye gba o lati wa ni oyimbo rọ pẹlu awọn bytecode. Gbigba laaye lati tumọ ni irọrun pupọ si awọn iye eleemewa, awọn okun ati hex - i.e. eyi ni ohun ti a nilo lati loye ilana ti package naa. Nitorinaa, fun apẹẹrẹ, o le gba ọpọlọpọ awọn baiti ni HEX ati awọn baiti kan: