DHCP + frithealaiche Mysql ann am Python

DHCP + frithealaiche Mysql ann am Python

B’ e adhbhar a’ phròiseict seo:

  • Ag ionnsachadh mu DHCP air lìonra IPv4
  • 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:

  1. 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.
  2. 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.
  3. 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.
  4. 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

DHCP + frithealaiche Mysql ann am Python

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:

DHCP + frithealaiche Mysql ann am Python

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

1
Iarrtas Boot
1
Hex
1
Seòrsa teachdaireachd. 1 - iarrtas bho neach-dèiligidh gu frithealaiche, 2 - freagairt bho fhrithealaiche gu neach-dèiligidh

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

1 - DHCPDISCOVER
3 - DHCPREQUEST
2 - DHCPOFFER
5 - DHCPACK
8 - DHCPINFORM

 
Fad roghainn
1
Dùb
1

 
Luach roghainn
1
Dùb
1

 
À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

 
Fad roghainn
18
Dùb
 

 
Luach roghainn
01:06
00:04:00:01:00:04
02:08
00:06:c8:be:19:93:11:48
Hex
 

 
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

1
Iarrtas Boot
1
Hex
1
Seòrsa teachdaireachd. 1 - iarrtas bho neach-dèiligidh gu frithealaiche, 2 - freagairt bho fhrithealaiche gu neach-dèiligidh

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

 
Fad roghainn
18
Dùb
1

 
Luach roghainn
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d:ec
Dùb
18

 
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

1
Iarrtas Boot
1
Hex
1
Seòrsa teachdaireachd. 1 - iarrtas bho neach-dèiligidh gu frithealaiche, 2 - freagairt bho fhrithealaiche gu neach-dèiligidh

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

 
Fad roghainn
18
Dùb
1

 
Luach roghainn
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d:ec
Dùb
18

 
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

1
Iarrtas Boot
2
Hex
1
Seòrsa teachdaireachd. 1 - iarrtas bho neach-dèiligidh gu frithealaiche, 2 - freagairt bho fhrithealaiche gu neach-dèiligidh

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

 
Fad roghainn
18
Dùb
1

 
Luach roghainn
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d:ec
Dùb
18

 
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.

FreeBSD

pkg stàlaich python3 python3 -m cinnteachpip pip3 stàlaich mysql-connector

Ubuntu

sudo apt-faigh stàlaich python3 sudo apt-faigh stàladh pip3 sudo pip3 stàlaich mysql-connector

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:

-- ràinig pacaid DHCPINFORM port 67, bho 0025224ad764 , b'x91xa5xe0xa3xa5xa9-x8fx8a' , ('172.30.114.25', 68) {'ClientMacAddress': '0025224'Address': '764', b'x00xa7xe91xa5xa0xa3-x5fx9a' %"Jxd8d' , 'HType': 'Ethernet', 'HostName': b'x8xa43xe0.0.0.0xa5.0xa0025224xa764-x172.30.128.13fx00a', 'ReqListDNS': Fìor, 'ReqListDomainName': Fìor, 'ReqListPerfowmRouterDiscover': True, 'ReqList': True, 'ReqList': True, 'ReqList': True ‘ReqListSubnetM faighnich’: Fìor, ‘ReqListVendorSpecInfo’: 00, ‘RequestedIpAddress’: ‘172.30.114.25’, ‘Vendor’: b’MSFT 308’, ‘chaddr’: ‘6ad1’, ‘ciaddr’: ‘82 , 'brataichean': b'x12x12', 'giaddr': '53', 'gpoz': 53, 'hlen': 55, 'hops': 55, 'htype': 'MAC', 'magic_cookie': b'cx60Sc ', 'op': 'DHCPINFORM', 'roghainn 60': 61, 'roghainn 61': 82, 'roghainn 82': 82, 'roghainn 12': 01, 'roghainn 06': 00, 'roghainn 04': 00, ' option_01_byte': b'x00x06x02x08x00x06x00x1x9x2x82x12010600040001000602080006001' b'x589x2x82eXx18exb82xad', 'roghainn_12_hex': '01ad' _06_len': 00 04, 'option_00_str': "b'x01x00x06x02x08x00x06x00x1x9x2x768x0.0.0.0x001x589eXx2exb1xad'", 'toradh': False, 'secs': 06 'siaddr': '89', 'sw_mac': '8e3eb897ad', 'sw_port8': '0.0.0.0', 'xidbyte': b'

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:

DHCP + frithealaiche Mysql ann am Python

DHCP + frithealaiche Mysql ann am Python

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”:

udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM,socket.IPPROTO_UDP) udp_socket.bind((gconfig ["dhcp_host"],67))

, far a bheil na brataichean:

  • 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.

Faodaidh cur pacaid a bhith mar chraoladh:

                    udp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) # atharraich an t-socaid gu modh craolaidh rz=udp_socket.sendto(packetack, (gconfig ["craoladh"],68))

, 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:

    res["xidhex"] = dàta[4:8].hex() res["xidbyte"] = dàta[4:8]

, pacaich na bytes ann an structar:

res["brataichean"] = pasgan ('BB', dàta[10], dàta[11])

Faigh IP bhon structar:

res["ciaddr"] = socket.inet_ntoa(pasgan ('BBBB', dàta[12], dàta[13],data[14],data[15]));

Agus a chaochladh:

res=res+socket.inet_pton(socket.AF_INET, gconfig["dhcp_Server"])

Sin uile airson an-dràsta 😉

Source: www.habr.com

Cuir beachd ann