የDHCP+Mysql አገልጋይ በፓይዘን

የDHCP+Mysql አገልጋይ በፓይዘን

የዚህ ፕሮጀክት ዓላማ፡-

  • በIPv4 አውታረመረብ ላይ ሾለ DHCP መማር
  • Python መማር (ከባዶ ትንሽ ይበልጣል 😉)
  • የአገልጋይ ምትክ DB2DHCP (የእኔ ሹካ) ፣ ኦሪጅናል እዚህለአዲሱ ስርዓተ ክወና ለመገጣጠም ይበልጥ አስቸጋሪ እየሆነ መጥቷል. እና "አሁን ለመለወጥ" ምንም መንገድ እንደሌለ ሁለትዮሽ መሆኑን አልወደውም.
  • የዲኤችሲፒ አገልጋይ ማግኘት የተመዝጋቢውን አይፒ አድራሻ የተመዝጋቢውን ማክ በመጠቀም ወይም የማክ+ወደብ ጥምርን መቀየር (አማራጭ 82)
  • ሌላ ብስክሌት መጻፍ (ኦህ! ይህ የእኔ ተወዳጅ እንቅስቃሴ ነው)
  • በሐብርሀብር (ወይም በተሻለ ሁኔታ ግብዣ) ላይ ሾለ ክለብ እጅዎ አስተያየት በመቀበል ላይ 😉

ውጤት፡ የሚሰራው 😉 በFreeBSD እና Ubuntu OS ላይ ተፈትኗል። በንድፈ ሀሳብ, ኮዱ በማንኛውም ስርዓተ ክወና ስር እንዲሰራ ሊጠየቅ ይችላል, ምክንያቱም በኮዱ ውስጥ ምንም ልዩ ማሰሪያዎች ያለ አይመስልም።
በጥንቃቄ! ሌላም ብዙ ይመጣል።

ለአማተሮች ማከማቻ አገናኝ "በህይወት ንካ".

"ሃርድዌርን ማጥናት" ውጤቱን የመጫን, የማዋቀር እና የመጠቀም ሂደት በጣም ያነሰ ነው, እና ከዚያ ስለ DHCP ፕሮቶኮል ትንሽ ንድፈ ሃሳብ. ለራሴ። እና ለታሪክ 😉

ትንሽ ንድፈ ሐሳብ

DHCP ምንድን ነው?

ይህ አንድ መሣሪያ የአይፒ አድራሻውን (እና ሌሎች እንደ ጌትዌይ፣ ዲ ኤን ኤስ፣ ወዘተ የመሳሰሉትን መመዘኛዎች) ከDHCP አገልጋይ እንዲያገኝ የሚያስችል የአውታረ መረብ ፕሮቶኮል ነው። እሽጎች የሚለዋወጡት የ UDP ፕሮቶኮልን በመጠቀም ነው። የኔትወርክ መለኪያዎችን በሚጠይቁበት ጊዜ የመሳሪያው አጠቃላይ የአሠራር መርህ እንደሚከተለው ነው ።

  1. መሳሪያው (ደንበኛ) የ UDP ስርጭት ጥያቄን (DHCPDISCOVER) በመላው አውታረ መረቡ ላይ “እሺ፣ አንድ ሰው የአይፒ አድራሻ ስጠኝ” በሚለው ጥያቄ ይልካል። ከዚህም በላይ ብዙውን ጊዜ (ነገር ግን ሁልጊዜ አይደለም) ጥያቄው የሚከሰተው ከወደብ 68 (ምንጭ) ሲሆን መድረሻው ወደብ 67 (መድረሻ) ነው. አንዳንድ መሳሪያዎች ጥቅሎችን ወደብ 67 ይልካሉ። የደንበኛ መሳሪያው የማክ አድራሻ በDHCPDISCOVER ጥቅል ውስጥ ተካትቷል።
  2. በኔትወርኩ ላይ የሚገኙት ሁሉም የDHCP አገልጋዮች (እና በርካቶች ሊኖሩ ይችላሉ) DHCPDISCOVERን ለላከው መሳሪያ የDHCPOFFER አቅርቦት ከኔትወርክ መቼቶች ጋር ይመሰርታሉ እና በኔትወርኩ ላይም ያሰራጩታል። ይህ ፓኬት ለማን እንደታሰበ መለየት ቀደም ሲል በDHCPDISCOVER ጥያቄ በቀረበው የደንበኛው MAC አድራሻ መሰረት ነው።
  3. ደንበኛው ለአውታረ መረብ ቅንጅቶች ፕሮፖዛል ያላቸውን ፓኬቶች ይቀበላል ፣ በጣም ማራኪውን ይመርጣል (መስፈርቶቹ የተለየ ሊሆኑ ይችላሉ ፣ ለምሳሌ ፣ የፓኬት ማቅረቢያ ጊዜ ፣ ​​የመካከለኛ መንገዶች ብዛት) እና ከአውታረ መረብ ቅንብሮች ጋር DHCPREQUEST ከሚወደው የDHCP አገልጋይ። በዚህ አጋጣሚ ፓኬጁ ወደ አንድ የተወሰነ የ DHCP አገልጋይ ይሄዳል።
  4. DHCPREQUEST የተቀበለው አገልጋይ የDHCPACK ቅርጸት ፓኬት ይልካል፣ በዚህ ውስጥ ለዚህ ደንበኛ የታሰቡትን የአውታረ መረብ ቅንብሮች በድጋሚ ይዘረዝራል።

የDHCP+Mysql አገልጋይ በፓይዘን

በተጨማሪም ከደንበኛው የሚመጡ DHCPINFORM እሽጎች አሉ እና አላማው "ደንበኛው በህይወት እንዳለ" እና የተሰጠውን የኔትወርክ መቼት እየተጠቀመ መሆኑን ለDHCP አገልጋይ ማሳወቅ ነው. በዚህ አገልጋይ አተገባበር ውስጥ እነዚህ እሽጎች ችላ ይባላሉ።

የጥቅል ቅርጸት

በአጠቃላይ የኤተርኔት ፓኬት ፍሬም ይህን ይመስላል።

የDHCP+Mysql አገልጋይ በፓይዘን

በእኛ ሁኔታ ፣ ያለ OSI ንብርብር ፕሮቶኮል ራስጌዎች ፣ ማለትም የ DHCP መዋቅር ፣ ከ UDP ፓኬት ይዘቶች በቀጥታ ውሂቡን ብቻ እንመለከታለን።

DHCPDIScover

ስለዚህ ለአንድ መሳሪያ የአይፒ አድራሻ የማግኘት ሂደት የሚጀምረው የDHCP ደንበኛ የስርጭት ጥያቄን ከወደብ 68 ወደ 255.255.255.255:67 በመላክ ይጀምራል። በዚህ ጥቅል ውስጥ ደንበኛው የ MAC አድራሻውን እና እንዲሁም ከ DHCP አገልጋይ በትክክል መቀበል የሚፈልገውን ያካትታል። የጥቅል መዋቅር ከዚህ በታች ባለው ሠንጠረዥ ውስጥ ተገልጿል.

የDHCPDISCOVER ጥቅል አወቃቀር ሠንጠረዥ

በጥቅሉ ውስጥ አቀማመጥ
የእሴት ስም
ለምሳሌ:
መግቢያ
ባይት
ማብራሪያ ፡፡

1
የማስነሻ ጥያቄ
1
ሄክስ
1
የመልእክት አይነት። 1 - ከደንበኛ ወደ አገልጋይ ጥያቄ ፣ 2 - ከአገልጋይ ወደ ደንበኛ ምላሽ

2
የሃርድዌር አይነት
1
ሄክስ
1
የሃርድዌር አድራሻ አይነት, በዚህ ፕሮቶኮል 1 - MAC

3
የሃርድዌር አድራሻዎች ርዝመት
6
ሄክስ
1
የመሣሪያ MAC አድራሻ ርዝመት

4
እየተንተከተከ
1
ሄክስ
1
የመካከለኛው መስመሮች ብዛት

5
የግብይት መታወቂያ
23፡cf፡de፡1d
ሄክስ
4
ልዩ የግብይት መለያ። በጥያቄው መጀመሪያ ላይ በደንበኛው የተፈጠረ

7
ሁለተኛ አልፏል
0
ሄክስ
4
አድራሻ የማግኘት ሂደት ከተጀመረበት ጊዜ ጀምሮ በሰከንዶች ውስጥ ጊዜ

9
ባንዲራዎችን አስነሳ
0
ሄክስ
2
የፕሮቶኮል መለኪያዎችን ለማመልከት ሊዋቀሩ የሚችሉ የተወሰኑ ባንዲራዎች

11
የደንበኛ አይፒ አድራሻ
0.0.0.0
መሾመር
4
የደንበኛ አይፒ አድራሻ (ካለ)

15
የእርስዎ ደንበኛ አይፒ አድራሻ
0.0.0.0
መሾመር
4
በአገልጋዩ የቀረበ የአይፒ አድራሻ (ካለ)

19
የሚቀጥለው አገልጋይ አይፒ አድራሻ
0.0.0.0
መሾመር
4
የአገልጋይ አይፒ አድራሻ (የሚታወቅ ከሆነ)

23
የማስተላለፊያ ወኪል አይፒ አድራሻ
172.16.114.41
መሾመር
4
የማስተላለፊያ ወኪሉ አይፒ አድራሻ (ለምሳሌ ፣ ማብሪያ / ማጥፊያ)

27
የደንበኛ MAC አድራሻ
14:d6:4d:a7:c9:55
ሄክስ
6
የፓኬት ላኪ (ደንበኛ) MAC አድራሻ

31
የደንበኛ ሃርድዌር አድራሻ ንጣፍ
 
ሄክስ
10
የተያዘ መቀመጫ. ብዙውን ጊዜ በዜሮዎች ተሞልቷል።

41
የአገልጋይ አስተናጋጅ ስም
 
መሾመር
64
የDHCP አገልጋይ ስም ብዙውን ጊዜ አይተላለፍም

105
የማስነሻ ፋይል ስም
 
መሾመር
128
በሚነሳበት ጊዜ ዲስክ አልባ ጣቢያዎች በሚጠቀሙበት አገልጋይ ላይ የፋይል ስም

235
አስማት ኩኪዎች
63: 82: 53: 63
ሄክስ
4
"አስማት" ቁጥር, በዚህ መሠረት, ጨምሮ. ይህ ፓኬት የDHCP ፕሮቶኮል መሆኑን ማወቅ ትችላለህ

የDHCP አማራጮች። በማንኛውም ቅደም ተከተል መሄድ ይችላል።

236
የአማራጭ ቁጥር
53
ዲሴ
1
አማራጭ 53፣ የDHCP ፓኬት አይነትን የሚገልጽ

1 - DHCPDIScover
3 - DHCPREQUEST
2 - DHCPOffer
5 - DHCPACK
8 - DHCPINFORM

 
የአማራጭ ርዝመት
1
ዲሴ
1

 
የአማራጭ ዋጋ
1
ዲሴ
1

 
የአማራጭ ቁጥር
50
ዲሴ
1
ደንበኛው ምን ዓይነት አይ ፒ አድራሻ መቀበል ይፈልጋል?

 
የአማራጭ ርዝመት
4
ዲሴ
1

 
የአማራጭ ዋጋ
172.16.134.61
መሾመር
4

 
የአማራጭ ቁጥር
55
 
1
በደንበኛው የተጠየቁ የአውታረ መረብ መለኪያዎች። ቅንብር ሊለያይ ይችላል።

01 - የአውታረ መረብ ጭምብል
03 - መተላለፊያ
06 - ዲ ኤን ኤስ
oc - የአስተናጋጅ ስም
0f - የአውታረ መረብ ስም
1c - የስርጭት ጥያቄ አድራሻ (ስርጭት)
42 - የ TFTP አገልጋይ ስም
79 - ክፍል የሌለው የማይንቀሳቀስ መንገድ

 
የአማራጭ ርዝመት
8
 
1

 
የአማራጭ ዋጋ
01:03:06:0c:0f:1c:42:79
 
8

 
የአማራጭ ቁጥር
82
ዲሴ
 
አማራጭ 82, ይህም የተደጋጋሚ መሳሪያውን MAC አድራሻ እና አንዳንድ ተጨማሪ እሴቶችን ያስተላልፋል.

ብዙውን ጊዜ ይህ የመጨረሻው የ DHCP ደንበኛ የሚሠራበት የመቀየሪያው ወደብ ነው ይህ አማራጭ ተጨማሪ መመዘኛዎችን ይዟል የመጀመሪያው ባይት የ "ሱቦፕሽን" ቁጥር ነው, ሁለተኛው ርዝመቱ, ከዚያም ዋጋው ነው.

በዚህ አጋጣሚ፣በአማራጭ 82፣ንዑስ አማራጮቹ በጎጆ ተያይዘዋል።
ወኪል የወረዳ መታወቂያ = 00:04:00:01:00:04፣ የመጨረሻዎቹ ሁለት ባይት ጥያቄው የመጣበት የDHCP ደንበኛ ወደብ ሲሆኑ

ወኪል የርቀት መታወቂያ = 00:06:c8:be:19:93:11:48 - የDHCP ተደጋጋሚ መሣሪያ ማክ አድራሻ

 
የአማራጭ ርዝመት
18
ዲሴ
 

 
የአማራጭ ዋጋ
01:06
00:04:00:01:00:04
02:08
00:06:c8:be:19:93:11:48
ሄክስ
 

 
የጥቅል መጨረሻ
255
ዲሴ
1
255 የፓኬቱን መጨረሻ ያመለክታል

DHCPOffer

አገልጋዩ የDHCPDISCOVER ፓኬት እንደተቀበለ እና ከተጠየቀው አንድ ነገር ለደንበኛው ሊያቀርብ እንደሚችል ካየ፣ ለእሱ ምላሽ ይሰጣል - DHCPDISCOVER። ምላሹ ወደ ወደብ "ከመጣበት" ይላካል, በስርጭት, ምክንያቱም በአሁኑ ጊዜ ደንበኛው እስካሁን የአይፒ አድራሻ የለውም, ስለዚህ ፓኬጁን በስርጭት ከተላከ ብቻ መቀበል ይችላል. ደንበኛው ይህ በጥቅሉ ውስጥ ባለው የ MAC አድራሻው እና እንዲሁም የመጀመሪያው ጥቅል በሚፈጠርበት ጊዜ የሚያመነጨው የግብይት ቁጥር ለእሱ ጥቅል መሆኑን ይገነዘባል።

DHCPOFFER የፓኬት መዋቅር ሰንጠረዥ

በጥቅሉ ውስጥ አቀማመጥ
የእሴት ስም (የተለመደ)
ለምሳሌ:
መግቢያ
ባይት
ማብራሪያ ፡፡

1
የማስነሻ ጥያቄ
1
ሄክስ
1
የመልእክት አይነት። 1 - ከደንበኛ ወደ አገልጋይ ጥያቄ ፣ 2 - ከአገልጋይ ወደ ደንበኛ ምላሽ

2
የሃርድዌር አይነት
1
ሄክስ
1
የሃርድዌር አድራሻ አይነት, በዚህ ፕሮቶኮል 1 - MAC

3
የሃርድዌር አድራሻዎች ርዝመት
6
ሄክስ
1
የመሣሪያ MAC አድራሻ ርዝመት

4
እየተንተከተከ
1
ሄክስ
1
የመካከለኛው መስመሮች ብዛት

5
የግብይት መታወቂያ
23፡cf፡de፡1d
ሄክስ
4
ልዩ የግብይት መለያ። በጥያቄው መጀመሪያ ላይ በደንበኛው የተፈጠረ

7
ሁለተኛ አልፏል
0
ሄክስ
4
አድራሻ የማግኘት ሂደት ከተጀመረበት ጊዜ ጀምሮ በሰከንዶች ውስጥ ጊዜ

9
ባንዲራዎችን አስነሳ
0
ሄክስ
2
የፕሮቶኮል መለኪያዎችን ለማመልከት ሊዋቀሩ የሚችሉ የተወሰኑ ባንዲራዎች። በዚህ አጋጣሚ 0 ማለት የዩኒካስት ጥያቄ አይነት ማለት ነው።

11
የደንበኛ አይፒ አድራሻ
0.0.0.0
መሾመር
4
የደንበኛ አይፒ አድራሻ (ካለ)

15
የእርስዎ ደንበኛ አይፒ አድራሻ
172.16.134.61
መሾመር
4
በአገልጋዩ የቀረበ የአይፒ አድራሻ (ካለ)

19
የሚቀጥለው አገልጋይ አይፒ አድራሻ
0.0.0.0
መሾመር
4
የአገልጋይ አይፒ አድራሻ (የሚታወቅ ከሆነ)

23
የማስተላለፊያ ወኪል አይፒ አድራሻ
172.16.114.41
መሾመር
4
የማስተላለፊያ ወኪሉ አይፒ አድራሻ (ለምሳሌ ፣ ማብሪያ / ማጥፊያ)

27
የደንበኛ MAC አድራሻ
14:d6:4d:a7:c9:55
ሄክስ
6
የፓኬት ላኪ (ደንበኛ) MAC አድራሻ

31
የደንበኛ ሃርድዌር አድራሻ ንጣፍ
 
ሄክስ
10
የተያዘ መቀመጫ. ብዙውን ጊዜ በዜሮዎች ተሞልቷል።

41
የአገልጋይ አስተናጋጅ ስም
 
መሾመር
64
የDHCP አገልጋይ ስም ብዙውን ጊዜ አይተላለፍም

105
የማስነሻ ፋይል ስም
 
መሾመር
128
በሚነሳበት ጊዜ ዲስክ አልባ ጣቢያዎች በሚጠቀሙበት አገልጋይ ላይ የፋይል ስም

235
አስማት ኩኪዎች
63: 82: 53: 63
ሄክስ
4
"አስማት" ቁጥር, በዚህ መሠረት, ጨምሮ. ይህ ፓኬት የDHCP ፕሮቶኮል መሆኑን ማወቅ ትችላለህ

የDHCP አማራጮች። በማንኛውም ቅደም ተከተል መሄድ ይችላል።

236
የአማራጭ ቁጥር
53
ዲሴ
1
አማራጭ 53፣ የDHCP 2 ፓኬት አይነትን የሚገልጽ - DHCPOFFER

 
የአማራጭ ርዝመት
1
ዲሴ
1

 
የአማራጭ ዋጋ
2
ዲሴ
1

 
የአማራጭ ቁጥር
1
ዲሴ
1
አማራጭ ለ DHCP ደንበኛ የአውታረ መረብ ጭንብል ለማቅረብ

 
የአማራጭ ርዝመት
4
ዲሴ
1

 
የአማራጭ ዋጋ
255.255.224.0
መሾመር
4

 
የአማራጭ ቁጥር
3
ዲሴ
1
ለDHCP ደንበኛ ነባሪ መግቢያ በር የመስጠት አማራጭ

 
የአማራጭ ርዝመት
4
ዲሴ
1

 
የአማራጭ ዋጋ
172.16.12.1
መሾመር
4

 
የአማራጭ ቁጥር
6
ዲሴ
1
DHCP ለዲኤንኤስ ደንበኛ የማቅረብ አማራጭ

 
የአማራጭ ርዝመት
4
ዲሴ
1

 
የአማራጭ ዋጋ
8.8.8.8
መሾመር
4

 
የአማራጭ ቁጥር
51
ዲሴ
1
የተሰጠው የአውታረ መረብ መለኪያዎች የህይወት ዘመን በሰከንዶች ውስጥ፣ ከዚያ በኋላ የDHCP ደንበኛ እንደገና መጠየቅ አለበት።

 
የአማራጭ ርዝመት
4
ዲሴ
1

 
የአማራጭ ዋጋ
86400
ዲሴ
4

 
የአማራጭ ቁጥር
82
ዲሴ
1
አማራጭ 82፣ በDHCPDIScover የመጣውን ይደግማል

 
የአማራጭ ርዝመት
18
ዲሴ
1

 
የአማራጭ ዋጋ
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26፡4 ቀ፡ ኢ.ክ
ዲሴ
18

 
የጥቅል መጨረሻ
255
ዲሴ
1
255 የፓኬቱን መጨረሻ ያመለክታል

DHCPREQUEST

ደንበኛው DHCPOFFERን ከተቀበለ በኋላ በአውታረ መረቡ ላይ ላሉ የDHCP አገልጋዮች ሁሉ የአውታረ መረብ መለኪያዎችን የሚጠይቅ ፓኬት ይመሰርታል፣ ነገር ግን DHCPOFFER በጣም “ወደደው” ለአንድ የተወሰነ ብቻ ነው። የ"መውደድ" መመዘኛዎች ሊለያዩ ይችላሉ እና በደንበኛው የDHCP አተገባበር ላይ ሊመሰረቱ ይችላሉ። የጥያቄው ተቀባይ የ DHCP አገልጋይ MAC አድራሻን በመጠቀም ይገለጻል። እንዲሁም የአገልጋዩ አይፒ አድራሻ ቀደም ብሎ የተገኘ ከሆነ DHCPREQUEST ፓኬት በመጀመሪያ DHCPDISCOVER ሳያመነጭ በደንበኛው ሊላክ ይችላል።

DHCPREQUEST የፓኬት መዋቅር ሠንጠረዥ

በጥቅሉ ውስጥ አቀማመጥ
የእሴት ስም (የተለመደ)
ለምሳሌ:
መግቢያ
ባይት
ማብራሪያ ፡፡

1
የማስነሻ ጥያቄ
1
ሄክስ
1
የመልእክት አይነት። 1 - ከደንበኛ ወደ አገልጋይ ጥያቄ ፣ 2 - ከአገልጋይ ወደ ደንበኛ ምላሽ

2
የሃርድዌር አይነት
1
ሄክስ
1
የሃርድዌር አድራሻ አይነት, በዚህ ፕሮቶኮል 1 - MAC

3
የሃርድዌር አድራሻዎች ርዝመት
6
ሄክስ
1
የመሣሪያ MAC አድራሻ ርዝመት

4
እየተንተከተከ
1
ሄክስ
1
የመካከለኛው መስመሮች ብዛት

5
የግብይት መታወቂያ
23፡cf፡de፡1d
ሄክስ
4
ልዩ የግብይት መለያ። በጥያቄው መጀመሪያ ላይ በደንበኛው የተፈጠረ

7
ሁለተኛ አልፏል
0
ሄክስ
4
አድራሻ የማግኘት ሂደት ከተጀመረበት ጊዜ ጀምሮ በሰከንዶች ውስጥ ጊዜ

9
ባንዲራዎችን አስነሳ
8000
ሄክስ
2
የፕሮቶኮል መለኪያዎችን ለማመልከት ሊዋቀሩ የሚችሉ የተወሰኑ ባንዲራዎች። በዚህ አጋጣሚ "ስርጭት" ተዘጋጅቷል

11
የደንበኛ አይፒ አድራሻ
0.0.0.0
መሾመር
4
የደንበኛ አይፒ አድራሻ (ካለ)

15
የእርስዎ ደንበኛ አይፒ አድራሻ
172.16.134.61
መሾመር
4
በአገልጋዩ የቀረበ የአይፒ አድራሻ (ካለ)

19
የሚቀጥለው አገልጋይ አይፒ አድራሻ
0.0.0.0
መሾመር
4
የአገልጋይ አይፒ አድራሻ (የሚታወቅ ከሆነ)

23
የማስተላለፊያ ወኪል አይፒ አድራሻ
172.16.114.41
መሾመር
4
የማስተላለፊያ ወኪሉ አይፒ አድራሻ (ለምሳሌ ፣ ማብሪያ / ማጥፊያ)

27
የደንበኛ MAC አድራሻ
14:d6:4d:a7:c9:55
ሄክስ
6
የፓኬት ላኪ (ደንበኛ) MAC አድራሻ

31
የደንበኛ ሃርድዌር አድራሻ ንጣፍ
 
ሄክስ
10
የተያዘ መቀመጫ. ብዙውን ጊዜ በዜሮዎች ተሞልቷል።

41
የአገልጋይ አስተናጋጅ ስም
 
መሾመር
64
የDHCP አገልጋይ ስም ብዙውን ጊዜ አይተላለፍም

105
የማስነሻ ፋይል ስም
 
መሾመር
128
በሚነሳበት ጊዜ ዲስክ አልባ ጣቢያዎች በሚጠቀሙበት አገልጋይ ላይ የፋይል ስም

235
አስማት ኩኪዎች
63: 82: 53: 63
ሄክስ
4
"አስማት" ቁጥር, በዚህ መሠረት, ጨምሮ. ይህ ፓኬት የDHCP ፕሮቶኮል መሆኑን ማወቅ ትችላለህ

የDHCP አማራጮች። በማንኛውም ቅደም ተከተል መሄድ ይችላል።

236
የአማራጭ ቁጥር
53
ዲሴ
3
አማራጭ 53፣ የDHCP ፓኬት አይነት 3 - DHCPREQUESTን የሚገልጽ

 
የአማራጭ ርዝመት
1
ዲሴ
1

 
የአማራጭ ዋጋ
3
ዲሴ
1

 
የአማራጭ ቁጥር
61
ዲሴ
1
የደንበኛ መታወቂያ፡ 01 (ለEhernet) + የደንበኛ MAC አድራሻ

 
የአማራጭ ርዝመት
7
ዲሴ
1

 
የአማራጭ ዋጋ
01:2c:ab:25:ff:72:a6
ሄክስ
7

 
የአማራጭ ቁጥር
60
ዲሴ
 
"የሻጭ ክፍል መለያ". በእኔ ሁኔታ፣ የDHCP ደንበኛ ሥሪትን ሪፖርት ያደርጋል። ምናልባት ሌሎች መሳሪያዎች የተለየ ነገር ይመለሳሉ. ዊንዶውስ ለምሳሌ MSFT 5.0 ን ሪፖርት ያደርጋል

 
የአማራጭ ርዝመት
11
ዲሴ
 

 
የአማራጭ ዋጋ
udhcp 0.9.8
መሾመር
 

 
የአማራጭ ቁጥር
55
 
1
በደንበኛው የተጠየቁ የአውታረ መረብ መለኪያዎች። ቅንብር ሊለያይ ይችላል።

01 - የአውታረ መረብ ጭምብል
03 - መተላለፊያ
06 - ዲ ኤን ኤስ
oc - የአስተናጋጅ ስም
0f - የአውታረ መረብ ስም
1c - የስርጭት ጥያቄ አድራሻ (ስርጭት)
42 - የ TFTP አገልጋይ ስም
79 - ክፍል የሌለው የማይንቀሳቀስ መንገድ

 
የአማራጭ ርዝመት
8
 
1

 
የአማራጭ ዋጋ
01:03:06:0c:0f:1c:42:79
 
8

 
የአማራጭ ቁጥር
82
ዲሴ
1
አማራጭ 82፣ በDHCPDIScover የመጣውን ይደግማል

 
የአማራጭ ርዝመት
18
ዲሴ
1

 
የአማራጭ ዋጋ
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26፡4 ቀ፡ ኢ.ክ
ዲሴ
18

 
የጥቅል መጨረሻ
255
ዲሴ
1
255 የፓኬቱን መጨረሻ ያመለክታል

DHCPACK

"አዎ ትክክል ነው፣ ይህ የእርስዎ አይፒ አድራሻ ነው፣ እና ለማንም አልሰጥም" ከDHCP አገልጋይ እንደ ማረጋገጫ፣ በDHCPACK ቅርጸት ከአገልጋዩ ወደ ደንበኛው የሚያገለግል ፓኬት። ልክ እንደሌሎች ፓኬቶች ስርጭት ይላካል። ምንም እንኳን ከዚህ በታች ባለው ኮድ በ Python ውስጥ ለሚተገበረው የDHCP አገልጋይ ፣ እንደዚያ ከሆነ ፣ ቀድሞውኑ የሚታወቅ ከሆነ ማንኛውንም የስርጭት ጥያቄ ለአንድ የተወሰነ ደንበኛ አይፒ በመላክ እባዛለሁ። ከዚህም በላይ የDHCP አገልጋይ የDHCPACK ፓኬጁ ደንበኛው ላይ መድረሱን ምንም ግድ አይሰጠውም። ደንበኛው DHCPACK ካልተቀበለ ከጥቂት ጊዜ በኋላ በቀላሉ DHCPREQUEST ይደግማል

የDHCPACK ፓኬት መዋቅር ሠንጠረዥ

በጥቅሉ ውስጥ አቀማመጥ
የእሴት ስም (የተለመደ)
ለምሳሌ:
መግቢያ
ባይት
ማብራሪያ ፡፡

1
የማስነሻ ጥያቄ
2
ሄክስ
1
የመልእክት አይነት። 1 - ከደንበኛ ወደ አገልጋይ ጥያቄ ፣ 2 - ከአገልጋይ ወደ ደንበኛ ምላሽ

2
የሃርድዌር አይነት
1
ሄክስ
1
የሃርድዌር አድራሻ አይነት, በዚህ ፕሮቶኮል 1 - MAC

3
የሃርድዌር አድራሻዎች ርዝመት
6
ሄክስ
1
የመሣሪያ MAC አድራሻ ርዝመት

4
እየተንተከተከ
1
ሄክስ
1
የመካከለኛው መስመሮች ብዛት

5
የግብይት መታወቂያ
23፡cf፡de፡1d
ሄክስ
4
ልዩ የግብይት መለያ። በጥያቄው መጀመሪያ ላይ በደንበኛው የተፈጠረ

7
ሁለተኛ አልፏል
0
ሄክስ
4
አድራሻ የማግኘት ሂደት ከተጀመረበት ጊዜ ጀምሮ በሰከንዶች ውስጥ ጊዜ

9
ባንዲራዎችን አስነሳ
8000
ሄክስ
2
የፕሮቶኮል መለኪያዎችን ለማመልከት ሊዋቀሩ የሚችሉ የተወሰኑ ባንዲራዎች። በዚህ አጋጣሚ "ስርጭት" ተዘጋጅቷል

11
የደንበኛ አይፒ አድራሻ
0.0.0.0
መሾመር
4
የደንበኛ አይፒ አድራሻ (ካለ)

15
የእርስዎ ደንበኛ አይፒ አድራሻ
172.16.134.61
መሾመር
4
በአገልጋዩ የቀረበ የአይፒ አድራሻ (ካለ)

19
የሚቀጥለው አገልጋይ አይፒ አድራሻ
0.0.0.0
መሾመር
4
የአገልጋይ አይፒ አድራሻ (የሚታወቅ ከሆነ)

23
የማስተላለፊያ ወኪል አይፒ አድራሻ
172.16.114.41
መሾመር
4
የማስተላለፊያ ወኪሉ አይፒ አድራሻ (ለምሳሌ ፣ ማብሪያ / ማጥፊያ)

27
የደንበኛ MAC አድራሻ
14:d6:4d:a7:c9:55
ሄክስ
6
የፓኬት ላኪ (ደንበኛ) MAC አድራሻ

31
የደንበኛ ሃርድዌር አድራሻ ንጣፍ
 
ሄክስ
10
የተያዘ መቀመጫ. ብዙውን ጊዜ በዜሮዎች ተሞልቷል።

41
የአገልጋይ አስተናጋጅ ስም
 
መሾመር
64
የDHCP አገልጋይ ስም ብዙውን ጊዜ አይተላለፍም

105
የማስነሻ ፋይል ስም
 
መሾመር
128
በሚነሳበት ጊዜ ዲስክ አልባ ጣቢያዎች በሚጠቀሙበት አገልጋይ ላይ የፋይል ስም

235
አስማት ኩኪዎች
63: 82: 53: 63
ሄክስ
4
"አስማት" ቁጥር, በዚህ መሠረት, ጨምሮ. ይህ ፓኬት የDHCP ፕሮቶኮል መሆኑን ማወቅ ትችላለህ

የDHCP አማራጮች። በማንኛውም ቅደም ተከተል መሄድ ይችላል።

236
የአማራጭ ቁጥር
53
ዲሴ
3
አማራጭ 53፣ የDHCP ፓኬት አይነት 5 - DHCPACKን የሚገልጽ

 
የአማራጭ ርዝመት
1
ዲሴ
1

 
የአማራጭ ዋጋ
5
ዲሴ
1

 
የአማራጭ ቁጥር
1
ዲሴ
1
አማራጭ ለ DHCP ደንበኛ የአውታረ መረብ ጭንብል ለማቅረብ

 
የአማራጭ ርዝመት
4
ዲሴ
1

 
የአማራጭ ዋጋ
255.255.224.0
መሾመር
4

 
የአማራጭ ቁጥር
3
ዲሴ
1
ለDHCP ደንበኛ ነባሪ መግቢያ በር የመስጠት አማራጭ

 
የአማራጭ ርዝመት
4
ዲሴ
1

 
የአማራጭ ዋጋ
172.16.12.1
መሾመር
4

 
የአማራጭ ቁጥር
6
ዲሴ
1
DHCP ለዲኤንኤስ ደንበኛ የማቅረብ አማራጭ

 
የአማራጭ ርዝመት
4
ዲሴ
1

 
የአማራጭ ዋጋ
8.8.8.8
መሾመር
4

 
የአማራጭ ቁጥር
51
ዲሴ
1
የተሰጠው የአውታረ መረብ መለኪያዎች የህይወት ዘመን በሰከንዶች ውስጥ፣ ከዚያ በኋላ የDHCP ደንበኛ እንደገና መጠየቅ አለበት።

 
የአማራጭ ርዝመት
4
ዲሴ
1

 
የአማራጭ ዋጋ
86400
ዲሴ
4

 
የአማራጭ ቁጥር
82
ዲሴ
1
አማራጭ 82፣ በDHCPDIScover የመጣውን ይደግማል

 
የአማራጭ ርዝመት
18
ዲሴ
1

 
የአማራጭ ዋጋ
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26፡4 ቀ፡ ኢ.ክ
ዲሴ
18

 
የጥቅል መጨረሻ
255
ዲሴ
1
255 የፓኬቱን መጨረሻ ያመለክታል

ቅንብር

መጫኑ በእውነቱ ለስራ አስፈላጊ የሆኑትን የ python ሞጁሎች መጫንን ያካትታል። MySQL አስቀድሞ እንደተጫነ እና እንደተዋቀረ ይገመታል።

FreeBSD

pkg ጫን python3 python3 -m ensurepip pip3 mysql-connector ጫን

ኡቡንቱ

sudo apt-get install python3 sudo apt-get install pip3 sudo pip3 mysql-connector ይጫኑ

የ MySQL ዳታቤዝ እንፈጥራለን፣ የpydhcp.sql መጣያውን ወደ እሱ እንሰቅላለን እና የማዋቀሪያ ፋይሉን እናዋቅራለን።

ውቅር

ሁሉም የአገልጋይ ቅንብሮች በ xml ፋይል ውስጥ ናቸው። የማጣቀሻ ፋይል፡-

1.0 0.0.0.0 255.255.255.255 192.168.0.71 8600 1 255.255.255.0 192.168.0.1 localhost ፈተና ፈተና pydhcp አማራጭ_8.8.8.8_ሄክስ፡sw_port82፡1፡20 አማራጭ_22_ሄክስ፡sw_port82፡2፡16 አማራጭ_18_ሄክስ፡sw_mac፡82፡26 40 የላይኛው(ማክ)=የላይ('{option_3_AgentRemoteId_hex}') እና የላይኛው(ወደብ)=የላይ('{option_1_AgentCircuitId_port_hex}') ካሉ ተጠቃሚዎች ip,mask,router,dns ይምረጡ የላይኛው(ማክ)=የላይ('{sw_mac}') እና የላይኛው(ወደብ)=የላይ('{sw_port82}') ከተጠቃሚዎች ip፣mask፣router፣dns ምረጥ የላይኛው(ማክ)=የላይ('{ClientMacAddress}') ከተጠቃሚዎች ip,mask,router,dns ምረጥ ወደ ታሪክ (መታወቂያ ፣ዲቲ ፣ ማክ ፣አይፒ ፣ አስተያየት) እሴቶች ያስገቡ (ኑል ፣አሁን() ፣'{ClientMacAddress}'፣'{የተጠየቀIpAddress}'፣'DHCPACK/INFORM)

አሁን በበለጠ ዝርዝር መለያዎቹ ላይ፡-

የ dhcpserver ክፍል አገልጋዩን ለመጀመር መሰረታዊ ቅንብሮችን ይገልፃል-

  • አስተናጋጅ - አገልጋዩ በፖርት 67 ላይ የሚያዳምጠውን የአይፒ አድራሻ
  • ስርጭት - የትኛው ip የDHCPOFFER እና DHCPACK ስርጭቱ ነው።
  • DHCPServer - የ DHCP አገልጋይ አይፒ ምንድን ነው።
  • የተሰጠው የአይፒ አድራሻ የሊዝ ጊዜ የኪራይ ጊዜ
  • ThreadLimit - ወደብ 67 የሚመጡ የUDP ፓኬቶችን ለማስኬድ ስንት ክሮች በአንድ ጊዜ እየሮጡ ነው ። ከፍተኛ ጭነት በሚጫኑ ፕሮጀክቶች ላይ ይረዳል ተብሎ ይታሰባል 😉
  • defaultMask,defaultRouter,defaultDNS - በመረጃ ቋቱ ውስጥ አይፒ ከተገኘ በነባሪነት ለተመዝጋቢው የሚቀርበው ነገር ግን ተጨማሪ መለኪያዎች አልተገለጹም

mysql ክፍል:

አስተናጋጅ, የተጠቃሚ ስም, የይለፍ ቃል, የመሠረት ስም - ሁሉም ነገር ለራሱ ይናገራል. ግምታዊ የውሂብ ጎታ መዋቅር ተለጠፈ የፊልሙ

የጥያቄ ክፍል፡ OFFER/ACK የመቀበል ጥያቄዎች እዚህ ተገልጸዋል፡-

  • offer_count - እንደ ip ፣mask ፣ router ፣dns ያሉ ውጤቶችን የሚመልሱ ጥያቄዎች ያሉባቸው የመስመሮች ብዛት
  • offer_n - የመጠይቅ ሕብረቁምፊ። መመለሻው ባዶ ከሆነ የሚከተለውን የቅናሽ ጥያቄ ያስፈጽማል
  • history_sql - ለምሳሌ ለደንበኝነት ተመዝጋቢ ወደ “የፈቃድ ታሪክ” የሚጽፍ መጠይቅ

ጥያቄዎች ከአማራጮች ክፍል ወይም ከDHCP ፕሮቶኮል ውስጥ ያሉ አማራጮችን ማንኛውንም ተለዋዋጮች ሊያካትቱ ይችላሉ።

አማራጮች ክፍል. የበለጠ ትኩረት የሚስብበት ቦታ ይህ ነው። እዚህ በኋላ በጥያቄ ክፍል ውስጥ ልንጠቀምባቸው የምንችላቸውን ተለዋዋጮች መፍጠር እንችላለን።

ለምሳሌ:

option_82_hex:sw_port1:20:22

ይህ የትዕዛዝ መስመር በ DHCP ጥያቄ አማራጭ 82 የመጣውን መስመር በሙሉ በሄክስ ቅርጸት ከ20 እስከ 22 ባይት አካታች ያለውን ክልል ወስዶ በአዲሱ ተለዋዋጭ sw_port1 (ጥያቄው ከመጣበት ወደብ ቀይር) ያስቀምጠዋል።

option_82_hex:sw_mac:26:40

, የ sw_mac ተለዋዋጭን ይግለጹ, ሄክሱን ከክልል 26:40 ይውሰዱ

አገልጋዩን በ -d ማብሪያ / ማጥፊያ በመጀመር በጥያቄዎች ውስጥ ሊጠቀሙባቸው የሚችሉትን ሁሉንም አማራጮች ማየት ይችላሉ። እንደዚህ ያለ መዝገብ እናያለን፡-

--የDHCPINFORM ፓኬት ወደብ 67 ደርሷል፣ ከ0025224ad764፣ b'x91xa5xe0xa3xa5xa9-x8fx8a'፣ ('172.30.114.25'፣ 68) {'ClientMacAddress'፣'0025224cB'd764 00%"Jxd7d' , 'HType': 'ኢተርኔት', 'የአስተናጋጅ ስም': b'x91xa5xe0xa3xa5xa9-x8fx8a', 'ReqListDNS': እውነት, 'ReqListDomainName': እውነት, 'ReqListPerfowmRouterDiscover': እውነት, 'ReqListRouter': True, 'ReqListRout 'ReqListSubnetM ይጠይቁ'፡ እውነት፡ 'ReqListVendorSpecInfo'፡ 43, 'RequestedIpAddress': '0.0.0.0', 'Vendor': b'MSFT 5.0', 'chaddr': '0025224ad764', 'cidadr'.172.30.128.13':'00:00 , 'ባንዲራዎች': b'x172.30.114.25x308', 'giadr': '6', 'gpoz': 1, 'hlen': 82, 'ሆፕስ': 12, 'htype': 'MAC', 'magic_cookie': b'cx12Sc'፣ 'op': 'DHCPINFORM'፣ 'Option53': 53, 'Option55': 55, 'Option60': 60, 'Option61': 61, 'Option82': 82, 'Option82': 12,' አማራጭ_01_ባይት'፡ b'x06x00x04x00x01x00x06x02x08x00x06x00'b'x1x9x2eXx82exb12010600040001000602080006001xad'፣ 'አማራጭ_589_ሄክስ'፡ '2e 82_len'፡ 18 82፣ 'option_12_str'፡ "b'x01x06x00x04x00x01x00x06x02x08x00x06x00x1x9eXx2exb768xad"፣ 'ውጤት'፡ ውሸት፣ 'ሰከንድ'፡ 0.0.0.0፣ 'siadr': '001', 'sw_mac': '589e2eb1ad', 'sw_port06': '89', 'xidbyte': b'

በዚህ መሠረት ማንኛውንም ተለዋዋጭ በ{} ውስጥ መጠቅለል እንችላለን እና በSQL መጠይቁ ውስጥ ጥቅም ላይ ይውላል።

ደንበኛው የአይፒ አድራሻውን እንደተቀበለ ለታሪክ እንመዘግበው፡-

የDHCP+Mysql አገልጋይ በፓይዘን

የDHCP+Mysql አገልጋይ በፓይዘን

የአገልጋይ ጅምር

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

- d የኮንሶል ውፅዓት ሁነታ አርም
- ሐ <ፋይል ስም> የውቅር ፋይል

ብሓቂ

እና አሁን በ Python ውስጥ አገልጋዩን ስለመተግበር ተጨማሪ ዝርዝሮች። ህመም ነው. Python በበረራ ላይ ተምሯል። ብዙ አፍታዎች የተሰሩት “ዋው፣ በሆነ መንገድ እንዲሰራ አድርጌዋለሁ” በሚለው ዘይቤ ነው። ጨርሶ አልተመቻቸም፣ እና በዚህ ቅጽ ውስጥ የተተወው በዋናነት በፓይዘን ልማት ውስጥ ባለው ትንሽ ልምድ ነው። በ "ኮድ" ውስጥ የአገልጋይ አተገባበር በጣም አስደሳች በሆኑ ጉዳዮች ላይ እኖራለሁ.

የኤክስኤምኤል ውቅር ፋይል ተንታኝ

መደበኛ የፓይዘን ሞጁል xml.dom ጥቅም ላይ ይውላል። ቀላል ይመስላል, ነገር ግን በትግበራው ወቅት ይህንን ሞጁል በመጠቀም በኔትወርኩ ላይ ግልጽ የሆኑ ሰነዶች እና ምሳሌዎች እጥረት ታይቷል.

    ዛፍ = minidom.parse (gconfig ["config_file") mconfig = ዛፍ.getElementsByTagName ("mysql") ለ elem mconfig: gconfig ["mysql_host"] =elem.getElementsByTagName ("አስተናጋጅ") [0].firstChild.data gconfig ["mysql_username"]=elem.getElementsByTagName("የተጠቃሚ ስም")[0]።የመጀመሪያ ልጅ.ዳታ gconfig["mysql_password"]=elem.getElementsByTagName("የይለፍ ቃል")[0]።የመጀመሪያ ልጅ.ዳታ gconfig["mysql_basename"] =elem.getElementsByTagName ("basename") [0] .firstChild.data dconfig=tree.getElementsByTagName ("dhcpserver") ለ elem በ dconfig: gconfig ["ስርጭት"]=elem.getElementsByTagName ("ስርጭት")[0]. firstChild.data gconfig ["dhcp_host"]=elem.getElementsByTagName("አስተናጋጅ")[0]።firstChild.data gconfig["dhcp_LeaseTime"]=elem.getElementsByTagName("የሊዝ ጊዜ")[0]።የመጀመሪያ ልጅ.ዳታ gconfig[" dhcp_ThreadLimit"]=int(elem.getElementsByTagName("ThreadLimit")[0] FirstChild.data) gconfig ["dhcp_Server"]=elem.getElementsByTagName("DHCPServer")[0]።የመጀመሪያ ልጅ.ዳታ gconfig["dhcp" =elem.getElementsByTagName("defaultMask")[0]።firstChild.data gconfig["dhcp_defaultRouter"]=elem.getElementsByTagName("defaultRouter")[0]።firstChild.data gconfig["dhcp_defaultDNS"]=elem. defaultDNS") [0] FirstChild.data qconfig=tree.getElementsByTagName ("መጠይቅ") ለ elem qconfig: gconfig ["offer_count"]=elem.getElementsByTagName ("offer_count") [0] .የመጀመሪያ የልጅ.ዳታ ለቁጥር ቁጥር ክልል(int(gconfig ["offer_count"))))፡ gconfig["offer_"+str(ቁጥር+1)]=elem.getElementsByTagName("offer_"+str(ቁጥር+1))[0]።firstChild.data gconfig ["history_sql"]=elem.getElementsByTagName("history_sql")[0].የመጀመሪያ ልጅ.የውሂብ አማራጮች=tree.getElementsByTagName("አማራጮች") ለአማራጮች፡ node=elem.getElementsByTagName("አማራጭ") በመስቀለኛ መንገድ ላሉ አማራጮች። አማራጮችMod.append(options.firstChild.data)

ባለ ብዙ ማነበብ

በሚያስደንቅ ሁኔታ፣ በፓይዘን ውስጥ ባለብዙ-ክር ንባብ በጣም ግልጽ እና ቀላል በሆነ ሁኔታ ይተገበራል።

def PacketWork(ዳታ፣ addr): ... # የመጪውን ፓኬት መተንተን እና ለእሱ ምላሽ መስጠት ... እውነት ሳለ: ዳታ, addr = udp_socket.recvfrom(1024) # የ UDP ፓኬት ክር በመጠበቅ ላይ = ክር. target=PacketWork , args=(data,addr,))) ጀምር() # እንደመጣ - ከዚህ ቀደም የተገለጸውን የፓኬት ዎርክ ተግባር ከበስተጀርባ ከመለኪያ ጋር እናስጀምራለን threading.active_count() >gconfig["dhcp_ThreadLimit"]፡ ጊዜ። sleep(1) # ቁጥሩ ከሆነ ከቅንብሮች ይልቅ እየሰሩ ያሉ ብዙ ክሮች አሉ፣ ጥቂት እስኪሆኑ ድረስ እንጠብቃለን።

የDHCP ፓኬት ተቀበል/ላክ

በኔትወርክ ካርዱ በኩል የሚመጡ የ UDP ፓኬቶችን ለመጥለፍ ሶኬቱን “ማሳደግ” ያስፈልግዎታል

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

ባንዲራዎቹ ባሉበት፡-

  • AF_INET - የአድራሻ ቅርጸቱ IP: port ይሆናል ማለት ነው። እንዲሁም AF_UNIX ሊኖር ይችላል - አድራሻው በፋይል ስም የተሰጠበት።
  • SOCK_DGRAM - ማለት “ጥሬ ፓኬት” አንቀበልም ማለት ነው፣ ነገር ግን አስቀድሞ በፋየርዎል ያለፈ፣ እና በከፊል የተከረከመ ፓኬት ያለው። እነዚያ። የ UDP ፓኬት መጠቅለያ "አካላዊ" አካል ከሌለ የ UDP ፓኬት ብቻ እንቀበላለን። የSOCK_RAW ባንዲራ ከተጠቀሙ፣ ይህን "መጠቅለያ" መተንተንም ያስፈልግዎታል።

ፓኬት መላክ እንደ ስርጭት ሊሆን ይችላል፡-

                    udp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) #ሶኬቱን ወደ ስርጭቱ ሁነታ rz=udp_socket.sendto(packetack, (gconfig["ብሮድካስት"],68))

እና "ጥቅሉ ከየት እንደመጣ" ወደሚለው አድራሻ፡-

                        udp_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # ሶኬቱን ወደ ባለብዙ አድማጭ ሁነታ rz=udp_socket.sendto(packetack, addr) ቀይር

፣ SOL_SOCKET ማለት አማራጮችን ለማቀናበር የ‹ፕሮቶኮል ደረጃ› ማለት ነው።

, SO_BROADCAST አማራጭ የራስ ቁር ጥቅል "ማሰራጨት" ነው

  ,SO_REUSEADDR አማራጭ ሶኬቱን ወደ "ብዙ አድማጮች" ሁነታ ይቀይረዋል. በንድፈ ሀሳብ, በዚህ ጉዳይ ላይ አላስፈላጊ ነው, ነገር ግን በሞከርኩባቸው የ FreeBSD አገልጋዮች ላይ, ኮዱ ያለዚህ አማራጭ አይሰራም.

የDHCP ፓኬትን በመተንተን ላይ

ፓይዘንን በጣም የምወደው ቦታ ይህ ነው። ከሳጥኑ ውስጥ በባይቴኮድ በጣም ተለዋዋጭ እንዲሆኑ ያስችልዎታል። በጣም በቀላሉ ወደ አስርዮሽ እሴቶች፣ ሕብረቁምፊዎች እና ሄክስ እንዲተረጎም መፍቀድ - ማለትም። የጥቅሉን አወቃቀር በትክክል ለመረዳት የሚያስፈልገን ይህ ነው። ስለዚህ፣ ለምሳሌ፣ በHEX እና በቃ ባይት ውስጥ የተለያዩ ባይት ማግኘት ይችላሉ።

    res["xidhex"]=መረጃ[4:8].hex () res["xidbyte"]=መረጃ[4:8]

, ባይት ወደ መዋቅር ያሸጉ:

res["ባንዲራዎች"]=ጥቅል('BB'፣ data[10]፣ data[11])

አይፒን ከመዋቅር ያግኙ፡

res["ciadr"]=socket.inet_ntoa(ጥቅል('BBBB'፣data[12]፣data[13]፣data[14]፣data[15])));

እንዲሁም በተቃራኒው:

res=res+socket.inet_pton(socket.AF_INET፣ gconfig["dhcp_server")

ለአሁን ያ ብቻ ነው 😉

ምንጭ: hab.com

አስተያየት ያክሉ