Python හි DHCP+Mysql සේවාදායකය

Python හි DHCP+Mysql සේවාදායකය

මෙම ව්‍යාපෘතියේ අරමුණ වූයේ:

  • IPv4 ජාලයක DHCP ගැන ඉගෙනීම
  • පයිතන් ඉගෙනීම (මුල සිට 😉)
  • සේවාදායකය ආදේශ කිරීම DB2DHCP (මගේ දෙබලක), මුල් මෙහි, නව මෙහෙයුම් පද්ධතිය සඳහා එකලස් කිරීම වඩ වඩාත් දුෂ්කර වෙමින් පවතී. මම කැමති නැහැ එය "දැන් වෙනස් කිරීමට" ක්‍රමයක් නොමැති ද්විමයයකි
  • ග්‍රාහකයාගේ මැක් හෝ ස්විච් mac+port සංයෝජනය භාවිතයෙන් ග්‍රාහකයාගේ IP ලිපිනය තේරීමේ හැකියාව ඇති ක්‍රියාකාරී DHCP සේවාදායකයක් ලබා ගැනීම (විකල්ප 82)
  • වෙනත් බයිසිකලයක් ලිවීම (අනේ මෙය මගේ ප්‍රියතම ක්‍රියාකාරකමකි)
  • හබ්‍රහබ්‍ර් (හෝ ඊට වඩා හොඳ, ආරාධනයක්) පිළිබඳ ඔබේ සමාජ-හස්තභාවය පිළිබඳ අදහස් ලබා ගැනීම 😉

ප්‍රතිඵලය: එය ක්‍රියා කරයි 😉 FreeBSD සහ Ubuntu OS මත පරීක්ෂා කර ඇත. න්‍යායාත්මකව, කේතය ඕනෑම OS යටතේ වැඩ කිරීමට ඉල්ලා සිටිය හැක, මන්ද කේතයෙහි නිශ්චිත බැඳීම් නොමැති බව පෙනේ.
පරිස්සමෙන්! තව ගොඩක් දේවල් එන්න තියෙනවා.

ආධුනිකයන් සඳහා ගබඩාව වෙත සබැඳිය "සජීවීව ස්පර්ශ කරන්න".

"දෘඪාංග අධ්යයනය කිරීමේ" ප්රතිඵලය ස්ථාපනය කිරීම, වින්යාස කිරීම සහ භාවිතා කිරීමේ ක්රියාවලිය බෙහෙවින් අඩු වන අතර, පසුව DHCP ප්රොටෝකෝලය පිළිබඳ කුඩා න්යායක්. මා සඳහා. සහ ඉතිහාසය සඳහා 😉

පොඩි න්‍යායක්

DHCP යනු කුමක්ද?

මෙය DHCP සේවාදායකයකින් උපාංගයකට එහි IP ලිපිනය (සහ ද්වාරය, DNS, ආදිය වැනි අනෙකුත් පරාමිති) සොයා ගැනීමට ඉඩ සලසන ජාල ප්‍රොටෝකෝලයකි. UDP ප්‍රොටෝකෝලය භාවිතයෙන් පැකට් හුවමාරු වේ. ජාල පරාමිතීන් ඉල්ලා සිටින විට උපාංගයේ ක්රියාකාරිත්වයේ පොදු මූලධර්මය පහත පරිදි වේ:

  1. උපාංගය (සේවාදායකයා) "හොඳයි, කවුරුහරි මට IP ලිපිනයක් දෙන්න" යන ඉල්ලීම සමඟ ජාලය පුරා UDP විකාශන ඉල්ලීමක් (DHCPDISCOVER) යවයි. එපමණක් නොව, සාමාන්‍යයෙන් (නමුත් සෑම විටම නොවේ) ඉල්ලීම සිදු වන්නේ වරාය 68 (මූලාශ්‍රය) වෙතින් වන අතර ගමනාන්තය වරාය 67 (ගමනාන්තය) වේ. සමහර උපාංග 67 වරායෙන් පැකට් යවයි. සේවාදායක උපාංගයේ MAC ලිපිනය DHCPDISCOVER පැකේජය තුළ ඇතුළත් වේ.
  2. ජාලයේ පිහිටා ඇති සියලුම DHCP සේවාදායකයන් (සහ ඒවායින් කිහිපයක් තිබිය හැක) DHCPDISCOVER යවන ලද උපාංගය සඳහා ජාල සැකසුම් සමඟ DHCPOFFER පිරිනැමීමක් සාදන අතර එය ජාලය හරහා විකාශනය කරයි. මෙම පැකට්ටුව අදහස් කරන්නේ කවුරුන්ද යන්න හඳුනා ගැනීම DHCPDISCOVER ඉල්ලීමේ කලින් ලබා දී ඇති සේවාදායකයාගේ MAC ලිපිනය මත පදනම් වේ.
  3. සේවාලාභියා ජාල සැකසුම් සඳහා යෝජනා සහිත පැකට් පිළිගනී, වඩාත්ම ආකර්ශනීය එකක් තෝරා ගනී (නිර්ණායකය වෙනස් විය හැකිය, උදාහරණයක් ලෙස, පැකට් බෙදා හැරීමේ වේලාව, අතරමැදි මාර්ග ගණන), සහ ජාල සැකසුම් සමඟ “නිල ඉල්ලීමක්” DHCPREQUEST කරයි. එය කැමති DHCP සේවාදායකයෙන්. මෙම අවස්ථාවේදී, පැකට්ටුව නිශ්චිත DHCP සේවාදායකයකට යයි.
  4. DHCPREQUEST ලැබුණු සේවාදායකය DHCPACK ආකෘති පැකට්ටුවක් යවයි, එය නැවත වරක් මෙම සේවාදායකයා සඳහා අදහස් කරන ජාල සැකසුම් ලැයිස්තුගත කරයි.

Python හි DHCP+Mysql සේවාදායකය

මීට අමතරව, සේවාලාභියාගෙන් ලැබෙන DHCPINFORM පැකට් ඇති අතර, එහි අරමුණ වන්නේ "සේවාදායකයා ජීවතුන් අතර" සහ නිකුත් කරන ලද ජාල සැකසුම් භාවිතා කරන බව DHCP සේවාදායකයට දැනුම් දීමයි. මෙම සේවාදායකයේ ක්‍රියාත්මක කිරීමේදී, මෙම පැකට් නොසලකා හරිනු ලැබේ.

පැකේජ ආකෘතිය

පොදුවේ ගත් කල, ඊතර්නෙට් පැකට් රාමුවක් මේ වගේ දෙයක් පෙනේ:

Python හි DHCP+Mysql සේවාදායකය

අපගේ නඩුවේදී, අපි OSI ස්ථර ප්‍රොටෝකෝල ශීර්ෂයන් නොමැතිව, එනම් DHCP ව්‍යුහය නොමැතිව UDP පැකට්ටුවේ අන්තර්ගතයෙන් සෘජුවම දත්ත පමණක් සලකා බලමු:

DHCPDiscover

එබැවින්, උපාංගයක් සඳහා IP ලිපිනයක් ලබා ගැනීමේ ක්‍රියාවලිය ආරම්භ වන්නේ DHCP සේවාලාභියා වරාය 68 සිට 255.255.255.255:67 වෙත විකාශන ඉල්ලීමක් යැවීමෙනි. මෙම පැකේජය තුළ, සේවාදායකයාට එහි MAC ලිපිනය මෙන්ම DHCP සේවාදායකයෙන් ලබා ගැනීමට අවශ්‍ය දේ ඇතුළත් වේ. පැකේජ ව්යුහය පහත වගුවේ විස්තර කර ඇත.

DHCPDISCOVER පැකට් ව්‍යුහ වගුව

පැකේජයේ පිහිටීම
වටිනාකම් නම
උදාහරණ:
හැඳින්වීම
බයිට්
පැහැදිලි කිරීම

1
ඇරඹුම් ඉල්ලීම
1
hex
1
පණිවිඩ වර්ගය. 1 - සේවාදායකයාගෙන් සේවාදායකයට ඉල්ලීම, 2 - සේවාදායකයෙන් සේවාදායකයාට ප්රතිචාරය

2
දෘඪාංග වර්ගය
1
hex
1
දෘඪාංග ලිපිනයේ වර්ගය, මෙම ප්රොටෝකෝලය 1 - MAC

3
දෘඪාංග දිග ලිපිනයන්
6
hex
1
උපාංගයේ MAC ලිපින දිග

4
හම්ප්
1
hex
1
අතරමැදි මාර්ග ගණන

5
ගනුදෙනු හැඳුනුම්පත
23:cf:de:1d
hex
4
අද්විතීය ගනුදෙනු හඳුනාගැනීම. ඉල්ලීම් මෙහෙයුමක් ආරම්භයේදී සේවාදායකයා විසින් උත්පාදනය කරන ලදී

7
දෙවනුව ගෙවී ගියේය
0
hex
4
ලිපිනයක් ලබා ගැනීමේ ක්රියාවලිය ආරම්භයේ සිට තත්පර කිහිපයකින් කාලය

9
බූට් කොඩි
0
hex
2
ප්‍රොටෝකෝල පරාමිතීන් දැක්වීමට සැකසිය හැකි ඇතැම් කොඩි

11
සේවාලාභී IP ලිපිනය
0.0.0.0
රේඛාව
4
සේවාලාභී IP ලිපිනය (ඇත්නම්)

15
ඔබේ සේවාදායක IP ලිපිනය
0.0.0.0
රේඛාව
4
සේවාදායකය විසින් පිරිනමනු ලබන IP ලිපිනය (තිබේ නම්)

19
ඊළඟ සේවාදායක IP ලිපිනය
0.0.0.0
රේඛාව
4
සේවාදායක IP ලිපිනය (දන්නේ නම්)

23
රිලේ නියෝජිත IP ලිපිනය
172.16.114.41
රේඛාව
4
රිලේ නියෝජිතයාගේ IP ලිපිනය (උදාහරණයක් ලෙස, ස්විචයක්)

27
සේවාලාභී MAC ලිපිනය
14:d6:4d:a7:c9:55
hex
6
පැකට් යවන්නාගේ MAC ලිපිනය (සේවාදායකයා)

31
සේවාලාභී දෘඪාංග ලිපින පිරවුම
 
hex
10
වෙන් කළ ආසනය. සාමාන්යයෙන් බිංදු වලින් පිරී ඇත

41
සේවාදායක සත්කාරක නාමය
 
රේඛාව
64
DHCP සේවාදායකයේ නම. සාමාන්යයෙන් සම්ප්රේෂණය නොවේ

105
ඇරඹුම් ගොනු නාමය
 
රේඛාව
128
ආරම්භ කිරීමේදී තැටි රහිත ස්ථාන භාවිතා කරන සේවාදායකයේ ගොනු නාමය

235
මැජික් කුකීස්
63: 82: 53: 63
hex
4
"මැජික්" අංකය, ඒ අනුව, ඇතුළුව. මෙම පැකට්ටුව DHCP ප්‍රොටෝකෝලයට අයත් බව ඔබට තීරණය කළ හැක

DHCP විකල්ප. ඕනෑම පිළිවෙළකට යන්න පුළුවන්

236
විකල්ප අංකය
53
දෙසැම්බර්
1
විකල්ප 53, DHCP පැකට් වර්ගය සඳහන් කරයි

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

 
විකල්ප දිග
1
දෙසැම්බර්
1

 
විකල්ප අගය
1
දෙසැම්බර්
1

 
විකල්ප අංකය
50
දෙසැම්බර්
1
සේවාලාභියාට ලැබීමට අවශ්‍ය IP ලිපිනය කුමක්ද?

 
විකල්ප දිග
4
දෙසැම්බර්
1

 
විකල්ප අගය
172.16.134.61
රේඛාව
4

 
විකල්ප අංකය
55
 
1
සේවාලාභියා විසින් ඉල්ලා සිටින ජාල පරාමිතීන්. සංයුතිය වෙනස් විය හැක

01 - ජාල ආවරණ
03 - ගේට්වේ
06 - DNS
oc - සත්කාරක නාමය
0f - ජාල ඩොමේන් නාමය
1c - විකාශන ඉල්ලීමේ ලිපිනය (විකාශනය)
42 - TFTP සේවාදායකයේ නම
79 - පන්ති රහිත ස්ථිතික මාර්ගය

 
විකල්ප දිග
8
 
1

 
විකල්ප අගය
01:03:06:0c:0f:1c:42:79
 
8

 
විකල්ප අංකය
82
දෙසැම්බර්
 
විකල්ප 82, එය රිපීටර් උපාංගයේ MAC ලිපිනය සහ අමතර අගයන් සම්ප්‍රේෂණය කරයි.

බොහෝ විට, අවසාන DHCP සේවාලාභියා ක්රියාත්මක වන ස්විචයේ වරාය මෙය වේ.මෙම විකල්පය අතිරේක පරාමිතීන් අඩංගු වේ.පළමු බයිටය "උප විකල්පය" අංකය, දෙවන එහි දිග, පසුව එහි අගය වේ.

මෙම අවස්ථාවේදී, විකල්ප 82 හි, උප-විකල්ප කැදලි කර ඇත:
Agent Circuit ID = 00:04:00:01:00:04, මෙහි අවසාන බයිට් දෙක වන්නේ ඉල්ලීම පැමිණි DHCP සේවාදායක වරායයි.

නියෝජිත දුරස්ථ ID = 00:06:c8:be:19:93:11:48 - DHCP රිපීටර් උපාංගයේ MAC ලිපිනය

 
විකල්ප දිග
18
දෙසැම්බර්
 

 
විකල්ප අගය
01:06
00:04:00:01:00:04
02:08
00:06:c8:be:19:93:11:48
hex
 

 
පැකේජයේ අවසානය
255
දෙසැම්බර්
1
255 පැකට්ටුවේ අවසානය සංකේතවත් කරයි

ඩීඑච්සීපී ඔෆර්

සේවාදායකයට DHCPDISCOVER පැකට්ටුව ලැබුණු විගසම සහ එය සේවාදායකයාට ඉල්ලුම් කළ එකකින් යමක් පිරිනැමිය හැකි බව දුටුවහොත්, එය ඒ සඳහා ප්‍රතිචාරයක් ජනනය කරයි - DHCPDISCOVER. ප්රතිචාරය "එය පැමිණි ස්ථානයෙන්" වරාය වෙත යවනු ලැබේ, විකාශනය මගින්, නිසා මේ මොහොතේ, සේවාදායකයාට තවමත් IP ලිපිනයක් නොමැත, එබැවින් එය පැකට්ටුව පිළිගත හැක්කේ එය විකාශනය මගින් යවනු ලැබුවහොත් පමණි. සේවාලාභියා මෙය තමා සඳහා පැකේජයක් බව හඳුනා ගන්නේ පැකේජය තුළ ඇති ඔහුගේ MAC ලිපිනයෙන් මෙන්ම පළමු පැකේජය නිර්මාණය කරන අවස්ථාවේ ඔහු උත්පාදනය කරන ගනුදෙනු අංකයෙනි.

DHCPOFFER පැකට් ව්‍යුහ වගුව

පැකේජයේ පිහිටීම
වටිනාකමේ නම (පොදු)
උදාහරණ:
හැඳින්වීම
බයිට්
පැහැදිලි කිරීම

1
ඇරඹුම් ඉල්ලීම
1
hex
1
පණිවිඩ වර්ගය. 1 - සේවාදායකයාගෙන් සේවාදායකයට ඉල්ලීම, 2 - සේවාදායකයෙන් සේවාදායකයාට ප්රතිචාරය

2
දෘඪාංග වර්ගය
1
hex
1
දෘඪාංග ලිපිනයේ වර්ගය, මෙම ප්රොටෝකෝලය 1 - MAC

3
දෘඪාංග දිග ලිපිනයන්
6
hex
1
උපාංගයේ MAC ලිපින දිග

4
හම්ප්
1
hex
1
අතරමැදි මාර්ග ගණන

5
ගනුදෙනු හැඳුනුම්පත
23:cf:de:1d
hex
4
අද්විතීය ගනුදෙනු හඳුනාගැනීම. ඉල්ලීම් මෙහෙයුමක් ආරම්භයේදී සේවාදායකයා විසින් උත්පාදනය කරන ලදී

7
දෙවනුව ගෙවී ගියේය
0
hex
4
ලිපිනයක් ලබා ගැනීමේ ක්රියාවලිය ආරම්භයේ සිට තත්පර කිහිපයකින් කාලය

9
බූට් කොඩි
0
hex
2
ප්‍රොටෝකෝල පරාමිතීන් දැක්වීමට සැකසිය හැකි ඇතැම් කොඩි. මෙම අවස්ථාවේදී, 0 යන්නෙන් අදහස් වන්නේ යුනිකාස්ට් ඉල්ලීම් වර්ගයයි

11
සේවාලාභී IP ලිපිනය
0.0.0.0
රේඛාව
4
සේවාලාභී IP ලිපිනය (ඇත්නම්)

15
ඔබේ සේවාදායක IP ලිපිනය
172.16.134.61
රේඛාව
4
සේවාදායකය විසින් පිරිනමනු ලබන IP ලිපිනය (තිබේ නම්)

19
ඊළඟ සේවාදායක IP ලිපිනය
0.0.0.0
රේඛාව
4
සේවාදායක IP ලිපිනය (දන්නේ නම්)

23
රිලේ නියෝජිත IP ලිපිනය
172.16.114.41
රේඛාව
4
රිලේ නියෝජිතයාගේ IP ලිපිනය (උදාහරණයක් ලෙස, ස්විචයක්)

27
සේවාලාභී MAC ලිපිනය
14:d6:4d:a7:c9:55
hex
6
පැකට් යවන්නාගේ MAC ලිපිනය (සේවාදායකයා)

31
සේවාලාභී දෘඪාංග ලිපින පිරවුම
 
hex
10
වෙන් කළ ආසනය. සාමාන්යයෙන් බිංදු වලින් පිරී ඇත

41
සේවාදායක සත්කාරක නාමය
 
රේඛාව
64
DHCP සේවාදායකයේ නම. සාමාන්යයෙන් සම්ප්රේෂණය නොවේ

105
ඇරඹුම් ගොනු නාමය
 
රේඛාව
128
ආරම්භ කිරීමේදී තැටි රහිත ස්ථාන භාවිතා කරන සේවාදායකයේ ගොනු නාමය

235
මැජික් කුකීස්
63: 82: 53: 63
hex
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
DNS සේවාලාභියාට 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:4d:ec
දෙසැම්බර්
18

 
පැකේජයේ අවසානය
255
දෙසැම්බර්
1
255 පැකට්ටුවේ අවසානය සංකේතවත් කරයි

DHCPREQUEST

සේවාලාභියාට DHCPOFFER ලැබුණු පසු, ඔහු ජාලයේ ඇති සියලුම DHCP සේවාදායකයන්ට නොව, ඔහු වඩාත්ම “කැමති” වූ DHCPOFFER පිරිනැමීමේ එක් විශේෂිත එකකට පමණක් ජාල පරාමිති ඉල්ලා පැකට්ටුවක් සාදයි. "වැනි" නිර්ණායක වෙනස් විය හැකි අතර සේවාලාභියාගේ DHCP ක්රියාත්මක කිරීම මත රඳා පවතී. ඉල්ලීම ලබන්නා DHCP සේවාදායකයේ MAC ලිපිනය භාවිතයෙන් නියම කර ඇත. එසේම, සේවාදායකයේ IP ලිපිනය කලින් ලබාගෙන තිබේ නම්, DHCPDISCOVER ප්‍රථමයෙන් ජනනය නොකර සේවාලාභියාට DHCPREQUEST පැකට්ටුවක් යැවිය හැක.

DHCPREQUEST පැකට් ව්‍යුහ වගුව

පැකේජයේ පිහිටීම
වටිනාකමේ නම (පොදු)
උදාහරණ:
හැඳින්වීම
බයිට්
පැහැදිලි කිරීම

1
ඇරඹුම් ඉල්ලීම
1
hex
1
පණිවිඩ වර්ගය. 1 - සේවාදායකයාගෙන් සේවාදායකයට ඉල්ලීම, 2 - සේවාදායකයෙන් සේවාදායකයාට ප්රතිචාරය

2
දෘඪාංග වර්ගය
1
hex
1
දෘඪාංග ලිපිනයේ වර්ගය, මෙම ප්රොටෝකෝලය 1 - MAC

3
දෘඪාංග දිග ලිපිනයන්
6
hex
1
උපාංගයේ MAC ලිපින දිග

4
හම්ප්
1
hex
1
අතරමැදි මාර්ග ගණන

5
ගනුදෙනු හැඳුනුම්පත
23:cf:de:1d
hex
4
අද්විතීය ගනුදෙනු හඳුනාගැනීම. ඉල්ලීම් මෙහෙයුමක් ආරම්භයේදී සේවාදායකයා විසින් උත්පාදනය කරන ලදී

7
දෙවනුව ගෙවී ගියේය
0
hex
4
ලිපිනයක් ලබා ගැනීමේ ක්රියාවලිය ආරම්භයේ සිට තත්පර කිහිපයකින් කාලය

9
බූට් කොඩි
8000
hex
2
ප්‍රොටෝකෝල පරාමිතීන් දැක්වීමට සැකසිය හැකි ඇතැම් කොඩි. මෙම අවස්ථාවේදී, "විකාශනය" සකසා ඇත

11
සේවාලාභී IP ලිපිනය
0.0.0.0
රේඛාව
4
සේවාලාභී IP ලිපිනය (ඇත්නම්)

15
ඔබේ සේවාදායක IP ලිපිනය
172.16.134.61
රේඛාව
4
සේවාදායකය විසින් පිරිනමනු ලබන IP ලිපිනය (තිබේ නම්)

19
ඊළඟ සේවාදායක IP ලිපිනය
0.0.0.0
රේඛාව
4
සේවාදායක IP ලිපිනය (දන්නේ නම්)

23
රිලේ නියෝජිත IP ලිපිනය
172.16.114.41
රේඛාව
4
රිලේ නියෝජිතයාගේ IP ලිපිනය (උදාහරණයක් ලෙස, ස්විචයක්)

27
සේවාලාභී MAC ලිපිනය
14:d6:4d:a7:c9:55
hex
6
පැකට් යවන්නාගේ MAC ලිපිනය (සේවාදායකයා)

31
සේවාලාභී දෘඪාංග ලිපින පිරවුම
 
hex
10
වෙන් කළ ආසනය. සාමාන්යයෙන් බිංදු වලින් පිරී ඇත

41
සේවාදායක සත්කාරක නාමය
 
රේඛාව
64
DHCP සේවාදායකයේ නම. සාමාන්යයෙන් සම්ප්රේෂණය නොවේ

105
ඇරඹුම් ගොනු නාමය
 
රේඛාව
128
ආරම්භ කිරීමේදී තැටි රහිත ස්ථාන භාවිතා කරන සේවාදායකයේ ගොනු නාමය

235
මැජික් කුකීස්
63: 82: 53: 63
hex
4
"මැජික්" අංකය, ඒ අනුව, ඇතුළුව. මෙම පැකට්ටුව DHCP ප්‍රොටෝකෝලයට අයත් බව ඔබට තීරණය කළ හැක

DHCP විකල්ප. ඕනෑම පිළිවෙළකට යන්න පුළුවන්

236
විකල්ප අංකය
53
දෙසැම්බර්
3
විකල්ප 53, DHCP පැකට් වර්ගය 3 - DHCPREQUEST නිර්වචනය කරයි

 
විකල්ප දිග
1
දෙසැම්බර්
1

 
විකල්ප අගය
3
දෙසැම්බර්
1

 
විකල්ප අංකය
61
දෙසැම්බර්
1
සේවාලාභී ID: 01 (Ehernet සඳහා) + සේවාදායක MAC ලිපිනය

 
විකල්ප දිග
7
දෙසැම්බර්
1

 
විකල්ප අගය
01:2c:ab:25:ff:72:a6
hex
7

 
විකල්ප අංකය
60
දෙසැම්බර්
 
"වෙළෙන්දා පන්තියේ හැඳුනුම්කාරකය". මගේ නඩුවේදී, එය DHCP සේවාදායක අනුවාදය වාර්තා කරයි. සමහර විට වෙනත් උපාංග වෙනස් දෙයක් ලබා දෙයි. වින්ඩෝස් උදාහරණයක් ලෙස MSFT 5.0 වාර්තා කරයි

 
විකල්ප දිග
11
දෙසැම්බර්
 

 
විකල්ප අගය
udhcp 0.9.8
රේඛාව
 

 
විකල්ප අංකය
55
 
1
සේවාලාභියා විසින් ඉල්ලා සිටින ජාල පරාමිතීන්. සංයුතිය වෙනස් විය හැක

01 - ජාල ආවරණ
03 - ගේට්වේ
06 - DNS
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:4d:ec
දෙසැම්බර්
18

 
පැකේජයේ අවසානය
255
දෙසැම්බර්
1
255 පැකට්ටුවේ අවසානය සංකේතවත් කරයි

DHCPACK

DHCP සේවාදායකයෙන් "ඔව්, ඒක හරි, මේක ඔයාගේ IP ලිපිනය, මම ඒක වෙන කාටවත් දෙන්නේ නැහැ" කියලා තහවුරු කිරීමක් ලෙස, DHCPACK ආකෘතියේ පැකට්ටුවක් සේවාදායකයෙන් සේවාදායකයාට සේවය කරයි. එය අනෙක් පැකට් මෙන් විකාශනය යවනු ලැබේ. කෙසේ වෙතත්, පයිතන් හි ක්‍රියාත්මක කරන ලද DHCP සේවාදායකයක් සඳහා පහත කේතයේ, යම් අවස්ථාවක, මම දැනටමත් දන්නා නම්, විශේෂිත සේවාදායක IP වෙත පැකට්ටුවක් යැවීමෙන් ඕනෑම විකාශන ඉල්ලීමක් අනුපිටපත් කරමි. එපමණක් නොව, DHCPACK පැකට්ටුව සේවාදායකයා වෙත ළඟා වී තිබේද යන්න DHCP සේවාදායකය කිසිසේත්ම ගණන් ගන්නේ නැත. සේවාදායකයාට DHCPACK නොලැබුනේ නම්, ටික වේලාවකට පසු එය DHCPREQUEST නැවත නැවත සිදු කරයි.

DHCPACK පැකට් ව්‍යුහ වගුව

පැකේජයේ පිහිටීම
වටිනාකමේ නම (පොදු)
උදාහරණ:
හැඳින්වීම
බයිට්
පැහැදිලි කිරීම

1
ඇරඹුම් ඉල්ලීම
2
hex
1
පණිවිඩ වර්ගය. 1 - සේවාදායකයාගෙන් සේවාදායකයට ඉල්ලීම, 2 - සේවාදායකයෙන් සේවාදායකයාට ප්රතිචාරය

2
දෘඪාංග වර්ගය
1
hex
1
දෘඪාංග ලිපිනයේ වර්ගය, මෙම ප්රොටෝකෝලය 1 - MAC

3
දෘඪාංග දිග ලිපිනයන්
6
hex
1
උපාංගයේ MAC ලිපින දිග

4
හම්ප්
1
hex
1
අතරමැදි මාර්ග ගණන

5
ගනුදෙනු හැඳුනුම්පත
23:cf:de:1d
hex
4
අද්විතීය ගනුදෙනු හඳුනාගැනීම. ඉල්ලීම් මෙහෙයුමක් ආරම්භයේදී සේවාදායකයා විසින් උත්පාදනය කරන ලදී

7
දෙවනුව ගෙවී ගියේය
0
hex
4
ලිපිනයක් ලබා ගැනීමේ ක්රියාවලිය ආරම්භයේ සිට තත්පර කිහිපයකින් කාලය

9
බූට් කොඩි
8000
hex
2
ප්‍රොටෝකෝල පරාමිතීන් දැක්වීමට සැකසිය හැකි ඇතැම් කොඩි. මෙම අවස්ථාවේදී, "විකාශනය" සකසා ඇත

11
සේවාලාභී IP ලිපිනය
0.0.0.0
රේඛාව
4
සේවාලාභී IP ලිපිනය (ඇත්නම්)

15
ඔබේ සේවාදායක IP ලිපිනය
172.16.134.61
රේඛාව
4
සේවාදායකය විසින් පිරිනමනු ලබන IP ලිපිනය (තිබේ නම්)

19
ඊළඟ සේවාදායක IP ලිපිනය
0.0.0.0
රේඛාව
4
සේවාදායක IP ලිපිනය (දන්නේ නම්)

23
රිලේ නියෝජිත IP ලිපිනය
172.16.114.41
රේඛාව
4
රිලේ නියෝජිතයාගේ IP ලිපිනය (උදාහරණයක් ලෙස, ස්විචයක්)

27
සේවාලාභී MAC ලිපිනය
14:d6:4d:a7:c9:55
hex
6
පැකට් යවන්නාගේ MAC ලිපිනය (සේවාදායකයා)

31
සේවාලාභී දෘඪාංග ලිපින පිරවුම
 
hex
10
වෙන් කළ ආසනය. සාමාන්යයෙන් බිංදු වලින් පිරී ඇත

41
සේවාදායක සත්කාරක නාමය
 
රේඛාව
64
DHCP සේවාදායකයේ නම. සාමාන්යයෙන් සම්ප්රේෂණය නොවේ

105
ඇරඹුම් ගොනු නාමය
 
රේඛාව
128
ආරම්භ කිරීමේදී තැටි රහිත ස්ථාන භාවිතා කරන සේවාදායකයේ ගොනු නාමය

235
මැජික් කුකීස්
63: 82: 53: 63
hex
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
DNS සේවාලාභියාට 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:4d:ec
දෙසැම්බර්
18

 
පැකේජයේ අවසානය
255
දෙසැම්බර්
1
255 පැකට්ටුවේ අවසානය සංකේතවත් කරයි

ස්ථාපනය

ස්ථාපනය ඇත්ත වශයෙන්ම සමන්විත වන්නේ වැඩ සඳහා අවශ්ය python මොඩියුල ස්ථාපනය කිරීමයි. MySQL දැනටමත් ස්ථාපනය කර වින්‍යාස කර ඇති බව උපකල්පනය කෙරේ.

FreeBSD

pkg ස්ථාපනය python3 python3 -m surepip 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 දේශීය සත්කාරක පරීක්ෂණය පරීක්ෂණය pydhcp option_8.8.8.8_hex:sw_port82:1:20 option_22_hex:sw_port82:2:16 option_18_hex:sw_mac:82:26 40 top(mac)=upper('{option_3_AgentRemoteId_hex}') සහ ඉහල(port)=upper('{option_1_AgentCircuitId_port_hex}') භාවිතා කරන්නන්ගෙන් ip,mask,router,dns තෝරන්න top(mac)=upper('{sw_mac}') සහ ඉහල(port)=upper('{sw_port82}') භාවිතා කරන්නන්ගෙන් ip,mask,router,dns තෝරන්න top(mac)=upper('{ClientMacAddress}') භාවිතා කරන්නන්ගෙන් ip,mask,router,dns තෝරන්න ඉතිහාසයට ඇතුල් කරන්න (id,dt,mac,ip,comment) අගයන් (null,now(),'{ClientMacAddress}','{RequestedIpAddress}','DHCPACK/INFORM')

දැන් ටැග් ගැන වඩාත් විස්තරාත්මකව:

dhcpserver කොටස සේවාදායකය ආරම්භ කිරීම සඳහා මූලික සැකසුම් විස්තර කරයි, එනම්:

  • සත්කාරක - 67 වරායේ සේවාදායකය සවන් දෙන IP ලිපිනය
  • විකාශනය - DHCPOFFER සහ DHCPACK සඳහා විකාශනය වන ip යනු කුමක්ද?
  • DHCPServer - DHCP සේවාදායකයේ ip යනු කුමක්ද?
  • නිකුත් කරන ලද IP ලිපිනයේ LeaseTime කල්බදු කාලය
  • ThreadLimit - 67 වරායේ එන UDP පැකට් සැකසීමට නූල් කීයක් එකවර ක්‍රියාත්මක වේද?
  • defaultMask,defaultRouter,defaultDNS - දත්ත ගබඩාවේ IP එකක් හමු වුවහොත් පෙරනිමියෙන් ග්‍රාහකයාට පිරිනමනු ලබන දේ, නමුත් ඒ සඳහා අමතර පරාමිතීන් නියම කර නොමැත.

mysql කොටස:

සත්කාරක, පරිශීලක නාමය, මුරපදය, මූලික නාමය - සෑම දෙයක්ම තමාටම කථා කරයි. දළ දත්ත සමුදා ව්‍යුහයක් පළ කර ඇත GitHub

විමසුම් කොටස: පිරිනැමීම/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

, 26:40 පරාසයෙන් හෙක්ස් ලබා ගනිමින් sw_mac විචල්‍යය නිර්වචනය කරන්න

-d ස්විචය සමඟ සේවාදායකය ආරම්භ කිරීමෙන් විමසුම්වල භාවිතා කළ හැකි සියලු විකල්ප ඔබට දැක ගත හැක. අපි මේ වගේ දෙයක් දකිනු ඇත:

--DHCPINFORM පැකට්ටුවක් 67ad0025224 , b'x764xa91xe5xa0xa3xa5-x9fx8a' , ('8', 172.30.114.25) {'ClientMacAddress' b'x68 0025224%"Jxd764d' , ' HType': 'Ethernet', 'HostName': b'x00xa7xe91xa5xa0xa3-x5fx9a', 'ReqListDNS': සත්‍ය, 'ReqListDomainName': True, 'ReqListPerfowmRouterLDiscover: TrueListecover' මාර්ගය': ඇත්ත, 'ReqListSubnetM අහන්න': සත්‍ය, 'ReqListVendorSpecInfo': 8, 'RequestedIpAddress': '8', 'Vendor': b'MSFT 43', 'chaddr': '0.0.0.0ad5.0', '0025224. , 'flags ': b'x764x172.30.128.13', 'giaddr': '00', 'gpoz': 00, 'hlen': 172.30.114.25, 'hops': 308, 'htype': 'MAC', 'magic_cookie': b'cx6Sc ', 'op': 'DHCPINFORM', 'option1': 82, 'option12': 12, 'option53': 53, 'option55': 55, 'option60': 60, 'option61': 61, ' option_82_byte': b'x82x82x12x01x06x00x04x00x01x00x06x02' b'x08x00x06eXx00exb1xad', 'option_9_hex': '2, '82 _12010600040001000602080006001_len': 589 2, 'option_82_str': "b'x18x82x12x01x06x00x04x00x01x00x06x02x08x00x06eXx00exb1xad'", 'ප්‍රතිඵලය': අසත්‍ය, 'තත්පර 9': 'siaddr': '2', 'sw_mac': '768e0.0.0.0eb001ad', 'sw_port589': '2', 'xidbyte': b'

ඒ අනුව, අපට {} හි ඕනෑම විචල්‍යයක් ආවරණය කළ හැකි අතර එය SQL විමසුමේදී භාවිතා වේ.

සේවාදායකයාට IP ලිපිනය ලැබුණු බව ඉතිහාසය සඳහා සටහන් කරමු:

Python හි DHCP+Mysql සේවාදායකය

Python හි DHCP+Mysql සේවාදායකය

සේවාදායක ආරම්භය

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

— d console output mode DEBUG
- c <ගොනු නාමය> වින්‍යාස ගොනුව

සංක්ෂිප්ත කිරීම

දැන් Python හි සේවාදායකය ක්‍රියාත්මක කිරීම පිළිබඳ වැඩි විස්තර. එය වේදනාවකි. පිඹුරා ඉගෙන ගත්තේ ඉගිලිනි. බොහෝ අවස්ථා සෑදී ඇත්තේ “වාව්, කෙසේ හෝ මම එය ක්‍රියාත්මක කළෙමි” යන විලාසයෙනි. කිසිසේත් ප්‍රශස්තිකරණය කර නොමැති අතර, ප්‍රධාන වශයෙන් Python සංවර්ධනය පිළිබඳ අඩු අත්දැකීම් හේතුවෙන් මෙම ආකෘතියේ ඉතිරිව ඇත. "කේතය" තුළ සේවාදායකය ක්රියාත්මක කිරීමේ වඩාත් සිත්ගන්නා කරුණු මත මම වාසය කරමි.

XML වින්‍යාස ගොනු විග්‍රහකය

සම්මත Python මොඩියුලය xml.dom භාවිතා වේ. එය සරල බව පෙනේ, නමුත් ක්‍රියාත්මක කිරීමේදී මෙම මොඩියුලය භාවිතා කරන ජාලයේ පැහැදිලි ලියකියවිලි සහ උදාහරණ නොමැති වීම කැපී පෙනේ.

    tree = minidom.parse(gconfig["config_file"]) mconfig=tree.getElementsByTagName("mysql") mconfig හි elem සඳහා: gconfig["mysql_host"]=elem.getElementsByTagName("host")[0].firta.firta gconfig["mysql_username"]=elem.getElementsByTagName("පරිශීලක නාමය")[0].firstChild.data gconfig["mysql_password"]=elem.getElementsByTagName("මුරපදය")[0].first"Child. =elem.getElementsByTagName("basename")[0].firstChild.data dconfig=tree.getElementsByTagName("dhcpserver") සඳහා dconfig: gconfig["broadcast"]=elem.getElementsByTagcaste(0"ByTagcaste)" firstChild.data gconfig["dhcp_host"]=elem.getElementsByTagName("host")[0].firstChild.data gconfig["dhcp_LeaseTime"]=elem.getElementsByTagName("LeaseTime("LeaseTime"rstTime"). dhcp_ThreadLimit"]=int(elem.getElementsByTagName("ThreadLimit")[0].firstChild.data) gconfig["dhcp_Server"]=elem.getElementsByTagName("DHCPServer"_st_configd". faultMask"] =elem.getElementsByTagName("defaultMask")[0].firstChild.data gconfig["dhcp_defaultRouter"]=elem.getElementsByTagName("defaultRouter")[0].firstChild.data gconfiglements නම (" defaultDNS")[0].firstChild.data qconfig=tree.getElementsByTagName("query") qconfig හි elem සඳහා: gconfig["offer_count"]=elem.getElementsByTagName("offer_count") පරාසය(int(gconfig["offer_count"])): gconfig["offer_"+str(num+0)]=elem.getElementsByTagName("offer_"+str(num+0))[0].firstChild.data gconfig ["history_sql"]=elem.getElementsByTagName("history_sql")[1].firstChild.data options=tree.getElementsByTagName("options") සඳහා විකල්ප: node=elem.getElementsByTagName සඳහා ("node"node" : optionsMod.append(options.firstChild.data)

බහු කියවීම

පුදුමයට කරුණක් නම්, පයිතන් හි බහු නූල් කිරීම ඉතා පැහැදිලිව සහ සරලව ක්‍රියාත්මක වේ.

def PacketWork(data,addr): ... # එන පැකට්ටුව විග්‍රහ කිරීම සහ එයට ප්‍රතිචාර දැක්වීම ක්‍රියාත්මක කිරීම ... සත්‍ය අතරතුර: දත්ත, addr = udp_socket.recvfrom(1024) # UDP පැකට් නූල් සඳහා රැඳී සිටීම = නූල් දැමීම.Thread( target=PacketWork , args=(data,addr,)).start() # එය පැමිණි පරිදි - අපි පෙර නිර්වචනය කළ PacketWork ශ්‍රිතය පසුබිමේ පරාමිති සහිතව දියත් කරන අතරතුර threading.active_count() >gconfig["dhcp_ThreadLimit"]: කාලය. නින්ද(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["broadcast"],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 පැකට්ටුවක් විග්‍රහ කිරීම

මෙතන තමයි මම ඇත්තටම පයිතන්ට කැමති වුණේ. කොටුවෙන් පිටත එය බයිට්කේතය සමඟ තරමක් නම්‍යශීලී වීමට ඔබට ඉඩ සලසයි. එය ඉතා පහසුවෙන් දශම අගයන්, නූල් සහ හෙක්ස් වලට පරිවර්තනය කිරීමට ඉඩ සලසයි - i.e. පැකේජයේ ව්‍යුහය අපි ඇත්තටම තේරුම් ගත යුත්තේ මෙයයි. එබැවින්, උදාහරණයක් ලෙස, ඔබට HEX සහ බයිට් වලින් බයිට් පරාසයක් ලබා ගත හැක:

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

, බයිට් ව්‍යුහයකට ඇසුරුම් කරන්න:

res["flags"]=pack('BB',data[10],data[11])

ව්‍යුහයෙන් IP ලබා ගන්න:

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

සහ අනෙක් අතට:

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

දැනට එච්චරයි 😉

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න