amnewid gweinydd DB2DHCP (fy fforch), gwreiddiol yma, sy'n dod yn fwyfwy anodd i ymgynnull ar gyfer yr OS newydd. A dydw i ddim yn hoffi ei fod yn ddeuaidd nad oes unrhyw ffordd i “newid ar hyn o bryd”
cael gweinydd DHCP sy'n gweithio gyda'r gallu i ddewis cyfeiriad IP tanysgrifiwr gan ddefnyddio mac y tanysgrifiwr neu newid cyfuniad mac + port (Opsiwn 82)
sgwennu beic arall (O! dyma fy hoff weithgaredd)
derbyn sylwadau am eich caredigrwydd clwb ar Habrahabr (neu well eto, gwahoddiad) 😉
Canlyniad: mae'n gweithio 😉 Wedi'i brofi ar FreeBSD a Ubuntu OS. Yn ddamcaniaethol, gellir gofyn i'r cod weithio o dan unrhyw OS, oherwydd Ymddengys nad oes unrhyw rwymiadau penodol yn y cod.
Yn ofalus! Mae llawer mwy i ddod.
Dolen i gadwrfa ar gyfer amaturiaid "cyffwrdd yn fyw".
Mae'r broses o osod, ffurfweddu a defnyddio canlyniad "astudio'r caledwedd" yn llawer is, ac yna ychydig o theori am y protocol DHCP. I mi fy hun. Ac am hanes 😉
Ychydig o ddamcaniaeth
Beth yw DHCP
Mae hwn yn brotocol rhwydwaith sy'n caniatáu dyfais i ddarganfod ei gyfeiriad IP (a pharamedrau eraill fel porth, DNS, ac ati) o weinydd DHCP. Mae pecynnau'n cael eu cyfnewid gan ddefnyddio protocol y CDU. Mae egwyddor gyffredinol gweithrediad y ddyfais wrth ofyn am baramedrau rhwydwaith fel a ganlyn:
Mae'r ddyfais (cleient) yn anfon cais darlledu CDU (DHCPDISCOVER) ledled y rhwydwaith gyda'r cais “wel, mae rhywun yn rhoi cyfeiriad IP i mi.” Ar ben hynny, fel arfer (ond nid bob amser) mae'r cais yn digwydd o borthladd 68 (ffynhonnell), a'r cyrchfan yw porthladd 67 (cyrchfan). Mae rhai dyfeisiau hefyd yn anfon pecynnau o borth 67. Mae cyfeiriad MAC dyfais y cleient wedi'i gynnwys yn y pecyn DHCPDISCOVER.
Mae pob gweinydd DHCP sydd wedi'i leoli ar y rhwydwaith (ac efallai bod nifer ohonynt) yn ffurfio cynnig DHCPOFFER gyda gosodiadau rhwydwaith ar gyfer y ddyfais a anfonodd DHCPDISCOVER, a hefyd yn ei ddarlledu dros y rhwydwaith. Mae dynodi ar gyfer pwy y bwriedir y pecyn hwn yn seiliedig ar gyfeiriad MAC y cleient a ddarparwyd yn gynharach yn y cais DHCPDISCOVER.
Mae'r cleient yn derbyn pecynnau gyda chynigion ar gyfer gosodiadau rhwydwaith, yn dewis yr un mwyaf deniadol (gall y meini prawf fod yn wahanol, er enghraifft, amser dosbarthu pecynnau, nifer y llwybrau canolradd), ac yn gwneud "cais swyddogol" DHCPREQUEST gyda'r gosodiadau rhwydwaith o'r gweinydd DHCP mae'n ei hoffi. Yn yr achos hwn, mae'r pecyn yn mynd i weinydd DHCP penodol.
Mae'r gweinydd a dderbyniodd y DHCPREQUEST yn anfon pecyn fformat DHCPACK, lle mae unwaith eto yn rhestru'r gosodiadau rhwydwaith a fwriedir ar gyfer y cleient hwn
Yn ogystal, mae yna becynnau DHCPINFORM sy'n dod gan y cleient, a'u pwrpas yw hysbysu'r gweinydd DHCP bod y “cleient yn fyw” ac yn defnyddio'r gosodiadau rhwydwaith a gyhoeddwyd. Yng ngweithrediad y gweinydd hwn, anwybyddir y pecynnau hyn.
Fformat pecyn
Yn gyffredinol, mae ffrâm pecyn Ethernet yn edrych fel hyn:
Yn ein hachos ni, byddwn yn ystyried y data yn uniongyrchol o gynnwys y pecyn CDU yn unig, heb benawdau protocol haen OSI, sef strwythur DHCP:
DHCPDISCOVER
Felly, mae'r broses o gael cyfeiriad IP ar gyfer dyfais yn dechrau gyda'r cleient DHCP yn anfon cais darlledu o borthladd 68 i 255.255.255.255:67. Yn y pecyn hwn, mae'r cleient yn cynnwys ei gyfeiriad MAC, yn ogystal â beth yn union y mae am ei dderbyn gan y gweinydd DHCP. Disgrifir strwythur y pecyn yn y tabl isod.
DHCPDISCOVER Tabl Strwythur Pecyn
Safle yn y pecyn
Enw gwerth
Enghraifft
Cyflwyniad
Beit
Eglurhad
1
Cais Boot
1
Hex
1
Math o neges. 1 - cais gan gleient i weinydd, 2 - ymateb o weinydd i gleient
2
Math o galedwedd
1
Hex
1
Math o gyfeiriad caledwedd, yn y protocol hwn 1 - MAC
3
Mae caledwedd yn mynd i'r afael â hyd
6
Hex
1
Hyd cyfeiriad MAC y ddyfais
4
Hopys
1
Hex
1
Nifer y llwybrau canolradd
5
ID y Trafodiad
23:cf:de:1d
Hex
4
Dynodwr trafodiad unigryw. Wedi'i gynhyrchu gan y cleient ar ddechrau gweithrediad cais
7
Aeth yr ail heibio
0
Hex
4
Amser mewn eiliadau o ddechrau'r broses o gael cyfeiriad
9
Baneri Boot
0
Hex
2
Rhai baneri y gellir eu gosod i ddangos paramedrau protocol
11
Cyfeiriad IP cleient
0.0.0.0
Llinyn
4
Cyfeiriad IP cleient (os o gwbl)
15
Cyfeiriad IP eich cleient
0.0.0.0
Llinyn
4
Cyfeiriad IP a gynigir gan y gweinydd (os yw ar gael)
19
Cyfeiriad IP gweinydd nesaf
0.0.0.0
Llinyn
4
Cyfeiriad IP gweinydd (os yw'n hysbys)
23
Cyfeiriad IP asiant cyfnewid
172.16.114.41
Llinyn
4
Cyfeiriad IP yr asiant cyfnewid (er enghraifft, switsh)
27
Cyfeiriad MAC cleient
14:d6:4d:a7:c9:55
Hex
6
Cyfeiriad MAC anfonwr y pecyn (cleient)
31
Padin cyfeiriad caledwedd cleient
Hex
10
Sedd neilltuedig. Fel arfer llenwi â sero
41
Enw gwesteiwr y gweinydd
Llinyn
64
Enw gweinydd DHCP. Fel arfer ni chaiff ei drosglwyddo
105
Enw ffeil cychwyn
Llinyn
128
Enw ffeil ar y gweinydd a ddefnyddir gan orsafoedd di-ddisg wrth gychwyn
235
Cwcis hud
63: 82: 53: 63
Hex
4
Rhif “hud”, yn ôl pa un, gan gynnwys. gallwch benderfynu bod y pecyn hwn yn perthyn i'r protocol DHCP
Opsiynau DHCP. Gall fynd mewn unrhyw drefn
236
Rhif opsiwn
53
Rhagfyr
1
Opsiwn 53, sy'n pennu'r math o becyn DHCP
Rhif opsiwn
50
Rhagfyr
1
Pa gyfeiriad IP y mae'r cleient am ei dderbyn?
Hyd opsiwn
4
Rhagfyr
1
Gwerth opsiwn
172.16.134.61
Llinyn
4
Rhif opsiwn
55
1
Paramedrau rhwydwaith y mae'r cleient yn gofyn amdanynt. Gall cyfansoddiad amrywio
01 - Mwgwd rhwydwaith
03 - Porth
06 - DNS
oc — Enw gwesteiwr
0f - enw parth rhwydwaith
1c - cyfeiriad y cais darlledu (darlledu)
42 - enw gweinydd TFTP
79 - Llwybr Sefydlog Di-ddosbarth
Hyd opsiwn
8
1
Gwerth opsiwn
01:03:06:0c:0f:1c:42:79
8
Rhif opsiwn
82
Rhagfyr
Opsiwn 82, sy'n trosglwyddo cyfeiriad MAC y ddyfais ailadrodd a rhai gwerthoedd ychwanegol.
Yn fwyaf aml, dyma borthladd y switsh y mae'r cleient DHCP terfynol yn rhedeg arno.Mae'r opsiwn hwn yn cynnwys paramedrau ychwanegol. Y beit cyntaf yw nifer yr "suboption", yr ail yw ei hyd, yna ei werth.
Yn yr achos hwn, yn opsiwn 82, mae'r is-opsiynau wedi'u nythu:
Agent Circuit ID = 00:04:00:01:00:04, lle mae'r ddau beit olaf yn borthladd cleient DHCP y daeth y cais ohono
ID Remote Asiant = 00:06:c8:be:19:93:11:48 - Cyfeiriad MAC y ddyfais ailadrodd DHCP
Diwedd y pecyn
255
Rhagfyr
1
Mae 255 yn symbol o ddiwedd y pecyn
DHCPOFFER
Cyn gynted ag y bydd y gweinydd yn derbyn y pecyn DHCPDISCOVER ac os yw'n gweld y gall gynnig rhywbeth o'r un y gofynnwyd amdano i'r cleient, yna mae'n cynhyrchu ymateb ar ei gyfer - DHCPDISCOVER. Anfonir yr ymateb i’r porthladd “o ble y daeth”, trwy ddarlledu, oherwydd ar hyn o bryd, nid oes gan y cleient gyfeiriad IP eto, felly dim ond os caiff ei anfon trwy ddarllediad y gall dderbyn y pecyn. Mae'r cleient yn cydnabod bod hwn yn becyn iddo gan ei gyfeiriad MAC y tu mewn i'r pecyn, yn ogystal â'r rhif trafodiad y mae'n ei gynhyrchu ar yr adeg y caiff y pecyn cyntaf ei greu.
Tabl Strwythur Pecyn DHCPOFFER
Safle yn y pecyn
Enw'r gwerth (cyffredin)
Enghraifft
Cyflwyniad
Beit
Eglurhad
1
Cais Boot
1
Hex
1
Math o neges. 1 - cais gan gleient i weinydd, 2 - ymateb o weinydd i gleient
2
Math o galedwedd
1
Hex
1
Math o gyfeiriad caledwedd, yn y protocol hwn 1 - MAC
3
Mae caledwedd yn mynd i'r afael â hyd
6
Hex
1
Hyd cyfeiriad MAC y ddyfais
4
Hopys
1
Hex
1
Nifer y llwybrau canolradd
5
ID y Trafodiad
23:cf:de:1d
Hex
4
Dynodwr trafodiad unigryw. Wedi'i gynhyrchu gan y cleient ar ddechrau gweithrediad cais
7
Aeth yr ail heibio
0
Hex
4
Amser mewn eiliadau o ddechrau'r broses o gael cyfeiriad
9
Baneri Boot
0
Hex
2
Rhai baneri y gellir eu gosod i ddangos paramedrau protocol. Yn yr achos hwn, mae 0 yn golygu'r math o gais Unicast
11
Cyfeiriad IP cleient
0.0.0.0
Llinyn
4
Cyfeiriad IP cleient (os o gwbl)
15
Cyfeiriad IP eich cleient
172.16.134.61
Llinyn
4
Cyfeiriad IP a gynigir gan y gweinydd (os yw ar gael)
19
Cyfeiriad IP gweinydd nesaf
0.0.0.0
Llinyn
4
Cyfeiriad IP gweinydd (os yw'n hysbys)
23
Cyfeiriad IP asiant cyfnewid
172.16.114.41
Llinyn
4
Cyfeiriad IP yr asiant cyfnewid (er enghraifft, switsh)
27
Cyfeiriad MAC cleient
14:d6:4d:a7:c9:55
Hex
6
Cyfeiriad MAC anfonwr y pecyn (cleient)
31
Padin cyfeiriad caledwedd cleient
Hex
10
Sedd neilltuedig. Fel arfer llenwi â sero
41
Enw gwesteiwr y gweinydd
Llinyn
64
Enw gweinydd DHCP. Fel arfer ni chaiff ei drosglwyddo
105
Enw ffeil cychwyn
Llinyn
128
Enw ffeil ar y gweinydd a ddefnyddir gan orsafoedd di-ddisg wrth gychwyn
235
Cwcis hud
63: 82: 53: 63
Hex
4
Rhif “hud”, yn ôl pa un, gan gynnwys. gallwch benderfynu bod y pecyn hwn yn perthyn i'r protocol DHCP
Opsiynau DHCP. Gall fynd mewn unrhyw drefn
236
Rhif opsiwn
53
Rhagfyr
1
Opsiwn 53, sy'n diffinio math pecyn DHCP 2 - DHCPOFFER
Hyd opsiwn
1
Rhagfyr
1
Gwerth opsiwn
2
Rhagfyr
1
Rhif opsiwn
1
Rhagfyr
1
Opsiwn i gynnig mwgwd rhwydwaith i'r cleient DHCP
Hyd opsiwn
4
Rhagfyr
1
Gwerth opsiwn
255.255.224.0
Llinyn
4
Rhif opsiwn
3
Rhagfyr
1
Opsiwn i gynnig porth rhagosodedig i'r cleient DHCP
Hyd opsiwn
4
Rhagfyr
1
Gwerth opsiwn
172.16.12.1
Llinyn
4
Rhif opsiwn
6
Rhagfyr
1
Opsiwn i gynnig DHCP i gleient DNS
Hyd opsiwn
4
Rhagfyr
1
Gwerth opsiwn
8.8.8.8
Llinyn
4
Rhif opsiwn
51
Rhagfyr
1
Oes y paramedrau rhwydwaith a gyhoeddwyd mewn eiliadau, ac ar ôl hynny mae'n rhaid i'r cleient DHCP ofyn amdanynt eto
Hyd opsiwn
4
Rhagfyr
1
Gwerth opsiwn
86400
Rhagfyr
4
Rhif opsiwn
82
Rhagfyr
1
Mae Opsiwn 82 yn ailadrodd yr hyn a ddaeth yn DHCPDISCOVER
Hyd opsiwn
18
Rhagfyr
1
Gwerth opsiwn
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d:ec
Rhagfyr
18
Diwedd y pecyn
255
Rhagfyr
1
Mae 255 yn symbol o ddiwedd y pecyn
DHCPREQUEST
Ar ôl i'r cleient dderbyn DHCPOFFER, mae'n ffurfio pecyn sy'n gofyn am baramedrau rhwydwaith nid i bob gweinydd DHCP ar y rhwydwaith, ond dim ond i un penodol, y mae ei gynnig DHCPOFFER yr oedd yn ei “hoffi” fwyaf. Gall y meini prawf "hoffi" fod yn wahanol ac yn dibynnu ar weithrediad DHCP y cleient. Pennir derbynnydd y cais gan ddefnyddio cyfeiriad MAC y gweinydd DHCP. Hefyd, gall y cleient anfon pecyn DHCPREQUEST heb gynhyrchu DHCPDISCOVER yn gyntaf, os yw cyfeiriad IP y gweinydd eisoes wedi'i gael yn flaenorol.
Tabl Strwythur Pecyn DHCPREQUEST
Safle yn y pecyn
Enw'r gwerth (cyffredin)
Enghraifft
Cyflwyniad
Beit
Eglurhad
1
Cais Boot
1
Hex
1
Math o neges. 1 - cais gan gleient i weinydd, 2 - ymateb o weinydd i gleient
2
Math o galedwedd
1
Hex
1
Math o gyfeiriad caledwedd, yn y protocol hwn 1 - MAC
3
Mae caledwedd yn mynd i'r afael â hyd
6
Hex
1
Hyd cyfeiriad MAC y ddyfais
4
Hopys
1
Hex
1
Nifer y llwybrau canolradd
5
ID y Trafodiad
23:cf:de:1d
Hex
4
Dynodwr trafodiad unigryw. Wedi'i gynhyrchu gan y cleient ar ddechrau gweithrediad cais
7
Aeth yr ail heibio
0
Hex
4
Amser mewn eiliadau o ddechrau'r broses o gael cyfeiriad
9
Baneri Boot
8000
Hex
2
Rhai baneri y gellir eu gosod i ddangos paramedrau protocol. Yn yr achos hwn, mae “darlledu” wedi'i osod
11
Cyfeiriad IP cleient
0.0.0.0
Llinyn
4
Cyfeiriad IP cleient (os o gwbl)
15
Cyfeiriad IP eich cleient
172.16.134.61
Llinyn
4
Cyfeiriad IP a gynigir gan y gweinydd (os yw ar gael)
19
Cyfeiriad IP gweinydd nesaf
0.0.0.0
Llinyn
4
Cyfeiriad IP gweinydd (os yw'n hysbys)
23
Cyfeiriad IP asiant cyfnewid
172.16.114.41
Llinyn
4
Cyfeiriad IP yr asiant cyfnewid (er enghraifft, switsh)
27
Cyfeiriad MAC cleient
14:d6:4d:a7:c9:55
Hex
6
Cyfeiriad MAC anfonwr y pecyn (cleient)
31
Padin cyfeiriad caledwedd cleient
Hex
10
Sedd neilltuedig. Fel arfer llenwi â sero
41
Enw gwesteiwr y gweinydd
Llinyn
64
Enw gweinydd DHCP. Fel arfer ni chaiff ei drosglwyddo
105
Enw ffeil cychwyn
Llinyn
128
Enw ffeil ar y gweinydd a ddefnyddir gan orsafoedd di-ddisg wrth gychwyn
235
Cwcis hud
63: 82: 53: 63
Hex
4
Rhif “hud”, yn ôl pa un, gan gynnwys. gallwch benderfynu bod y pecyn hwn yn perthyn i'r protocol DHCP
Opsiynau DHCP. Gall fynd mewn unrhyw drefn
236
Rhif opsiwn
53
Rhagfyr
3
Opsiwn 53, sy'n diffinio pecyn DHCP math 3 - DHCPREQUEST
Hyd opsiwn
1
Rhagfyr
1
Gwerth opsiwn
3
Rhagfyr
1
Rhif opsiwn
61
Rhagfyr
1
ID Cleient: 01 (ar gyfer Ehernet) + cyfeiriad MAC cleient
Hyd opsiwn
7
Rhagfyr
1
Gwerth opsiwn
01:2c:ab:25:ff:72:a6
Hex
7
Rhif opsiwn
60
Rhagfyr
"Dynodwr dosbarth gwerthwr". Yn fy achos i, mae'n adrodd fersiwn cleient DHCP. Efallai bod dyfeisiau eraill yn dychwelyd rhywbeth gwahanol. Mae Windows er enghraifft yn adrodd MSFT 5.0
Hyd opsiwn
11
Rhagfyr
Gwerth opsiwn
udhcp 0.9.8
Llinyn
Rhif opsiwn
55
1
Paramedrau rhwydwaith y mae'r cleient yn gofyn amdanynt. Gall cyfansoddiad amrywio
01 - Mwgwd rhwydwaith
03 - Porth
06 - DNS
oc — Enw gwesteiwr
0f - enw parth rhwydwaith
1c - cyfeiriad y cais darlledu (darlledu)
42 - enw gweinydd TFTP
79 - Llwybr Sefydlog Di-ddosbarth
Hyd opsiwn
8
1
Gwerth opsiwn
01:03:06:0c:0f:1c:42:79
8
Rhif opsiwn
82
Rhagfyr
1
Mae Opsiwn 82 yn ailadrodd yr hyn a ddaeth yn DHCPDISCOVER
Hyd opsiwn
18
Rhagfyr
1
Gwerth opsiwn
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d:ec
Rhagfyr
18
Diwedd y pecyn
255
Rhagfyr
1
Mae 255 yn symbol o ddiwedd y pecyn
DHCPACK
Fel cadarnhad “ie, mae hynny'n iawn, dyma'ch cyfeiriad IP, ac ni fyddaf yn ei roi i unrhyw un arall” gan y gweinydd DHCP, pecyn mewn fformat DHCPACK o'r gweinydd i'r cleient y mae'n ei wasanaethu. Mae'n cael ei anfon darlledu yn union fel pecynnau eraill. Er, yn y cod isod ar gyfer gweinydd DHCP a weithredwyd yn Python, rhag ofn, rwy'n dyblygu unrhyw gais darlledu trwy anfon pecyn at IP cleient penodol, os yw'n hysbys eisoes. Ar ben hynny, nid yw'r gweinydd DHCP yn poeni o gwbl a yw'r pecyn DHCPACK wedi cyrraedd y cleient. Os nad yw'r cleient yn derbyn DHCPACK, yna ar ôl ychydig mae'n ailadrodd DHCPREQUEST
Tabl Strwythur Pecyn DHCPACK
Safle yn y pecyn
Enw'r gwerth (cyffredin)
Enghraifft
Cyflwyniad
Beit
Eglurhad
1
Cais Boot
2
Hex
1
Math o neges. 1 - cais gan gleient i weinydd, 2 - ymateb o weinydd i gleient
2
Math o galedwedd
1
Hex
1
Math o gyfeiriad caledwedd, yn y protocol hwn 1 - MAC
3
Mae caledwedd yn mynd i'r afael â hyd
6
Hex
1
Hyd cyfeiriad MAC y ddyfais
4
Hopys
1
Hex
1
Nifer y llwybrau canolradd
5
ID y Trafodiad
23:cf:de:1d
Hex
4
Dynodwr trafodiad unigryw. Wedi'i gynhyrchu gan y cleient ar ddechrau gweithrediad cais
7
Aeth yr ail heibio
0
Hex
4
Amser mewn eiliadau o ddechrau'r broses o gael cyfeiriad
9
Baneri Boot
8000
Hex
2
Rhai baneri y gellir eu gosod i ddangos paramedrau protocol. Yn yr achos hwn, mae “darlledu” wedi'i osod
11
Cyfeiriad IP cleient
0.0.0.0
Llinyn
4
Cyfeiriad IP cleient (os o gwbl)
15
Cyfeiriad IP eich cleient
172.16.134.61
Llinyn
4
Cyfeiriad IP a gynigir gan y gweinydd (os yw ar gael)
19
Cyfeiriad IP gweinydd nesaf
0.0.0.0
Llinyn
4
Cyfeiriad IP gweinydd (os yw'n hysbys)
23
Cyfeiriad IP asiant cyfnewid
172.16.114.41
Llinyn
4
Cyfeiriad IP yr asiant cyfnewid (er enghraifft, switsh)
27
Cyfeiriad MAC cleient
14:d6:4d:a7:c9:55
Hex
6
Cyfeiriad MAC anfonwr y pecyn (cleient)
31
Padin cyfeiriad caledwedd cleient
Hex
10
Sedd neilltuedig. Fel arfer llenwi â sero
41
Enw gwesteiwr y gweinydd
Llinyn
64
Enw gweinydd DHCP. Fel arfer ni chaiff ei drosglwyddo
105
Enw ffeil cychwyn
Llinyn
128
Enw ffeil ar y gweinydd a ddefnyddir gan orsafoedd di-ddisg wrth gychwyn
235
Cwcis hud
63: 82: 53: 63
Hex
4
Rhif “hud”, yn ôl pa un, gan gynnwys. gallwch benderfynu bod y pecyn hwn yn perthyn i'r protocol DHCP
Opsiynau DHCP. Gall fynd mewn unrhyw drefn
236
Rhif opsiwn
53
Rhagfyr
3
Opsiwn 53, sy'n diffinio pecyn DHCP math 5 - DHCPACK
Hyd opsiwn
1
Rhagfyr
1
Gwerth opsiwn
5
Rhagfyr
1
Rhif opsiwn
1
Rhagfyr
1
Opsiwn i gynnig mwgwd rhwydwaith i'r cleient DHCP
Hyd opsiwn
4
Rhagfyr
1
Gwerth opsiwn
255.255.224.0
Llinyn
4
Rhif opsiwn
3
Rhagfyr
1
Opsiwn i gynnig porth rhagosodedig i'r cleient DHCP
Hyd opsiwn
4
Rhagfyr
1
Gwerth opsiwn
172.16.12.1
Llinyn
4
Rhif opsiwn
6
Rhagfyr
1
Opsiwn i gynnig DHCP i gleient DNS
Hyd opsiwn
4
Rhagfyr
1
Gwerth opsiwn
8.8.8.8
Llinyn
4
Rhif opsiwn
51
Rhagfyr
1
Oes y paramedrau rhwydwaith a gyhoeddwyd mewn eiliadau, ac ar ôl hynny mae'n rhaid i'r cleient DHCP ofyn amdanynt eto
Hyd opsiwn
4
Rhagfyr
1
Gwerth opsiwn
86400
Rhagfyr
4
Rhif opsiwn
82
Rhagfyr
1
Mae Opsiwn 82 yn ailadrodd yr hyn a ddaeth yn DHCPDISCOVER
Hyd opsiwn
18
Rhagfyr
1
Gwerth opsiwn
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d:ec
Rhagfyr
18
Diwedd y pecyn
255
Rhagfyr
1
Mae 255 yn symbol o ddiwedd y pecyn
Gosod
Mae'r gosodiad mewn gwirionedd yn cynnwys gosod y modiwlau python sy'n angenrheidiol ar gyfer gwaith. Tybir bod MySQL eisoes wedi'i osod a'i ffurfweddu.
Rydyn ni'n creu cronfa ddata MySQL, yn llwytho'r dymp pydhcp.sql i mewn iddo, ac yn ffurfweddu'r ffeil ffurfweddu.
Ffurfweddiad
Mae holl osodiadau gweinydd mewn ffeil xml. Ffeil cyfeirio:
1.0 0.0.0.0 255.255.255.255 192.168.0.71 8600 1 255.255.255.0 192.168.0.1 gwesteiwr lleol prawf prawf pydhcp opsiwn_8.8.8.8_hex:sw_port82:1:20 opsiwn_22_hex:sw_port82:2:16 opsiwn_18_hex:sw_mac:82:26 40 dewiswch ip, mwgwd, llwybrydd, dns gan ddefnyddwyr lle mae upper(mac)=upper('{option_3_AgentRemoteId_hex}') ac uchaf(port)=uwch('{option_1_AgentCircuitId_port_hex}') dewiswch ip, mwgwd, llwybrydd, dns gan ddefnyddwyr lle mae upper(mac)=upper('{sw_mac}') ac upper(port)=upper('{sw_port82}') dewiswch ip, mwgwd, llwybrydd, dns gan ddefnyddwyr lle mae upper(mac) = uchaf ('{ClientMacAddress}') mewnosod mewn hanes (id,dt, mac, ip, sylw) gwerthoedd (null, nawr(), '{ClientMacAddress}', '{RequestedIpAddress}', 'DHCPACK/INFORM')
Nawr yn fwy manwl ar y tagiau:
Mae'r adran dhcpserver yn disgrifio'r gosodiadau sylfaenol ar gyfer cychwyn y gweinydd, sef:
gwesteiwr - pa gyfeiriad IP y mae'r gweinydd yn gwrando arno ar borthladd 67
darlledu - pa ip yw'r darllediad ar gyfer DHCPOFFER a DHCPACK
DHCPServer - beth yw ip y gweinydd DHCP
Amser prydles LeaseTime o'r cyfeiriad IP a gyhoeddwyd
ThreadLimit - faint o edafedd sy'n rhedeg ar yr un pryd i brosesu pecynnau CDU sy'n dod i mewn ar borthladd 67. Mae i fod i helpu ar brosiectau llwyth uchel 😉
defaultMask, defaultRouter,defaultDNS - yr hyn a gynigir i'r tanysgrifiwr yn ddiofyn os canfyddir IP yn y gronfa ddata, ond nid yw paramedrau ychwanegol wedi'u pennu ar ei gyfer
adran mysql:
gwesteiwr, enw defnyddiwr, cyfrinair, enw sylfaen - mae popeth yn siarad drosto'i hun. Mae strwythur cronfa ddata bras yn cael ei bostio ar GitHub
Adran ymholiadau: disgrifir ceisiadau am dderbyn CYNNIG/ACK yma:
offer_count - nifer y llinellau gyda cheisiadau sy'n dychwelyd canlyniad fel ip, mwgwd, llwybrydd, dns
offer_n — llinyn ymholiad. Os yw dychwelyd yn wag, yna mae'n gweithredu'r cais cynnig canlynol
history_sql - ymholiad sy'n ysgrifennu, er enghraifft, at yr “hanes awdurdodi” ar gyfer tanysgrifiwr
Gall ceisiadau gynnwys unrhyw newidynnau o'r adran opsiynau neu opsiynau o'r protocol DHCP.
Adran Opsiynau. Dyma lle mae'n dod yn fwy diddorol. Yma gallwn greu newidynnau y gallwn eu defnyddio yn nes ymlaen yn yr adran ymholiadau.
Er enghraifft:
option_82_hex:sw_port1:20:22
, mae'r llinell orchymyn hon yn cymryd y llinell gyfan a ddaeth yn opsiwn cais DHCP 82, mewn fformat hecs, yn yr ystod o 20 i 22 bytes yn gynwysedig ac yn ei roi yn y newidyn sw_port1 newydd (porthladd newid o ble daeth y cais)
option_82_hex:sw_mac:26:40
, diffiniwch y newidyn sw_mac, gan gymryd yr hecs o'r ystod 26:40
Gallwch weld yr holl opsiynau posibl y gellir eu defnyddio mewn ymholiadau trwy gychwyn y gweinydd gyda'r switsh -d. Byddwn yn gweld rhywbeth fel y log hwn:
Yn unol â hynny, gallwn lapio unrhyw newidyn yn {} a bydd yn cael ei ddefnyddio yn yr ymholiad SQL.
Gadewch inni gofnodi ar gyfer hanes bod y cleient wedi derbyn y cyfeiriad IP:
Cychwyn gweinydd
./pydhcpdb.py -d -c config.xml
— d modd allbwn consol DEBUG
- c <filename> ffeil ffurfweddu
Ôl-drafod
A nawr mwy o fanylion ar weithredu'r gweinydd yn Python. Mae'n boen. Dysgwyd Python ar y hedfan. Gwneir llawer o eiliadau yn arddull “wow, rywsut fe wnes i iddo weithio.” Heb ei optimeiddio o gwbl, a'i adael yn y ffurf hon yn bennaf oherwydd ychydig o brofiad yn natblygiad Python. Byddaf yn canolbwyntio ar yr agweddau mwyaf diddorol ar weithrediad y gweinydd yn “cod”.
Parser ffeil ffurfweddu XML
Defnyddir y modiwl Python safonol xml.dom. Mae'n ymddangos yn syml, ond yn ystod y gweithredu roedd diffyg amlwg o ddogfennaeth ac enghreifftiau clir ar y rhwydwaith sy'n defnyddio'r modiwl hwn.
tree = minidom.parse(gconfig["config_file"]) mconfig=tree.getElementsByTagName("mysql") ar gyfer elem yn mconfig: gconfig["mysql_host"]=elem.getElementsByTagName("gwesteiwr")[0].firstChild.data gconfig["mysql_username"]=elem.getElementsByTagName("enw defnyddiwr")[0].firstChild.data gconfig["mysql_password"]=elem.getElementsByTagName("cyfrinair")[0].firstChild.data gconfig["mysql_basename"] =elem.getElementsByTagName("enw sylfaen")[0].firstChild.data dconfig=tree.getElementsByTagName("dhcpserver") ar gyfer elem yn dconfig: gconfig["broadcast"]=elem.getElementsByTagName("darlledu")[0]. firstChild.data gconfig["dhcp_host"]=elem.getElementsByTagName("gwesteiwr")[0].firstChild.data gconfig["dhcp_LeaseTime"]=elem.getElementsByTagName("LeaseTime")[0].firstChild.data gconfig[" dhcp_ThreadLimit"]=int(elem.getElementsByTagName("ThreadLimit")[0].firstChild.data) gconfig["dhcp_Server"]=elem.getElementsByTagName("DHCPSserver")[0].firstChild.data gconfig["dhcp_defaultMask"] =elem.getElementsByTagName("defaultMask")[0].firstChild.data gconfig["dhcp_defaultRouter"]=elem.getElementsByTagName("defaultRouter")[0].firstChild.data gconfig["dhcp_defaultDNS"]=elem.getElementsByTagName defaultDNS")[0].firstChild.data qconfig=tree.getElementsByTagName("ymholiad") ar gyfer elem yn qconfig: gconfig["offer_count"]=elem.getElementsByTagName("offer_cyfrif")[0].firstChild.data am num yn range(int(gconfig["offer_count"])): gconfig["offer_"+str(num+1)]=elem.getElementsByTagName("offer_"+str(num+1))[0].firstChild.data gconfig ["history_sql"]=elem.getElementsByTagName("history_sql")[0].firstChild.data options=tree.getElementsByTagName("opsiynau") ar gyfer elem mewn opsiynau: node=elem.getElementsByTagName("opsiwn") ar gyfer opsiynau yn y nod : optionsMod.append(options.firstChild.data)
Aml-edau
Yn rhyfedd ddigon, mae multithreading yn Python yn cael ei weithredu'n glir ac yn syml iawn.
def PacketWork(data,addr): ... # gweithredu dosrannu'r pecyn sy'n dod i mewn ac ymateb iddo ... tra Gwir: data, addr = udp_socket.recvfrom(1024) # waiting for the UDP packet thread = threading.Thread( target=PacketWork , args=(data,addr,)).start() # fel y daeth - rydym yn lansio'r swyddogaeth PacketWork a ddiffiniwyd yn flaenorol yn y cefndir gyda pharamedrau wrth threading.active_count() > gconfig["dhcp_ThreadLimit"]: amser. cysgu(1) # os yw'r rhif Mae mwy o edafedd yn rhedeg yn barod nag yn y gosodiadau, rydym yn aros nes bod llai ohonynt
Derbyn/anfon pecyn DHCP
Er mwyn rhyng-gipio pecynnau CDU sy'n dod trwy'r cerdyn rhwydwaith, mae angen i chi "godi" y soced:
AF_INET - yn golygu mai fformat y cyfeiriad fydd IP: port. Efallai y bydd AF_UNIX hefyd - lle mae'r cyfeiriad yn cael ei roi gan enw'r ffeil.
SOCK_DGRAM - yn golygu nad ydym yn derbyn “pecyn amrwd”, ond un sydd eisoes wedi mynd trwy'r wal dân, a gyda phecyn wedi'i docio'n rhannol. Y rhai. dim ond pecyn CDU yr ydym yn ei dderbyn heb y gydran “ffisegol” o bapur lapio pecyn y CDU. Os ydych chi'n defnyddio'r faner SOCK_RAW, yna bydd angen i chi hefyd ddosrannu'r “lapiwr” hwn.
Gall anfon pecyn fod fel darllediad:
udp_socket.setsockopt(soced.SOL_SOCKET, soced.SO_BROADCAST, 1) #newid y soced i'r modd darlledu rz=udp_socket.sendto(pecyn, (gconfig["darlledu"],68))
, ac i’r cyfeiriad “o ble y daeth y pecyn”:
udp_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # newid y soced i'r modd aml-wrandäwr rz=udp_socket.sendto(pecyn, addr)
, lle mae SOL_SOCKET yn golygu'r “lefel protocol” ar gyfer gosod opsiynau,
, SO_BROADCAST opsiwn bod y pecyn helmed yn "ddarlledu"
Mae opsiwn ,SO_REUSEADDR yn newid y soced i'r modd “llawer o wrandawyr”. Mewn theori, mae'n ddiangen yn yr achos hwn, ond ar un o'r gweinyddwyr FreeBSD y profais arno, ni weithiodd y cod heb yr opsiwn hwn.
Dosrannu pecyn DHCP
Dyma lle roeddwn i wir yn hoffi Python. Mae'n ymddangos bod allan o'r blwch yn caniatáu ichi fod yn eithaf hyblyg gyda'r bytecode. Caniatáu iddo gael ei gyfieithu’n hawdd iawn i werthoedd degol, llinynnau a hecs – h.y. dyma sydd ei angen arnom mewn gwirionedd i ddeall strwythur y pecyn. Felly, er enghraifft, gallwch gael amrywiaeth o beit mewn HEX a beit yn unig: