Freastalaí DHCP + Mysql i Python

Freastalaí DHCP + Mysql i Python

Ba é cuspóir an tionscadail seo:

  • Ag foghlaim faoi DHCP ar líonra IPv4
  • Ag foghlaim Python (beagán níos mó ná ón tús 😉)
  • athsholáthair freastalaí DB2DHCP (mo fhorc), bunaidh anseo, atá ag éirí níos deacra le chéile don OS nua. Agus ní maith liom go bhfuil sé dénártha nach bhfuil aon bhealach a "athrú faoi láthair"
  • freastalaí DHCP oibre a fháil a bhfuil an cumas aige seoladh IP suibscríobhaí a roghnú trí úsáid a bhaint as mac an síntiúsóra nó teaglaim port mac+ a athrú (Rogha 82)
  • ag scríobh rothar eile (Ó! seo an ghníomhaíocht is fearr liom)
  • ag fáil tuairimí faoi do lámh sa chlub ar Habrahabr (nó níos fearr fós, cuireadh) 😉

Toradh: oibríonn sé 😉 Tástáilte ar FreeBSD agus Ubuntu OS. Teoiriciúil, is féidir an cód a iarraidh a bheith ag obair faoi aon OS, mar gheall ar Is cosúil nach bhfuil aon cheangal sonrach sa chód.
Go cúramach! Tá go leor eile le teacht.

Nasc leis an stór le haghaidh amaitéarach "dteagmháil beo".

Tá an próiseas a bhaineann le “staidéar a dhéanamh ar na crua-earraí” a shuiteáil, a chumrú agus a úsáid i bhfad níos ísle, agus ansin teoiric bheag faoin bprótacal DHCP. Dom féin. Agus don stair 😉

Teoiric bheag

Cad é DHCP?

Is prótacal líonra é seo a ligeann do ghléas a sheoladh IP (agus paraiméadair eile cosúil le geata, DNS, etc.) a fháil amach ó fhreastalaí DHCP. Déantar paicéid a mhalartú trí úsáid a bhaint as prótacal UDP. Is é seo a leanas prionsabal oibríochta an fheiste nuair a iarrtar paraiméadair líonra:

  1. Seolann an gléas (cliant) iarratas craolta UDP (DHCPDISCOVER) ar fud an líonra leis an iarratas “bhuel, tugann duine éigin seoladh IP dom.” Thairis sin, de ghnáth (ach ní i gcónaí) tarlaíonn an t-iarratas ó chalafort 68 (foinse), agus is é calafort 67 (ceann scríbe) an ceann scríbe. Seolann roinnt gléasanna paicéid ó phort 67 freisin. Tá seoladh MAC na feiste cliaint san áireamh sa phacáiste DHCPDISCOVER.
  2. Déanann gach freastalaí DHCP atá suite ar an líonra (agus d'fhéadfadh go mbeadh roinnt acu) tairiscint DHCPOFFER le socruithe líonra don fheiste a sheol DHCPDISCOVER, agus freisin é a chraoladh thar an líonra. Tá sainaithint cé dó a bhfuil an paicéad seo beartaithe bunaithe ar sheoladh MAC an chliaint a soláthraíodh níos luaithe san iarratas DHCPDISCOVER.
  3. Glacann an cliant le paicéid le moltaí maidir le socruithe líonra, roghnaíonn sé an ceann is tarraingtí (d'fhéadfadh na critéir a bheith difriúil, mar shampla, am seachadta na bpaicéad, líon na mbealaí idirmheánacha), agus déanann sé "iarratas oifigiúil" DHCPREQUEST leis na socruithe líonra ón bhfreastalaí DHCP is maith leis. Sa chás seo, téann an paicéad chuig freastalaí DHCP ar leith.
  4. Seolann an freastalaí a fuair an DHCPREQUEST paicéad formáide DHCPACK, ina liostaíonn sé arís na socruithe líonra atá beartaithe don chliant seo

Freastalaí DHCP + Mysql i Python

Ina theannta sin, tá paicéid DHCPINFORM ann a thagann ón gcliant, agus is é an cuspóir atá leo a chur in iúl don fhreastalaí DHCP go bhfuil an “cliant beo” agus go bhfuil sé ag baint úsáide as na socruithe líonra eisithe. I gcur i bhfeidhm an fhreastalaí seo, déantar neamhaird de na paicéid seo.

Formáid pacáiste

Go ginearálta, breathnaíonn fráma paicéad Ethernet rud éigin mar seo:

Freastalaí DHCP + Mysql i Python

Inár gcás, ní dhéanfaimid ach na sonraí a mheas go díreach ó inneachar an phacáiste UDP, gan ceanntásca prótacail ciseal OSI, eadhon struchtúr DHCP:

DHCPDISCOVER

Mar sin, tosaíonn an próiseas chun seoladh IP a fháil le haghaidh feiste nuair a sheolann an cliant DHCP iarratas craolta ó chalafoirt 68 go 255.255.255.255:67. Sa phacáiste seo, cuimsíonn an cliant a sheoladh MAC, chomh maith le cad go díreach atá sé ag iarraidh a fháil ón bhfreastalaí DHCP. Déantar cur síos ar struchtúr an phacáiste sa tábla thíos.

Tábla Struchtúr Paicéad DHCPDISCOVER

Seasamh sa phacáiste
Ainm luach
Sampla
Réamhrá
Beart
Míniú

1
Iarratas Tosaithe
1
Heics
1
Cineál teachtaireachta. 1 - iarratas ó chliant go freastalaí, 2 - freagra ó fhreastalaí go cliant

2
Cineál crua-earraí
1
Heics
1
Cineál seoladh crua-earraí, sa phrótacal seo 1 - MAC

3
seoltaí crua-earraí fad
6
Heics
1
Fad seoladh MAC an ghléis

4
Leannlusanna
1
Heics
1
Líon bealaí idirmheánacha

5
Aitheantas Idirbheart
23:cf:de:1d
Heics
4
Aitheantóir idirbheart uathúil. Ginte ag an gcliant ag tús oibríocht iarratais

7
An dara ceann imithe
0
Heics
4
Am i soicindí ó thús an phróisis chun seoladh a fháil

9
Bratacha tosaithe
0
Heics
2
Bratacha áirithe is féidir a shocrú chun paraiméadair phrótacail a léiriú

11
Seoladh IP an chliaint
0.0.0.0
Líne
4
Seoladh IP an chliaint (más ann dó)

15
Seoladh IP do chliaint
0.0.0.0
Líne
4
Seoladh IP a thairgeann an freastalaí (má tá sé ar fáil)

19
Seoladh IP an chéad fhreastalaí eile
0.0.0.0
Líne
4
Seoladh IP an fhreastalaí (más eol)

23
Seoladh IP gníomhaire sealaíochta
172.16.114.41
Líne
4
Seoladh IP an ghníomhaire sealaíochta (lasc mar shampla)

27
Seoladh MAC an chliaint
14:d6:4d:a7:c9:55
Heics
6
Seoladh MAC an tseoltóra paicéid (cliant)

31
Stuáil seolta crua-earraí cliaint
 
Heics
10
Suíochán in áirithe. De ghnáth líonadh le nialais

41
Ainm óstach an fhreastalaí
 
Líne
64
Ainm freastalaí DHCP. De ghnáth ní tharchuirtear

105
Ainm an chomhaid tosaithe
 
Líne
128
Ainm comhaid ar an bhfreastalaí a úsáideann stáisiúin gan diosca agus iad ag tosaithe

235
Fianáin draíochta
63: 82: 53: 63
Heics
4
Uimhir “draíochta”, dá réir, lena n-áirítear. is féidir leat a chinneadh go mbaineann an paicéad seo leis an bprótacal DHCP

Roghanna DHCP. Is féidir dul in aon ord

236
Uimhir rogha
53
Nollaig
1
Rogha 53, a shonraíonn an cineál paicéad DHCP

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

 
Fad rogha
1
Nollaig
1

 
Luach rogha
1
Nollaig
1

 
Uimhir rogha
50
Nollaig
1
Cén seoladh IP atá an cliant ag iarraidh a fháil?

 
Fad rogha
4
Nollaig
1

 
Luach rogha
172.16.134.61
Líne
4

 
Uimhir rogha
55
 
1
Paraiméadair líonra a iarrann an cliant. Féadfaidh comhdhéanamh a bheith éagsúil

01 - Masc líonra
03 - Geata
06 - DNS
oc — Óstainm
0f - ainm fearainn líonra
1c - seoladh an iarratais craolta (craoladh)
42 - Ainm freastalaí TFTP
79 - Bealach Statach Gan Rang

 
Fad rogha
8
 
1

 
Luach rogha
01:03:06:0c:0f:1c:42:79
 
8

 
Uimhir rogha
82
Nollaig
 
Rogha 82, a tharchuireann seoladh MAC an fheiste athsheoltóra agus roinnt luachanna breise.

Is minic gurb é seo calafort an lasc ar a ritheann an cliant DHCP deiridh.Tá paraiméadair bhreise sa rogha seo, is é an chéad bheart uimhir an “forogha”, is é an dara ceann a fhad, ansin a luach.

Sa chás seo, i rogha 82, neadaítear na fo-roghanna:
Agent Circuit ID = 00:04:00:01:00:04, nuair is iad an dá bhearta dheireanacha an calafort cliaint DHCP ónar tháinig an t-iarratas

Gníomhaire Cianaitheantas = 00:06:c8:be:19:93:11:48 - Seoladh MAC an ghléis athsheoltóra DHCP

 
Fad rogha
18
Nollaig
 

 
Luach rogha
01:06
00:04:00:01:00:04
02:08
00:06:c8:be:19:93:11:48
Heics
 

 
Deireadh an phacáiste
255
Nollaig
1
Is ionann 255 agus deireadh an phaicéad

DHCPOFFER

Chomh luath agus a fhaigheann an freastalaí an paicéad DHCPDISCOVER agus má fheiceann sé gur féidir leis rud éigin a thairiscint don chliant ón gceann iarrtha, gineann sé freagra dó - DHCPDISCOVER. Seoltar an freagra chuig an gcalafort “ón áit ar tháinig sé”, trí chraoladh, mar gheall ar ag an nóiméad seo, níl seoladh IP ag an gcliant fós, dá bhrí sin ní féidir leis glacadh leis an bpaicéad ach amháin má sheoltar é trí chraoladh. Aithníonn an cliant gur pacáiste é seo dó ag a sheoladh MAC taobh istigh den phacáiste, chomh maith leis an uimhir idirbhirt a ghineann sé nuair a chruthaítear an chéad phacáiste.

Tábla Struchtúr Paicéad DHCPOFFER

Seasamh sa phacáiste
Ainm an luacha (coitianta)
Sampla
Réamhrá
Beart
Míniú

1
Iarratas Tosaithe
1
Heics
1
Cineál teachtaireachta. 1 - iarratas ó chliant go freastalaí, 2 - freagra ó fhreastalaí go cliant

2
Cineál crua-earraí
1
Heics
1
Cineál seoladh crua-earraí, sa phrótacal seo 1 - MAC

3
seoltaí crua-earraí fad
6
Heics
1
Fad seoladh MAC an ghléis

4
Leannlusanna
1
Heics
1
Líon bealaí idirmheánacha

5
Aitheantas Idirbheart
23:cf:de:1d
Heics
4
Aitheantóir idirbheart uathúil. Ginte ag an gcliant ag tús oibríocht iarratais

7
An dara ceann imithe
0
Heics
4
Am i soicindí ó thús an phróisis chun seoladh a fháil

9
Bratacha tosaithe
0
Heics
2
Bratacha áirithe is féidir a shocrú chun paraiméadair phrótacail a léiriú. Sa chás seo, ciallaíonn 0 an cineál iarratais Unicast

11
Seoladh IP an chliaint
0.0.0.0
Líne
4
Seoladh IP an chliaint (más ann dó)

15
Seoladh IP do chliaint
172.16.134.61
Líne
4
Seoladh IP a thairgeann an freastalaí (má tá sé ar fáil)

19
Seoladh IP an chéad fhreastalaí eile
0.0.0.0
Líne
4
Seoladh IP an fhreastalaí (más eol)

23
Seoladh IP gníomhaire sealaíochta
172.16.114.41
Líne
4
Seoladh IP an ghníomhaire sealaíochta (lasc mar shampla)

27
Seoladh MAC an chliaint
14:d6:4d:a7:c9:55
Heics
6
Seoladh MAC an tseoltóra paicéid (cliant)

31
Stuáil seolta crua-earraí cliaint
 
Heics
10
Suíochán in áirithe. De ghnáth líonadh le nialais

41
Ainm óstach an fhreastalaí
 
Líne
64
Ainm freastalaí DHCP. De ghnáth ní tharchuirtear

105
Ainm an chomhaid tosaithe
 
Líne
128
Ainm comhaid ar an bhfreastalaí a úsáideann stáisiúin gan diosca agus iad ag tosaithe

235
Fianáin draíochta
63: 82: 53: 63
Heics
4
Uimhir “draíochta”, dá réir, lena n-áirítear. is féidir leat a chinneadh go mbaineann an paicéad seo leis an bprótacal DHCP

Roghanna DHCP. Is féidir dul in aon ord

236
Uimhir rogha
53
Nollaig
1
Rogha 53, a shainíonn an cineál paicéad DHCP 2 - DHCPOFFER

 
Fad rogha
1
Nollaig
1

 
Luach rogha
2
Nollaig
1

 
Uimhir rogha
1
Nollaig
1
Rogha masc líonra a thairiscint don chliant DHCP

 
Fad rogha
4
Nollaig
1

 
Luach rogha
255.255.224.0
Líne
4

 
Uimhir rogha
3
Nollaig
1
Rogha chun geata réamhshocraithe a thairiscint don chliant DHCP

 
Fad rogha
4
Nollaig
1

 
Luach rogha
172.16.12.1
Líne
4

 
Uimhir rogha
6
Nollaig
1
Rogha DHCP a thairiscint do chliant DNS

 
Fad rogha
4
Nollaig
1

 
Luach rogha
8.8.8.8
Líne
4

 
Uimhir rogha
51
Nollaig
1
Saolré na bparaiméadar líonra eisithe i soicindí, agus ina dhiaidh sin ní mór don chliant DHCP iad a iarraidh arís

 
Fad rogha
4
Nollaig
1

 
Luach rogha
86400
Nollaig
4

 
Uimhir rogha
82
Nollaig
1
Le Rogha 82, déantar athrá ar an méid a tháinig in DHCPDISCOVER

 
Fad rogha
18
Nollaig
1

 
Luach rogha
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d:ec
Nollaig
18

 
Deireadh an phacáiste
255
Nollaig
1
Is ionann 255 agus deireadh an phaicéad

DHCPREQUEST

Tar éis don chliant DHCPOFFER a fháil, cruthaíonn sé paicéad a iarrann paraiméadair líonra gan a bheith ag freastal ar gach freastalaí DHCP ar an líonra, ach ar cheann ar leith amháin, ar “thaitin” an tairiscint DHCPOFFER ba mhó leis. Is féidir leis na critéir "cosúil le" a bheith difriúil agus ag brath ar chur i bhfeidhm DHCP an chliaint. Sonraítear faighteoir an iarratais trí úsáid a bhaint as seoladh MAC an fhreastalaí DHCP. Chomh maith leis sin, is féidir leis an gcliant paicéad DHCPREQUEST a sheoladh gan DHCPDISCOVER a ghiniúint ar dtús, má tá seoladh IP an fhreastalaí faighte cheana féin.

Tábla Struchtúr Paicéad DHCPREQUEST

Seasamh sa phacáiste
Ainm an luacha (coitianta)
Sampla
Réamhrá
Beart
Míniú

1
Iarratas Tosaithe
1
Heics
1
Cineál teachtaireachta. 1 - iarratas ó chliant go freastalaí, 2 - freagra ó fhreastalaí go cliant

2
Cineál crua-earraí
1
Heics
1
Cineál seoladh crua-earraí, sa phrótacal seo 1 - MAC

3
seoltaí crua-earraí fad
6
Heics
1
Fad seoladh MAC an ghléis

4
Leannlusanna
1
Heics
1
Líon bealaí idirmheánacha

5
Aitheantas Idirbheart
23:cf:de:1d
Heics
4
Aitheantóir idirbheart uathúil. Ginte ag an gcliant ag tús oibríocht iarratais

7
An dara ceann imithe
0
Heics
4
Am i soicindí ó thús an phróisis chun seoladh a fháil

9
Bratacha tosaithe
8000
Heics
2
Bratacha áirithe is féidir a shocrú chun paraiméadair phrótacail a léiriú. Sa chás seo, socraítear “craoladh”.

11
Seoladh IP an chliaint
0.0.0.0
Líne
4
Seoladh IP an chliaint (más ann dó)

15
Seoladh IP do chliaint
172.16.134.61
Líne
4
Seoladh IP a thairgeann an freastalaí (má tá sé ar fáil)

19
Seoladh IP an chéad fhreastalaí eile
0.0.0.0
Líne
4
Seoladh IP an fhreastalaí (más eol)

23
Seoladh IP gníomhaire sealaíochta
172.16.114.41
Líne
4
Seoladh IP an ghníomhaire sealaíochta (lasc mar shampla)

27
Seoladh MAC an chliaint
14:d6:4d:a7:c9:55
Heics
6
Seoladh MAC an tseoltóra paicéid (cliant)

31
Stuáil seolta crua-earraí cliaint
 
Heics
10
Suíochán in áirithe. De ghnáth líonadh le nialais

41
Ainm óstach an fhreastalaí
 
Líne
64
Ainm freastalaí DHCP. De ghnáth ní tharchuirtear

105
Ainm an chomhaid tosaithe
 
Líne
128
Ainm comhaid ar an bhfreastalaí a úsáideann stáisiúin gan diosca agus iad ag tosaithe

235
Fianáin draíochta
63: 82: 53: 63
Heics
4
Uimhir “draíochta”, dá réir, lena n-áirítear. is féidir leat a chinneadh go mbaineann an paicéad seo leis an bprótacal DHCP

Roghanna DHCP. Is féidir dul in aon ord

236
Uimhir rogha
53
Nollaig
3
Rogha 53, a shainíonn paicéad DHCP cineál 3 - DHCPREQUEST

 
Fad rogha
1
Nollaig
1

 
Luach rogha
3
Nollaig
1

 
Uimhir rogha
61
Nollaig
1
ID Cliant: 01 (do Ehernet) + seoladh MAC an chliaint

 
Fad rogha
7
Nollaig
1

 
Luach rogha
01:2c:ab:25:ff:72:a6
Heics
7

 
Uimhir rogha
60
Nollaig
 
"Aitheantóir aicme díoltóra". I mo chás, tuairiscíonn sé an leagan cliant DHCP. B'fhéidir go dtugann feistí eile rud éigin difriúil ar ais. Tuairiscíonn Windows mar shampla MSFT 5.0

 
Fad rogha
11
Nollaig
 

 
Luach rogha
udhcp 0.9.8
Líne
 

 
Uimhir rogha
55
 
1
Paraiméadair líonra a iarrann an cliant. Féadfaidh comhdhéanamh a bheith éagsúil

01 - Masc líonra
03 - Geata
06 - DNS
oc — Óstainm
0f - ainm fearainn líonra
1c - seoladh an iarratais craolta (craoladh)
42 - Ainm freastalaí TFTP
79 - Bealach Statach Gan Rang

 
Fad rogha
8
 
1

 
Luach rogha
01:03:06:0c:0f:1c:42:79
 
8

 
Uimhir rogha
82
Nollaig
1
Le Rogha 82, déantar athrá ar an méid a tháinig in DHCPDISCOVER

 
Fad rogha
18
Nollaig
1

 
Luach rogha
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d:ec
Nollaig
18

 
Deireadh an phacáiste
255
Nollaig
1
Is ionann 255 agus deireadh an phaicéad

DHCPACK

Mar dheimhniú go bhfuil “tá, tá sé sin ceart, is é seo do sheoladh IP, agus ní thabharfaidh mé amach é d’aon duine eile” ón bhfreastalaí DHCP, paicéad i bhformáid DHCPACK ón bhfreastalaí chuig an gcliant a fhreastalaíonn. Seoltar é a chraoladh díreach cosúil le paicéid eile. Cé go bhfuil, sa chód thíos le haghaidh freastalaí DHCP curtha i bhfeidhm i Python, ar eagla na heagla, déanaim aon iarratas craolta a dhúbailt trí phaicéad a sheoladh chuig IP cliant ar leith, má tá sé ar eolas cheana féin. Thairis sin, níl cúram ar an bhfreastalaí DHCP ar chor ar bith an bhfuil an paicéad DHCPACK bainte amach ag an gcliant. Mura bhfaigheann an cliant DHCPACK, ansin tar éis tamaill déanann sé DHCPREQUEST arís

Tábla Struchtúr Paicéad DHCPACK

Seasamh sa phacáiste
Ainm an luacha (coitianta)
Sampla
Réamhrá
Beart
Míniú

1
Iarratas Tosaithe
2
Heics
1
Cineál teachtaireachta. 1 - iarratas ó chliant go freastalaí, 2 - freagra ó fhreastalaí go cliant

2
Cineál crua-earraí
1
Heics
1
Cineál seoladh crua-earraí, sa phrótacal seo 1 - MAC

3
seoltaí crua-earraí fad
6
Heics
1
Fad seoladh MAC an ghléis

4
Leannlusanna
1
Heics
1
Líon bealaí idirmheánacha

5
Aitheantas Idirbheart
23:cf:de:1d
Heics
4
Aitheantóir idirbheart uathúil. Ginte ag an gcliant ag tús oibríocht iarratais

7
An dara ceann imithe
0
Heics
4
Am i soicindí ó thús an phróisis chun seoladh a fháil

9
Bratacha tosaithe
8000
Heics
2
Bratacha áirithe is féidir a shocrú chun paraiméadair phrótacail a léiriú. Sa chás seo, socraítear “craoladh”.

11
Seoladh IP an chliaint
0.0.0.0
Líne
4
Seoladh IP an chliaint (más ann dó)

15
Seoladh IP do chliaint
172.16.134.61
Líne
4
Seoladh IP a thairgeann an freastalaí (má tá sé ar fáil)

19
Seoladh IP an chéad fhreastalaí eile
0.0.0.0
Líne
4
Seoladh IP an fhreastalaí (más eol)

23
Seoladh IP gníomhaire sealaíochta
172.16.114.41
Líne
4
Seoladh IP an ghníomhaire sealaíochta (lasc mar shampla)

27
Seoladh MAC an chliaint
14:d6:4d:a7:c9:55
Heics
6
Seoladh MAC an tseoltóra paicéid (cliant)

31
Stuáil seolta crua-earraí cliaint
 
Heics
10
Suíochán in áirithe. De ghnáth líonadh le nialais

41
Ainm óstach an fhreastalaí
 
Líne
64
Ainm freastalaí DHCP. De ghnáth ní tharchuirtear

105
Ainm an chomhaid tosaithe
 
Líne
128
Ainm comhaid ar an bhfreastalaí a úsáideann stáisiúin gan diosca agus iad ag tosaithe

235
Fianáin draíochta
63: 82: 53: 63
Heics
4
Uimhir “draíochta”, dá réir, lena n-áirítear. is féidir leat a chinneadh go mbaineann an paicéad seo leis an bprótacal DHCP

Roghanna DHCP. Is féidir dul in aon ord

236
Uimhir rogha
53
Nollaig
3
Rogha 53, a shainíonn paicéad DHCP cineál 5 - DHCPACK

 
Fad rogha
1
Nollaig
1

 
Luach rogha
5
Nollaig
1

 
Uimhir rogha
1
Nollaig
1
Rogha masc líonra a thairiscint don chliant DHCP

 
Fad rogha
4
Nollaig
1

 
Luach rogha
255.255.224.0
Líne
4

 
Uimhir rogha
3
Nollaig
1
Rogha chun geata réamhshocraithe a thairiscint don chliant DHCP

 
Fad rogha
4
Nollaig
1

 
Luach rogha
172.16.12.1
Líne
4

 
Uimhir rogha
6
Nollaig
1
Rogha DHCP a thairiscint do chliant DNS

 
Fad rogha
4
Nollaig
1

 
Luach rogha
8.8.8.8
Líne
4

 
Uimhir rogha
51
Nollaig
1
Saolré na bparaiméadar líonra eisithe i soicindí, agus ina dhiaidh sin ní mór don chliant DHCP iad a iarraidh arís

 
Fad rogha
4
Nollaig
1

 
Luach rogha
86400
Nollaig
4

 
Uimhir rogha
82
Nollaig
1
Le Rogha 82, déantar athrá ar an méid a tháinig in DHCPDISCOVER

 
Fad rogha
18
Nollaig
1

 
Luach rogha
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d:ec
Nollaig
18

 
Deireadh an phacáiste
255
Nollaig
1
Is ionann 255 agus deireadh an phaicéad

Suiteáil

Is éard atá sa tsuiteáil iarbhír ná na modúil python atá riachtanach don obair a shuiteáil. Glactar leis go bhfuil MySQL suiteáilte agus cumraithe cheana féin.

FreeBSD

pkg shuiteáil python3 python3 -m ensurepip pip3 shuiteáil mysql-connector

ubuntu

sudo apt-get install python3 sudo apt-get install pip3 sudo pip3 suiteáil mysql-connector

Cruthaímid bunachar sonraí MySQL, uaslódálann muid an dumpáil pydhcp.sql isteach ann, agus cumraimid an comhad cumraíochta.

Cumraíocht

Tá gach socrú freastalaí i gcomhad xml. Comhad tagartha:

1.0 0.0.0.0 255.255.255.255 192.168.0.71 8600 1 255.255.255.0 192.168.0.1 ósta áitiúil scrúdú scrúdú pydhcp rogha_8.8.8.8_hex:sw_port82:1:20 rogha_22_hex:sw_port82:2:16 rogha_18_hex:sw_mac:82:26 40 roghnaigh ip, masc, ródaire,dns ó úsáideoirí áit a bhfuil upper(mac)= upper('{option_3_AgentRemoteId_hex}') agus uachtair(port)= uachtair('{option_1_AgentCircuitId_port_hex}') roghnaigh ip, masc, ródaire, dns ó úsáideoirí áit a bhfuil uachtair (mac) = uachtair ('{sw_mac}') agus uachtair (port) = uachtair ('{sw_port82}') roghnaigh ip, masc, ródaire, dns ó úsáideoirí áit a bhfuil uachtair(mac) = uachtair ('{ClientMacAddress}') cuir isteach i luachanna staire (id,dt,mac,ip, trácht) (null, anois(), '{ClientMacAddress}', '{RequestedIpAddress}', 'DHCPACK/INFORM')

Anois níos mine ar na clibeanna:

Déanann an rannán dhcpserver cur síos ar na socruithe bunúsacha chun an freastalaí a thosú, is iad sin:

  • óstach - cén seoladh IP a éisteann an freastalaí leis ar phort 67
  • craoladh - cé acu ip é an craoladh do DHCPOFFER agus DHCPACK
  • DHCPServer - cad é IP an fhreastalaí DHCP
  • Am léasa LeaseTime an seoladh IP eisithe
  • ThreadLimit - cé mhéad snáithe atá ag rith ag an am céanna chun paicéid UDP atá ag teacht isteach a phróiseáil ar phort 67. Tá sé ceaptha chun cabhrú le tionscadail ard-ualach 😉
  • defaultMask,defaultRouter,defaultDNS - cad a thairgtear don síntiúsóir de réir réamhshocraithe má aimsítear IP sa bhunachar sonraí, ach nach bhfuil paraiméadair bhreise sonraithe dó

alt mysql:

óstach, ainm úsáideora, pasfhocal, bonnainm - labhraíonn gach rud dó féin. Tá neas-struchtúr bunachar sonraí curtha suas ar GitHub

Rannóg na gceisteanna: déantar cur síos anseo ar iarratais ar thairiscint/ACK a fháil:

  • offer_count — líon na línte le hiarratais a sheolann toradh ar ais ar nós ip, masc, ródaire, dns
  • offer_n — teaghrán ceiste. Má tá an tuairisceán folamh, déanann sé an t-iarratas tairisceana seo a leanas a fhorghníomhú
  • history_sql - ceist a scríobhann, mar shampla, chuig an “stair údaraithe” do shíntiúsóir

Is féidir aon athróga ón rannán roghanna nó roghanna ón bprótacal DHCP a áireamh in iarratais.

Roinn na roghanna. Seo nuair a fhaigheann sé níos suimiúla. Anseo is féidir linn athróga a chruthú ar féidir linn a úsáid níos déanaí sa rannán ceisteanna.

Mar shampla:

option_82_hex:sw_port1:20:22

, glacann an líne ordaithe seo an líne iomlán a tháinig i rogha iarratais DHCP 82, i bhformáid heicsidheachúlach, sa raon ó 20 go 22 bytes san áireamh agus cuireann sé san athróg nua sw_port1 (port lasc ón áit a tháinig an t-iarratas)

option_82_hex:sw_mac:26:40

, sainmhínigh an t-athróg sw_mac, ag tógáil an heics ón raon 26:40

Is féidir leat na roghanna go léir is féidir a úsáid i bhfiosruithe a fheiceáil ach an freastalaí a thosú leis an lasc -d. Feicfimid rud éigin mar an loga seo:

-- tháinig paicéad DHCPINFORM ar phort 67, ó 0025224ad764 , b'x91xa5xe0xa3xa5xa9-x8fx8a' , ('172.30.114.25', 68) {'ClientMacAddress': 'ClientMacAddress', '0025224': '764'Address': '00'Address': '7'91 %"Jxd5d' , 'HType': 'Ethernet', 'HostName': b'x0xa3xe5xa9xa8xa8-x43fx0.0.0.0a ', 'ReqListDNS': Fíor, 'ReqListDomainName': True, 'ReqListPerfowmRouterDiscover': True, 'ReqList': True, 'ReqList': True, 'ReqList': True 'ReqListSubnetM fiafraigh': Fíor, 'ReqListVendorSpecInfo': 5.0, 'RequestedIpAddress': '0025224', 'Díoltóir': b'MSFT 764 ', 'chaddr': '172.30.128.13ad00', 'ciaddr': '00 , 'bratacha': b'x172.30.114.25x308 ', 'giaddr': '6', 'gpoz': 1, 'hlen': 82, 'leannlusanna': 12, 'htype': 'MAC', 'magic_cookie': b'cx12Sc ', 'op': 'DHCPINFORM', 'rogha53': 53, 'rogha55': 55, 'rogha60': 60, 'rogha61': 61, 'rogha82': 82, 'rogha82': 12, ' option_01_Byte ': B'x06x00x04x00x01x00x06x02x08x00x06x00' B'x1x9x2xx82exb12010600040001000602080006001xad ',' rogha_589_Hex ':' 2E82eb18Ad ':' _82_. "B'x12x01x06x00x04x00x01x00x06x02x08x00x06x00x1xxx9exb2xad '",' toradh ': bréagach,' secs ': 768, 'siaddr': '0.0.0.0', 'sw_mac': '001e589eb2ad', 'sw_port1': '06', 'xidbyte': b'

Dá réir sin, is féidir linn aon athróg a fhilleadh in {} agus úsáidfear í sa cheist SQL.

Déanaimis taifead don stair go bhfuair an cliant an seoladh IP:

Freastalaí DHCP + Mysql i Python

Freastalaí DHCP + Mysql i Python

Tosaigh freastalaí

./pydhcpdb.py -d -c config.xml

— d mód aschuir consól DEBUG
- c <filename> comhad cumraíochta

Tuairisciú

Agus anois níos mó sonraí maidir le cur i bhfeidhm an fhreastalaí i Python. Is pian é. Foghlaimíodh Python ar an eitilt. Déantar go leor chuimhneacháin i stíl "wow, ar bhealach éigin rinne mé é a oibriú." Gan optamaithe ar chor ar bith, agus fágtar san fhoirm seo go príomha mar gheall ar bheagán taithí i bhforbairt Python. Díreoidh mé ar na gnéithe is suimiúla de chur i bhfeidhm an fhreastalaí i “cód”.

Parsálaí comhaid cumraíochta XML

Úsáidtear an modúl Python caighdeánach xml.dom. Dealraíonn sé go bhfuil sé simplí, ach le linn an fhorfheidhmithe bhí easpa suntasach doiciméadúchán soiléir agus samplaí ar an líonra ag baint úsáide as an modúl seo.

    tree = minidom.parse(gconfig["config_file"]) mconfig=tree.getElementsByTagName("mysql") le haghaidh elem i mconfig: gconfig["mysql_host"]=elem.getElementsByTagName("óstach")[0].firstChild.data gconfig["mysql_username"]=elem.getElementsByTagName("ainm úsáideora")[0].firstChild.data gconfig["mysql_password"]=elem.getElementsByTagName("pasfhocal")[0].firstChild.data gconfig["mysql_basename"] =elem.getElementsByTagName("bunainm")[0].firstChild.data dconfig=tree.getElementsByTagName("dhcpserver") le haghaidh elem i dconfig: gconfig["craoladh"]=elem.getElementsByTagName("craoladh")[0]. firstChild.data gconfig["dhcp_host"]=elem.getElementsByTagName("óstach")[0].firstChild.data gconfig["dhcp_LeaseTime"]=elem.getElementsByTagName("LeaseTime")[0].firstChild.data gconfig[" dhó =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") le haghaidh elem in qconfig: gconfig["offer_count"]=elem.getElementsByTagName("tairiscint_chuntais")[0].firstChild.data le haghaidh num i raon(int(gconfig["offer_count"])): gconfig["offer_"+str(num+0)]=elem.getElementsByTagName("offer_"+str(num+0))[1].firstChild.data gconfig ["history_sql"]=elem.getElementsByTagName("history_sql")[1].firstChild.data options=tree.getElementsByTagName("roghanna") le haghaidh elem sna roghanna: nód=elem.getElementsByTagName("rogha") le haghaidh roghanna sa nód : roghannaMod.append(options.firstChild.data)

Ilsnáithe

Is aisteach go leor, cuirtear il-threading i Python i bhfeidhm go han-soiléir agus go simplí.

def PacketWork(sonraí,addr): ... # parsáil an phaicéad isteach a chur chun feidhme agus freagairt dó ... while True: data, addr = udp_socket.recvfrom(1024) # ag fanacht leis an bpaicéad UDP thread = threading.Thread( target=PacketWork , args=(sonraí,addr,)).start() # mar a tháinig sé - seolann muid an fheidhm PacketWork a bhí sainithe roimhe seo sa chúlra le paraiméadair agus threading.active_count() > gconfig["dhcp_ThreadLimit"]: am. codladh(1) # má tá an uimhir Tá níos mó snáitheanna ag rith cheana ná mar atá sna socruithe, fanaimid go dtí go mbeidh níos lú acu

Faigh/seol paicéad DHCP

Chun paicéid UDP a thascradh tríd an gcárta líonra, ní mór duit an soicéad a “ardú”:

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

, áit a bhfuil na bratacha:

  • AF_INET - ciallaíonn sé go mbeidh an fhormáid seoladh IP: port. D'fhéadfadh AF_UNIX a bheith ann freisin - áit a bhfuil an seoladh tugtha ag an ainm comhaid.
  • SOCK_DGRAM - ciallaíonn sé sin nach nglacaimid le “paicéad amh”, ach le ceann atá tar éis dul tríd an mballa dóiteáin cheana féin, agus le paicéad atá bearrtha go páirteach. Iad siúd. ní fhaighimid ach paicéad UDP gan an chomhpháirt “fisiciúil” d'fhillteán paicéad an UDP. Má úsáideann tú an bhratach SOCK_RAW, beidh ort an “cumhdach” seo a pharsáil freisin.

Is féidir le seoladh paicéad a bheith cosúil le craoladh:

                    udp_socket.setsockopt(soicéad.SOL_SOCKET, soicéad.SO_BROADCAST, 1) # aistrigh an soicéad go mód craolta rz=udp_socket.sendto(paicéad, (gconfig["craoladh"],68))

, agus chuig an seoladh “an áit ar tháinig an pacáiste”:

                        udp_socket.setsockopt(soicéad.SOL_SOCKET,soicéad.SO_REUSEADDR,1) # athraigh an soicéad go mód il-éisteoir rz=udp_socket.sendto(paicéad, addr)

, áit a gciallaíonn SOL_SOCKET an “leibhéal prótacal” chun roghanna a shocrú,

, SO_BROADCAST rogha go bhfuil an pacáiste clogad “craolta”

  Aistríonn rogha ,SO_REUSEADDR an soicéad go mód “go leor éisteoirí”. Go teoiriciúil, níl sé riachtanach sa chás seo, ach ar cheann de na freastalaithe FreeBSD ar a ndearna mé tástáil, níor oibrigh an cód gan an rogha seo.

Paicéad DHCP a pharsáil

Seo an áit a thaitin Python go mór liom. Tharlaíonn sé go raibh ligean amach as an bhosca leat a bheith solúbtha go leor leis an bytecode. Ligeann sé é a aistriú go han-éasca go luachanna deachúla, teaghráin agus heicsidheachúlach - i.e. is é seo a theastaíonn uainn i ndáiríre chun struchtúr an phacáiste a thuiscint. Mar sin, mar shampla, is féidir leat raon beart a fháil i HEX agus díreach beart:

    res["xidhex"]=sonraí[4:8].hex() res["xidbyte"]=sonraí[4:8]

, pacáil na bearta i struchtúr:

res["bratacha"]=paca('BB',sonraí[10],sonraí[11])

Faigh IP ón struchtúr:

res["ciaddr"]=socket.inet_ntoa(pacáiste('BBBB',sonraí[12],sonraí[13],sonraí[14],sonraí[15]));

Agus a mhalairt:

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

Sin go léir faoi láthair 😉

Foinse: will.com

Add a comment