Ag ionnsachadh Python (beagan a bharrachd air bhon toiseach 😉)
cuir an àite frithealaiche DB2DHCP (mo fhorc), tùsail an seo, a tha a’ fàs nas duilghe a chruinneachadh airson an OS ùr. Agus cha toil leam gur e binary a th’ ann nach eil dòigh ann “atharrachadh an-dràsta”
a’ faighinn frithealaiche DHCP ag obair leis a’ chomas seòladh IP ballrachd a thaghadh a’ cleachdadh mac an neach-clàraidh no measgachadh port mac + atharrachadh (Roghainn 82)
a’ sgrìobhadh baidhsagal eile (Oh! is e seo an gnìomh as fheàrr leam)
a’ faighinn bheachdan mu do chomas cluba air Habrahabr (no nas fheàrr fhathast, cuireadh) 😉
Toradh: bidh e ag obair 😉 Deuchainn air FreeBSD agus Ubuntu OS. Gu teòiridheach, faodar iarraidh air a 'chòd obrachadh fo OS sam bith, oir Tha e coltach nach eil ceanglachan sònraichte sam bith anns a’ chòd.
Gu faiceallach! Tha tòrr a bharrachd ri thighinn.
Ceangal gu stòr airson neo-dhreuchdail "suathadh beò".
Tha am pròiseas airson a bhith a 'stàladh, a' rèiteachadh agus a 'cleachdadh toradh "sgrùdadh a' bhathar-cruaidh" mòran nas ìsle, agus an uairsin beagan teòiridh mu phròtacal DHCP. Airson mi fhìn. Agus airson eachdraidh 😉
Beagan teòiridh
Dè a th’ ann an DHCP
Is e protocol lìonra a tha seo a leigeas le inneal faighinn a-mach a sheòladh IP (agus paramadairean eile leithid geata, DNS, msaa) bho fhrithealaiche DHCP. Bithear ag iomlaid pacaidean a’ cleachdadh protocol UDP. Tha prionnsapal obrachadh an inneal nuair a thathar ag iarraidh crìochan lìonra mar a leanas:
Bidh an inneal (neach-dèiligidh) a’ cur iarrtas craolaidh UDP (DHCPDISCOVER) air feadh an lìonraidh leis an iarrtas “uill, bheir cuideigin seòladh IP dhomh.” A bharrachd air an sin, mar as trice (ach chan ann an-còmhnaidh) tha an t-iarrtas a 'tachairt bho phort 68 (an tùs), agus is e an ceann-uidhe port 67 (ceann-uidhe). Bidh cuid de dh’ innealan cuideachd a’ cur phasganan bho phort 67. Tha seòladh MAC an inneal teachdaiche air a thoirt a-steach don phasgan DHCPDISCOVER.
Bidh a h-uile seirbheisiche DHCP a tha suidhichte air an lìonra (agus is dòcha gu bheil grunn dhiubh ann) a’ cruthachadh tairgse DHCPOFFER le roghainnean lìonra airson an inneal a chuir DHCPDISCOVER, agus cuideachd ga chraoladh thairis air an lìonra. Tha comharrachadh cò dha a tha am pasgan seo an dùil stèidhichte air seòladh MAC an neach-dèiligidh a chaidh a thoirt seachad na bu thràithe san iarrtas DHCPDISCOVER.
Bidh an neach-dèiligidh a’ gabhail ri pacaidean le molaidhean airson suidheachaidhean lìonra, a’ taghadh an tè as tarraingiche (faodaidh na slatan-tomhais a bhith eadar-dhealaichte, mar eisimpleir, an ùine lìbhrigidh pacaid, an àireamh de shlighean eadar-mheadhanach), agus a’ dèanamh “iarrtas oifigeil” DHCPREQUEST leis na roghainnean lìonra bhon t-seirbheisiche DHCP as toil leis. Anns a 'chùis seo, thèid am pasgan gu frithealaiche DHCP sònraichte.
Bidh am frithealaiche a fhuair an DHCPREQUEST a’ cur pacaid fòrmat DHCPACK, anns a bheil e a-rithist a’ liostadh nan roghainnean lìonraidh a tha san amharc don neach-dèiligidh seo
A bharrachd air an sin, tha pacaidean DHCPINFORM a ’tighinn bhon neach-dèiligidh, agus is e an adhbhar innse don t-seirbheisiche DHCP gu bheil an“ neach-dèiligidh beò ”agus gu bheil e a’ cleachdadh na roghainnean lìonra a chaidh a chuir a-mach. Ann am buileachadh an fhrithealaiche seo, cha tèid na pacaidean sin a leigeil seachad.
Cruth pacaid
San fharsaingeachd, tha frèam pacaid Ethernet a’ coimhead rudeigin mar seo:
Anns a ’chùis againn, cha bheachdaich sinn ach air an dàta gu dìreach bho shusbaint a’ phacaid UDP, às aonais cinn-cinn protocol còmhdach OSI, is e sin structar DHCP:
DHCPDISCOVER
Mar sin, bidh am pròiseas airson seòladh IP fhaighinn airson inneal a’ tòiseachadh leis an neach-dèiligidh DHCP a’ cur iarrtas craolaidh bho phort 68 gu 255.255.255.255:67. Anns a 'phacaid seo, tha an neach-dèiligidh a' toirt a-steach a sheòladh MAC, a bharrachd air dè dìreach a tha e ag iarraidh fhaighinn bhon fhrithealaiche DHCP. Tha structar a’ phacaid air a mhìneachadh sa chlàr gu h-ìosal.
Clàr structar pacaid DHCPDISCOVER
An suidheachadh sa phacaid
Ainm luach
Eisimpleir:
Ro-ràdh
A ’dol ann
Mìneachadh
2
Seòrsa bathar-cruaidh
1
Hex
1
Seòrsa seòladh bathar-cruaidh, anns a 'phròtacal seo 1 - MAC
3
Bidh bathar-cruaidh a’ seòladh fad
6
Hex
1
Inneal MAC seòladh fad
4
Hops
1
Hex
1
An àireamh de shlighean eadar-mheadhanach
5
ID a ’ghluasaid
23:cf:de:1d
Hex
4
Aithneachadh malairt gun samhail. Air a ghineadh leis an neach-dèiligidh aig toiseach gnìomhachd iarrtas
7
Chaidh an dàrna fear seachad
0
Hex
4
Ùine ann an diogan bho thoiseach a 'phròiseas airson seòladh fhaighinn
9
Bratan boot
0
Hex
2
Brataichean sònraichte a dh'fhaodar a shuidheachadh gus paramadairean protocol a chomharrachadh
11
Seòladh IP neach-dèiligidh
0.0.0.0
Loidhne
4
Seòladh IP teachdaiche (ma tha gin ann)
15
Seòladh IP an neach-dèiligidh agad
0.0.0.0
Loidhne
4
Seòladh IP a tha am frithealaiche a’ tabhann (ma tha sin ri fhaighinn)
19
An ath sheòladh IP frithealaiche
0.0.0.0
Loidhne
4
Seòladh IP an fhrithealaiche (ma tha fios)
23
Seòladh IP àidseant sealaidheachd
172.16.114.41
Loidhne
4
Seòladh IP an neach-ionaid sealaidheachd (mar eisimpleir, suidse)
27
Seòladh MAC an neach-dèiligidh
14:d6:4d:a7:c9:55
Hex
6
Seòladh MAC neach-cuiridh a’ phacaid (neach-dèiligidh)
31
Padding seòladh bathar-cruaidh teachdaiche
Hex
10
Seata glèidhte. Mar as trice air a lìonadh le neoni
41
Ainm aoigheachd an fhrithealaiche
Loidhne
64
Ainm an fhrithealaiche DHCP. Mar as trice chan eil e air a chraoladh
105
Ainm an fhaidhle boot
Loidhne
128
Ainm faidhle air an fhrithealaiche a bhios stèiseanan gun diosc a’ cleachdadh nuair a bhios iad a’ tòiseachadh
235
Briosgaidean draoidheachd
63: 82: 53: 63
Hex
4
Àireamh “draoidheachd”, a rèir dè, inc. faodaidh tu dearbhadh gu bheil am pasgan seo le protocol DHCP
Roghainnean DHCP. Faodaidh a dhol ann an òrdugh sam bith
236
Àireamh roghainn
53
Dùb
1
Roghainn 53, a tha a’ sònrachadh an seòrsa pacaid DHCP
Àireamh roghainn
50
Dùb
1
Dè an seòladh IP a tha an neach-dèiligidh ag iarraidh fhaighinn?
Fad roghainn
4
Dùb
1
Luach roghainn
172.16.134.61
Loidhne
4
Àireamh roghainn
55
1
Paramadairean lìonra a dh’ iarr an neach-dèiligidh. Faodaidh an co-dhèanamh a bhith eadar-dhealaichte
01 - Masg lìonra
03 - Geata
06 - DNS
oc - Ainm an òstair
0f - ainm àrainn lìonra
1c - seòladh iarrtas craolaidh (craoladh)
42 - Ainm frithealaiche TFTP
79 - Slighe Statach gun chlas
Fad roghainn
8
1
Luach roghainn
01:03:06:0c:0f:1c:42:79
8
Àireamh roghainn
82
Dùb
Roghainn 82, a bheir seachad seòladh MAC an inneal ath-chraolaidh agus cuid de luachan a bharrachd.
Mar as trice, is e seo am port suidse air a bheil an neach-dèiligidh DHCP deireannach a’ ruith.Tha paramadairean a bharrachd anns an roghainn seo.Is e a’ chiad byte an àireamh de “suboption”, an dàrna fear a fhaid, an uairsin a luach.
Anns a 'chùis seo, ann an roghainn 82, tha na fo-roghainnean air an neadachadh:
Agent Circuit ID = 00:04:00:01:00:04, far a bheil an dà bytes mu dheireadh mar am port teachdaiche DHCP às an tàinig an t-iarrtas
Agent Remote ID = 00:06:c8:be:19:93:11:48 - seòladh MAC an inneal ath-aithris DHCP
Deireadh a’ phacaid
255
Dùb
1
Tha 255 a’ samhlachadh deireadh a’ phacaid
DHCPOFAIR
Cho luath ‘s a gheibh an frithealaiche am pasgan DHCPDISCOVER agus ma chì e gun urrainn dha rudeigin a thabhann don neach-dèiligidh bhon fhear a chaidh iarraidh, cruthaichidh e freagairt air a shon - DHCPDISCOVER. Tha am freagairt air a chuir chun phort “às an tàinig e”, le craoladh, oir aig an àm seo, chan eil seòladh IP aig an neach-dèiligidh fhathast, mar sin chan urrainn dha gabhail ris a’ phacaid ach ma thèid a chuir tro chraoladh. Tha an neach-dèiligidh ag aithneachadh gur e pasgan a tha seo dha leis an t-seòladh MAC aige taobh a-staigh a’ phacaid, a bharrachd air an àireamh malairt a bhios e a ’gineadh aig an àm a thèid a’ chiad phacaid a chruthachadh.
Clàr structar pacaid DHCPOFFER
An suidheachadh sa phacaid
Ainm luach (cumanta)
Eisimpleir:
Ro-ràdh
A ’dol ann
Mìneachadh
2
Seòrsa bathar-cruaidh
1
Hex
1
Seòrsa seòladh bathar-cruaidh, anns a 'phròtacal seo 1 - MAC
3
Bidh bathar-cruaidh a’ seòladh fad
6
Hex
1
Inneal MAC seòladh fad
4
Hops
1
Hex
1
An àireamh de shlighean eadar-mheadhanach
5
ID a ’ghluasaid
23:cf:de:1d
Hex
4
Aithneachadh malairt gun samhail. Air a ghineadh leis an neach-dèiligidh aig toiseach gnìomhachd iarrtas
7
Chaidh an dàrna fear seachad
0
Hex
4
Ùine ann an diogan bho thoiseach a 'phròiseas airson seòladh fhaighinn
9
Bratan boot
0
Hex
2
Brataichean sònraichte a dh'fhaodar a shuidheachadh gus paramadairean protocol a chomharrachadh. Anns a 'chùis seo, tha 0 a' ciallachadh an seòrsa iarrtas Unicast
11
Seòladh IP neach-dèiligidh
0.0.0.0
Loidhne
4
Seòladh IP teachdaiche (ma tha gin ann)
15
Seòladh IP an neach-dèiligidh agad
172.16.134.61
Loidhne
4
Seòladh IP a tha am frithealaiche a’ tabhann (ma tha sin ri fhaighinn)
19
An ath sheòladh IP frithealaiche
0.0.0.0
Loidhne
4
Seòladh IP an fhrithealaiche (ma tha fios)
23
Seòladh IP àidseant sealaidheachd
172.16.114.41
Loidhne
4
Seòladh IP an neach-ionaid sealaidheachd (mar eisimpleir, suidse)
27
Seòladh MAC an neach-dèiligidh
14:d6:4d:a7:c9:55
Hex
6
Seòladh MAC neach-cuiridh a’ phacaid (neach-dèiligidh)
31
Padding seòladh bathar-cruaidh teachdaiche
Hex
10
Seata glèidhte. Mar as trice air a lìonadh le neoni
41
Ainm aoigheachd an fhrithealaiche
Loidhne
64
Ainm an fhrithealaiche DHCP. Mar as trice chan eil e air a chraoladh
105
Ainm an fhaidhle boot
Loidhne
128
Ainm faidhle air an fhrithealaiche a bhios stèiseanan gun diosc a’ cleachdadh nuair a bhios iad a’ tòiseachadh
235
Briosgaidean draoidheachd
63: 82: 53: 63
Hex
4
Àireamh “draoidheachd”, a rèir dè, inc. faodaidh tu dearbhadh gu bheil am pasgan seo le protocol DHCP
Roghainnean DHCP. Faodaidh a dhol ann an òrdugh sam bith
236
Àireamh roghainn
53
Dùb
1
Roghainn 53, a tha a’ mìneachadh an seòrsa pacaid DHCP 2 - DHCPOFFER
Fad roghainn
1
Dùb
1
Luach roghainn
2
Dùb
1
Àireamh roghainn
1
Dùb
1
Roghainn masg lìonra a thabhann don neach-dèiligidh DHCP
Fad roghainn
4
Dùb
1
Luach roghainn
255.255.224.0
Loidhne
4
Àireamh roghainn
3
Dùb
1
Roghainn gus geata àbhaisteach a thabhann don neach-dèiligidh DHCP
Fad roghainn
4
Dùb
1
Luach roghainn
172.16.12.1
Loidhne
4
Àireamh roghainn
6
Dùb
1
Roghainn DHCP a thabhann don neach-dèiligidh DNS
Fad roghainn
4
Dùb
1
Luach roghainn
8.8.8.8
Loidhne
4
Àireamh roghainn
51
Dùb
1
Fad beatha nam paramadairean lìonra a chaidh a chuir a-mach ann an diogan, às deidh sin feumaidh an neach-dèiligidh DHCP an iarraidh a-rithist
Fad roghainn
4
Dùb
1
Luach roghainn
86400
Dùb
4
Àireamh roghainn
82
Dùb
1
Roghainn 82, ag ath-aithris na thàinig ann an DHCPDISCOVER
Deireadh a’ phacaid
255
Dùb
1
Tha 255 a’ samhlachadh deireadh a’ phacaid
DHCPREACHADH
Às deidh don neach-dèiligidh DHCPOFFER fhaighinn, bidh e a ’dèanamh pasgan ag iarraidh paramadairean lìonra chan ann air a h-uile seirbheisiche DHCP air an lìonra, ach dìreach gu aon fhear sònraichte, leis an tairgse DHCPOFFER aige“ a bu toil leis ”as motha. Faodaidh na slatan-tomhais “coltach” a bhith eadar-dhealaichte agus an urra ri buileachadh DHCP an neach-dèiligidh. Tha an neach a gheibh an t-iarrtas air a shònrachadh a’ cleachdadh seòladh MAC an fhrithealaiche DHCP. Cuideachd, faodaidh an neach-dèiligidh pasgan DHCPREQUEST a chuir gun a bhith a’ gineadh DHCPDISCOVER an toiseach, ma chaidh seòladh IP an fhrithealaiche fhaighinn roimhe seo.
Clàr structar pacaid DHCPREQUEST
An suidheachadh sa phacaid
Ainm luach (cumanta)
Eisimpleir:
Ro-ràdh
A ’dol ann
Mìneachadh
2
Seòrsa bathar-cruaidh
1
Hex
1
Seòrsa seòladh bathar-cruaidh, anns a 'phròtacal seo 1 - MAC
3
Bidh bathar-cruaidh a’ seòladh fad
6
Hex
1
Inneal MAC seòladh fad
4
Hops
1
Hex
1
An àireamh de shlighean eadar-mheadhanach
5
ID a ’ghluasaid
23:cf:de:1d
Hex
4
Aithneachadh malairt gun samhail. Air a ghineadh leis an neach-dèiligidh aig toiseach gnìomhachd iarrtas
7
Chaidh an dàrna fear seachad
0
Hex
4
Ùine ann an diogan bho thoiseach a 'phròiseas airson seòladh fhaighinn
9
Bratan boot
8000
Hex
2
Brataichean sònraichte a dh'fhaodar a shuidheachadh gus paramadairean protocol a chomharrachadh. Anns a 'chùis seo, tha "craoladh" air a shuidheachadh
11
Seòladh IP neach-dèiligidh
0.0.0.0
Loidhne
4
Seòladh IP teachdaiche (ma tha gin ann)
15
Seòladh IP an neach-dèiligidh agad
172.16.134.61
Loidhne
4
Seòladh IP a tha am frithealaiche a’ tabhann (ma tha sin ri fhaighinn)
19
An ath sheòladh IP frithealaiche
0.0.0.0
Loidhne
4
Seòladh IP an fhrithealaiche (ma tha fios)
23
Seòladh IP àidseant sealaidheachd
172.16.114.41
Loidhne
4
Seòladh IP an neach-ionaid sealaidheachd (mar eisimpleir, suidse)
27
Seòladh MAC an neach-dèiligidh
14:d6:4d:a7:c9:55
Hex
6
Seòladh MAC neach-cuiridh a’ phacaid (neach-dèiligidh)
31
Padding seòladh bathar-cruaidh teachdaiche
Hex
10
Seata glèidhte. Mar as trice air a lìonadh le neoni
41
Ainm aoigheachd an fhrithealaiche
Loidhne
64
Ainm an fhrithealaiche DHCP. Mar as trice chan eil e air a chraoladh
105
Ainm an fhaidhle boot
Loidhne
128
Ainm faidhle air an fhrithealaiche a bhios stèiseanan gun diosc a’ cleachdadh nuair a bhios iad a’ tòiseachadh
235
Briosgaidean draoidheachd
63: 82: 53: 63
Hex
4
Àireamh “draoidheachd”, a rèir dè, inc. faodaidh tu dearbhadh gu bheil am pasgan seo le protocol DHCP
Roghainnean DHCP. Faodaidh a dhol ann an òrdugh sam bith
236
Àireamh roghainn
53
Dùb
3
Roghainn 53, a tha a’ mìneachadh a’ phacaid DHCP seòrsa 3 - DHCPREQUEST
Fad roghainn
1
Dùb
1
Luach roghainn
3
Dùb
1
Àireamh roghainn
61
Dùb
1
ID teachdaiche: 01 (airson Ehernet) + seòladh MAC an neach-dèiligidh
Fad roghainn
7
Dùb
1
Luach roghainn
01:2c:ab:25:ff:72:a6
Hex
7
Àireamh roghainn
60
Dùb
"Aithneachadh clas reiceadair". Anns a 'chùis agam, tha e ag aithris air dreach cleachdaiche DHCP. Is dòcha gu bheil innealan eile a 'tilleadh rudeigin eadar-dhealaichte. Tha Windows mar eisimpleir ag aithris MSFT 5.0
Fad roghainn
11
Dùb
Luach roghainn
udhcp 0.9.8
Loidhne
Àireamh roghainn
55
1
Paramadairean lìonra a dh’ iarr an neach-dèiligidh. Faodaidh an co-dhèanamh a bhith eadar-dhealaichte
01 - Masg lìonra
03 - Geata
06 - DNS
oc - Ainm an òstair
0f - ainm àrainn lìonra
1c - seòladh iarrtas craolaidh (craoladh)
42 - Ainm frithealaiche TFTP
79 - Slighe Statach gun chlas
Fad roghainn
8
1
Luach roghainn
01:03:06:0c:0f:1c:42:79
8
Àireamh roghainn
82
Dùb
1
Roghainn 82, ag ath-aithris na thàinig ann an DHCPDISCOVER
Deireadh a’ phacaid
255
Dùb
1
Tha 255 a’ samhlachadh deireadh a’ phacaid
DHCPACK
Mar dhearbhadh gu bheil “tha, tha sin ceart, is e seo an seòladh IP agad, agus cha toir mi a-mach e do dhuine sam bith eile” bhon t-seirbheisiche DHCP, pacaid ann an cruth DHCPACK bhon fhrithealaiche chun neach-dèiligidh a ’frithealadh. Tha e air a chraoladh dìreach mar phasganan eile. Ged a tha, anns a’ chòd gu h-ìosal airson frithealaiche DHCP air a chuir an gnìomh ann am Python, dìreach gun fhios nach bi mi a’ dùblachadh iarrtas craolaidh sam bith le bhith a’ cur pacaid gu IP teachdaiche sònraichte, ma tha fios air mu thràth. A bharrachd air an sin, chan eil dragh sam bith aig frithealaiche DHCP a bheil am pasgan DHCPACK air an neach-dèiligidh a ruighinn. Mura faigh an neach-dèiligidh DHCPACK, an uairsin às deidh greis bidh e dìreach ag ath-aithris DHCPREQUEST
Clàr structar pacaid DHCPACK
An suidheachadh sa phacaid
Ainm luach (cumanta)
Eisimpleir:
Ro-ràdh
A ’dol ann
Mìneachadh
2
Seòrsa bathar-cruaidh
1
Hex
1
Seòrsa seòladh bathar-cruaidh, anns a 'phròtacal seo 1 - MAC
3
Bidh bathar-cruaidh a’ seòladh fad
6
Hex
1
Inneal MAC seòladh fad
4
Hops
1
Hex
1
An àireamh de shlighean eadar-mheadhanach
5
ID a ’ghluasaid
23:cf:de:1d
Hex
4
Aithneachadh malairt gun samhail. Air a ghineadh leis an neach-dèiligidh aig toiseach gnìomhachd iarrtas
7
Chaidh an dàrna fear seachad
0
Hex
4
Ùine ann an diogan bho thoiseach a 'phròiseas airson seòladh fhaighinn
9
Bratan boot
8000
Hex
2
Brataichean sònraichte a dh'fhaodar a shuidheachadh gus paramadairean protocol a chomharrachadh. Anns a 'chùis seo, tha "craoladh" air a shuidheachadh
11
Seòladh IP neach-dèiligidh
0.0.0.0
Loidhne
4
Seòladh IP teachdaiche (ma tha gin ann)
15
Seòladh IP an neach-dèiligidh agad
172.16.134.61
Loidhne
4
Seòladh IP a tha am frithealaiche a’ tabhann (ma tha sin ri fhaighinn)
19
An ath sheòladh IP frithealaiche
0.0.0.0
Loidhne
4
Seòladh IP an fhrithealaiche (ma tha fios)
23
Seòladh IP àidseant sealaidheachd
172.16.114.41
Loidhne
4
Seòladh IP an neach-ionaid sealaidheachd (mar eisimpleir, suidse)
27
Seòladh MAC an neach-dèiligidh
14:d6:4d:a7:c9:55
Hex
6
Seòladh MAC neach-cuiridh a’ phacaid (neach-dèiligidh)
31
Padding seòladh bathar-cruaidh teachdaiche
Hex
10
Seata glèidhte. Mar as trice air a lìonadh le neoni
41
Ainm aoigheachd an fhrithealaiche
Loidhne
64
Ainm an fhrithealaiche DHCP. Mar as trice chan eil e air a chraoladh
105
Ainm an fhaidhle boot
Loidhne
128
Ainm faidhle air an fhrithealaiche a bhios stèiseanan gun diosc a’ cleachdadh nuair a bhios iad a’ tòiseachadh
235
Briosgaidean draoidheachd
63: 82: 53: 63
Hex
4
Àireamh “draoidheachd”, a rèir dè, inc. faodaidh tu dearbhadh gu bheil am pasgan seo le protocol DHCP
Roghainnean DHCP. Faodaidh a dhol ann an òrdugh sam bith
236
Àireamh roghainn
53
Dùb
3
Roghainn 53, a tha a’ mìneachadh a’ phacaid DHCP seòrsa 5 - DHCPACK
Fad roghainn
1
Dùb
1
Luach roghainn
5
Dùb
1
Àireamh roghainn
1
Dùb
1
Roghainn masg lìonra a thabhann don neach-dèiligidh DHCP
Fad roghainn
4
Dùb
1
Luach roghainn
255.255.224.0
Loidhne
4
Àireamh roghainn
3
Dùb
1
Roghainn gus geata àbhaisteach a thabhann don neach-dèiligidh DHCP
Fad roghainn
4
Dùb
1
Luach roghainn
172.16.12.1
Loidhne
4
Àireamh roghainn
6
Dùb
1
Roghainn DHCP a thabhann don neach-dèiligidh DNS
Fad roghainn
4
Dùb
1
Luach roghainn
8.8.8.8
Loidhne
4
Àireamh roghainn
51
Dùb
1
Fad beatha nam paramadairean lìonra a chaidh a chuir a-mach ann an diogan, às deidh sin feumaidh an neach-dèiligidh DHCP an iarraidh a-rithist
Fad roghainn
4
Dùb
1
Luach roghainn
86400
Dùb
4
Àireamh roghainn
82
Dùb
1
Roghainn 82, ag ath-aithris na thàinig ann an DHCPDISCOVER
Deireadh a’ phacaid
255
Dùb
1
Tha 255 a’ samhlachadh deireadh a’ phacaid
suidheachadh
Tha an stàladh gu dearbh a’ toirt a-steach stàladh nam modalan python a tha riatanach airson obair. Thathas a 'gabhail ris gu bheil MySQL air a stàladh agus air a rèiteachadh mu thràth.
Bidh sinn a’ cruthachadh stòr-dàta MySQL, a’ luchdachadh suas an dump pydhcp.sql a-steach ann, agus a’ rèiteachadh am faidhle rèiteachaidh.
Rèiteachadh
Tha a h-uile suidheachadh frithealaiche ann am faidhle xml. Faidhle iomraidh:
1.0 0.0.0.0 255.255.255.255 192.168.0.71 8600 1 255.255.255.0 192.168.0.1 òstair ionadail deuchainn deuchainn pydhcp roghainn_8.8.8.8_hex:sw_port82:1:20 roghainn_22_hex:sw_port82:2:16 roghainn_18_hex:sw_mac:82:26 40 tagh ip, masg, router, dns bho luchd-cleachdaidh far a bheil upper(mac) = upper ('{option_3_AgentRemoteId_hex}') agus upper (port) = gu h-àrd ('{option_1_AgentCircuitId_port_hex}') tagh ip, masg, router, dns bho luchd-cleachdaidh far a bheil upper (mac) = upper ('{sw_mac}') agus upper (port) = upper ('{sw_port82}') tagh ip, masg, router, dns bho luchd-cleachdaidh far a bheil upper(mac) = gu h-àrd ('{ClientMacAddress}') cuir a-steach ann an eachdraidh (id, dt, mac, ip, beachd) luachan (null, a-nis (), '{ClientMacAddress}', '{RequestedIpAddress}', 'DHCPACK/INFORM')
A-nis nas mionaidiche air na tagaichean:
Tha an earrann dhcpserver a’ toirt cunntas air na roghainnean bunaiteach airson am frithealaiche a thòiseachadh, is iad sin:
aoigheachd - dè an seòladh IP a bhios am frithealaiche ag èisteachd ris air port 67
craoladh - dè an ip a tha air a chraoladh airson DHCPOFFER agus DHCPACK
DHCPServer - dè an seòladh ip aig an fhrithealaiche DHCP
Ùine màil LeaseTime den t-seòladh IP a chaidh a thoirt seachad
ThreadLimit - cia mheud snàithlean a tha a’ ruith aig an aon àm gus pacaidean UDP a tha a’ tighinn a-steach air port 67 a phròiseasadh. Tha còir aige cuideachadh le pròiseactan làn luchd
defaultMask, defaultRouter,defaultDNS - na tha air a thabhann don neach-aontachaidh gu bunaiteach ma lorgar IP san stòr-dàta, ach nach eil paramadairean a bharrachd air an sònrachadh air a shon
earrann mysql:
òstair, ainm-cleachdaidh, facal-faire, bun-ainm - tha a h-uile dad a 'bruidhinn air a shon fhèin. Tha structar stòr-dàta tuairmseach air a phostadh air GitHub
Earrann ceiste: thathar a’ toirt cunntas air iarrtasan airson TAIGH-FHÈIN/ACK fhaighinn an seo:
offer_count - an àireamh de loidhnichean le iarrtasan a thilleas toradh mar ip, masg, router, dns
offer_n — sreang ceist. Ma tha tilleadh falamh, cuir an gnìomh an t-iarrtas tairgse a leanas
history_sql - ceist a tha a’ sgrìobhadh, mar eisimpleir, gu “eachdraidh ùghdarrais” airson neach-clàraidh
Faodaidh iarrtasan a bhith a’ toirt a-steach caochladairean sam bith bhon roinn roghainnean no roghainnean bho phròtacal DHCP.
Earrann roghainnean. Seo far am fàs e nas inntinniche. An seo is urrainn dhuinn caochladairean a chruthachadh a chleachdas sinn nas fhaide air adhart ann an earrann nan ceist.
Mar eisimpleir:
option_82_hex:sw_port1:20:22
, tha an loidhne-àithne seo a’ toirt na loidhne gu lèir a thàinig a-steach don iarrtas DHCP roghainn 82, ann an cruth hex, anns an raon bho 20 gu 22 bytes in-ghabhalach agus ga chuir anns an caochlaideach ùr sw_port1 (port suidse às an tàinig an t-iarrtas)
option_82_hex:sw_mac:26:40
, mìnich an caochladair sw_mac, a’ toirt an hex bhon raon 26:40
Chì thu a h-uile roghainn a dh'fhaodar a chleachdadh ann an ceistean le bhith a' tòiseachadh an fhrithealaiche leis an -d switch. Chì sinn rudeigin mar an loga seo:
Mar sin, is urrainn dhuinn caochladair sam bith a phasgadh ann an {} agus thèid a chleachdadh ann an ceist SQL.
Leig leinn clàradh airson eachdraidh a fhuair an neach-dèiligidh an seòladh IP:
A 'tòiseachadh air an fhrithealaiche
./pydhcpdb.py -d -c config.xml
— d modh toraidh tòcan DEBUG
- c <filename> faidhle rèiteachaidh
Mion-fhiosrachadh
Agus a-nis barrachd fiosrachaidh mu bhith a’ buileachadh an fhrithealaiche ann am Python. Is e pian a th’ ann. Chaidh Python ionnsachadh air an itealan. Tha mòran amannan gan dèanamh ann an stoidhle “wow, dòigh air choireigin thug mi air obrachadh.” Gun a bhith air a mheudachadh idir, agus air fhàgail san fhoirm seo gu ìre mhòr air sgàth glè bheag de eòlas ann an leasachadh Python. Gabhaidh mi còmhnaidh air na taobhan as inntinniche de bhuileachadh an fhrithealaiche ann an “còd”.
Parser faidhle rèiteachaidh XML
Tha am modal Python àbhaisteach xml.dom air a chleachdadh. Tha e coltach gu bheil e sìmplidh, ach nuair a bha e air a bhuileachadh bha dìth sgrìobhainnean soilleir agus eisimpleirean air an lìonra a’ cleachdadh a’ mhodal seo.
tree = minidom.parse(gconfig["config_file"]) mconfig=tree.getElementsByTagName("mysql") airson elem ann am mconfig: gconfig["mysql_host"]=elem.getElementsByTagName ("òstair")[0].firstChild.data gconfig["mysql_username"] = elem.getElementsByTagName ("ainm-cleachdaidh")[0].firstChild.data gconfig["mysql_password"] = elem.getElementsByTagName ("facal-faire")[0].firstChild.data gconfig["mysql_basename"] =elem.getElementsByTagName ("bun-ainm")[0].firstChild.data dconfig=tree.getElementsByTagName ("dhcpserver") airson elem ann an dconfig: gconfig["craoladh"] = elem.getElementsByTagName ("craoladh")[0]. firstChild.data gconfig["dhcp_host"]=elem.getElementsByTagName("òstair")[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("DHCPServer")[0].firstChild.data gconfig["dhcp_default"] =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 ("ceist") airson elem ann an qconfig: gconfig["offer_count"]=elem.getElementsByTagName ("offer_count")[0].firstChild.data airson àireamh ann an raon (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("roghainnean") airson elem ann an roghainnean: nód=elem.getElementsByTagName ("roghainn") airson roghainnean ann an nód : roghainneanMod.append(options.firstChild.data)
Ioma-snàthainn
Gu h-annasach gu leòr, tha multithreading ann am Python air a chuir an gnìomh gu math soilleir agus sìmplidh.
def PacketWork(data, addr): ... # buileachadh parsadh a’ phacaid a tha a’ tighinn a-steach agus freagairt a thoirt dha ... fhad ‘s a tha True: data, addr = udp_socket.recvfrom(1024) # a’ feitheamh ris a’ phacaid UDP snàithlean = threading.Thread( target=PacketWork , args = (dàta, addr,)).start() # mar a thàinig e - bidh sinn a’ cur air bhog an gnìomh PacketWork a chaidh a mhìneachadh roimhe air a’ chùl le paramadairean fhad ‘s a tha threading.active_count()> gconfig ["dhcp_ThreadLimit"]: ùine. cadal (1) # ma tha an àireamh Tha barrachd snàithleanan a’ ruith mu thràth na tha anns na roghainnean, bidh sinn a’ feitheamh gus am bi nas lugha dhiubh ann
Faigh / cuir pasgan DHCP
Gus casg a chuir air pacaidean UDP a tha a’ tighinn tron chairt lìonra, feumaidh tu an socaid “togail”:
AF_INET - a’ ciallachadh gur e cruth an t-seòlaidh IP: port. Is dòcha gu bheil AF_UNIX ann cuideachd - far a bheil an seòladh air a thoirt seachad le ainm an fhaidhle.
SOCK_DGRAM - a’ ciallachadh nach gabh sinn ri “pasgan amh”, ach fear a tha air a dhol tron bhalla-teine mar-thà, agus le pacaid air a ghearradh gu ìre. An fheadhainn sin. chan fhaigh sinn ach pasgan UDP às aonais a’ phàirt “corporra” de phasgan pacaid UDP. Ma chleachdas tu a’ bhratach SOCK_RAW, feumaidh tu an “còmhdaich” seo a pharsadh cuideachd.
, agus chun an t-seòlaidh “cò às a thàinig am pasgan”:
udp_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # atharraich an t-socaid gu modh ioma-èisteachd rz=udp_socket.sendto(packetack, addr)
, far a bheil SOL_SOCKET a’ ciallachadh an “ìre pròtacal” airson roghainnean a shuidheachadh,
, SO_BROADCAST roghainn gu bheil am pasgan clogaid “craoladh”
, SO_REUSEADDR bidh an roghainn ag atharrachadh an t-socaid gu modh “mòran luchd-èisteachd”. Ann an teòiridh, chan eil feum air sa chùis seo, ach air aon de na frithealaichean FreeBSD air an do rinn mi deuchainn, cha do dh'obraich an còd às aonais an roghainn seo.
A’ parsadh pacaid DHCP
Seo far an do chòrd Python rium gu mòr. Tha e a 'tionndadh a-mach gu bheil a-mach às a' bhogsa tha e a 'leigeil leat a bhith gu math sùbailte leis a' bytecode. A’ leigeil leis a bhith air eadar-theangachadh gu furasta gu luachan deicheach, teudan agus heics - i.e. is e seo a dh’ fheumas sinn gus structar a’ phacaid a thuigsinn. Mar sin, mar eisimpleir, gheibh thu raon de bytes ann an HEX agus dìreach bytes: