பைத்தானில் DHCP+Mysql சர்வர்

பைத்தானில் DHCP+Mysql சர்வர்

இந்த திட்டத்தின் நோக்கம்:

  • IPv4 நெட்வொர்க்கில் DHCP பற்றி கற்றல்
  • பைத்தானைக் கற்றல் (புதிதாகக் காட்டிலும் சற்று அதிகம் 😉)
  • சர்வர் மாற்று DB2DHCP (என் முட்கரண்டி), அசல் இங்கே, இது புதிய OS க்காக அசெம்பிள் செய்வது மேலும் மேலும் கடினமாகி வருகிறது. மேலும் "இப்போதே மாற்ற" வழியே இல்லாத பைனரி என்று எனக்குப் பிடிக்கவில்லை
  • சந்தாதாரரின் மேக் அல்லது ஸ்விட்ச் மேக்+போர்ட் கலவையைப் பயன்படுத்தி சந்தாதாரரின் ஐபி முகவரியைத் தேர்ந்தெடுக்கும் திறன் கொண்ட டிஹெச்சிபி சர்வரைப் பெறுதல் (விருப்பம் 82)
  • மற்றொரு பைக்கை எழுதுதல் (ஓ! இது எனக்கு மிகவும் பிடித்த செயல்)
  • ஹப்ராஹப்ரில் உங்கள் கிளப்-ஹேண்ட்னெஸ் பற்றிய கருத்துகளைப் பெறுதல் (அல்லது இன்னும் சிறப்பாக, அழைப்பு) 😉

முடிவு: இது வேலை செய்கிறது 😉 FreeBSD மற்றும் Ubuntu OS இல் சோதிக்கப்பட்டது. கோட்பாட்டளவில், குறியீடு எந்த OS இன் கீழும் வேலை செய்யும்படி கேட்கப்படலாம், ஏனெனில் குறியீட்டில் குறிப்பிட்ட பிணைப்புகள் எதுவும் இல்லை.
கவனமாக! இன்னும் நிறைய வர இருக்கிறது.

அமெச்சூர்களுக்கான களஞ்சியத்திற்கான இணைப்பு "உயிருடன் தொடவும்".

"வன்பொருளைப் படிப்பதன்" முடிவை நிறுவுதல், கட்டமைத்தல் மற்றும் பயன்படுத்துதல் செயல்முறை மிகவும் குறைவாக உள்ளது, பின்னர் DHCP நெறிமுறை பற்றிய ஒரு சிறிய கோட்பாடு. எனக்காக. மற்றும் வரலாறு 😉

ஒரு சிறிய கோட்பாடு

DHCP என்றால் என்ன

இது ஒரு பிணைய நெறிமுறையாகும், இது ஒரு சாதனம் அதன் ஐபி முகவரியை (மற்றும் கேட்வே, டிஎன்எஸ் போன்ற பிற அளவுருக்கள்) DHCP சேவையகத்திலிருந்து கண்டறிய அனுமதிக்கிறது. UDP நெறிமுறையைப் பயன்படுத்தி பாக்கெட்டுகள் பரிமாறப்படுகின்றன. நெட்வொர்க் அளவுருக்களைக் கோரும்போது சாதனத்தின் செயல்பாட்டின் பொதுவான கொள்கை பின்வருமாறு:

  1. சாதனம் (வாடிக்கையாளர்) நெட்வொர்க் முழுவதும் UDP ஒளிபரப்பு கோரிக்கையை (DHCPDISCOVER) "சரி, யாராவது எனக்கு ஐபி முகவரியைக் கொடுங்கள்" என்ற கோரிக்கையுடன் அனுப்புகிறது. மேலும், வழக்கமாக (ஆனால் எப்போதும் இல்லை) கோரிக்கை போர்ட் 68 (மூலம்) இலிருந்து நிகழ்கிறது, மேலும் இலக்கு போர்ட் 67 (இலக்கு) ஆகும். சில சாதனங்கள் போர்ட் 67 இலிருந்து பாக்கெட்டுகளையும் அனுப்புகின்றன. கிளையன்ட் சாதனத்தின் MAC முகவரி DHCPDISCOVER பாக்கெட்டில் சேர்க்கப்பட்டுள்ளது.
  2. நெட்வொர்க்கில் அமைந்துள்ள அனைத்து DHCP சேவையகங்களும் (மற்றும் அவற்றில் பல இருக்கலாம்) DHCPDISCOVER ஐ அனுப்பிய சாதனத்திற்கான பிணைய அமைப்புகளுடன் DHCPOFFER சலுகையை உருவாக்குகிறது, மேலும் அதை நெட்வொர்க்கில் ஒளிபரப்பவும். DHCPDISCOVER கோரிக்கையில் முன்னர் வழங்கப்பட்ட கிளையண்டின் MAC முகவரியின் அடிப்படையில் இந்த பாக்கெட் யாருக்காக வடிவமைக்கப்பட்டுள்ளது என்பதை அடையாளம் காண வேண்டும்.
  3. கிளையன்ட் நெட்வொர்க் அமைப்புகளுக்கான முன்மொழிவுகளுடன் பாக்கெட்டுகளை ஏற்றுக்கொள்கிறார், மிகவும் கவர்ச்சிகரமான ஒன்றைத் தேர்ந்தெடுக்கிறார் (அளவுகோல்கள் வேறுபட்டிருக்கலாம், எடுத்துக்காட்டாக, பாக்கெட் விநியோக நேரம், இடைநிலை வழிகளின் எண்ணிக்கை) மற்றும் நெட்வொர்க் அமைப்புகளுடன் DHCPREQUEST "அதிகாரப்பூர்வ கோரிக்கை" செய்கிறது. அது விரும்பும் DHCP சேவையகத்திலிருந்து. இந்த வழக்கில், பாக்கெட் ஒரு குறிப்பிட்ட DHCP சேவையகத்திற்கு செல்கிறது.
  4. DHCPREQUEST ஐப் பெற்ற சேவையகம் DHCPACK வடிவமைப்பு பாக்கெட்டை அனுப்புகிறது, அதில் இந்த கிளையண்டிற்கான பிணைய அமைப்புகளை மீண்டும் பட்டியலிடுகிறது.

பைத்தானில் DHCP+Mysql சர்வர்

கூடுதலாக, கிளையண்டிலிருந்து வரும் DHCPINFORM பாக்கெட்டுகள் உள்ளன, மேலும் இதன் நோக்கம் DHCP சேவையகத்திற்கு "வாடிக்கையாளர் உயிருடன் இருக்கிறார்" மற்றும் வழங்கப்பட்ட நெட்வொர்க் அமைப்புகளைப் பயன்படுத்துவதாகும். இந்த சேவையகத்தின் செயலாக்கத்தில், இந்த பாக்கெட்டுகள் புறக்கணிக்கப்படுகின்றன.

தொகுப்பு வடிவம்

பொதுவாக, ஈத்தர்நெட் பாக்கெட் சட்டகம் இது போன்றது:

பைத்தானில் DHCP+Mysql சர்வர்

எங்கள் விஷயத்தில், OSI லேயர் புரோட்டோகால் தலைப்புகள் இல்லாமல், DHCP அமைப்பு இல்லாமல் UDP பாக்கெட்டின் உள்ளடக்கங்களிலிருந்து நேரடியாக தரவை மட்டுமே கருத்தில் கொள்வோம்:

DHCPடிஸ்கவர்

எனவே, ஒரு சாதனத்திற்கான ஐபி முகவரியைப் பெறுவதற்கான செயல்முறை 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
மேஜிக் குக்கீகள்
எக்ஸ்: எக்ஸ்: எக்ஸ்: எக்ஸ்: எக்ஸ்
ஹெக்ஸ்
4
"மேஜிக்" எண், அதன் படி, உட்பட. இந்த பாக்கெட் DHCP நெறிமுறைக்கு சொந்தமானது என்பதை நீங்கள் தீர்மானிக்கலாம்

DHCP விருப்பங்கள். எந்த வரிசையிலும் செல்லலாம்

236
விருப்ப எண்
53
டிசம்பர்
1
விருப்பம் 53, இது DHCP பாக்கெட் வகையைக் குறிப்பிடுகிறது

1 - DHCPடிஸ்கவர்
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 ரிப்பீட்டர் சாதனத்தின் MAC முகவரி

 
விருப்பத்தின் நீளம்
18
டிசம்பர்
 

 
விருப்ப மதிப்பு
01:06
00:04:00:01:00:04
02:08
00:06:c8:be:19:93:11:48
ஹெக்ஸ்
 

 
தொகுப்பின் முடிவு
255
டிசம்பர்
1
255 பாக்கெட்டின் முடிவைக் குறிக்கிறது

DHCPOFER

சேவையகம் 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
மேஜிக் குக்கீகள்
எக்ஸ்: எக்ஸ்: எக்ஸ்: எக்ஸ்: எக்ஸ்
ஹெக்ஸ்
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 முகவரியைப் பயன்படுத்தி குறிப்பிடப்படுகிறார். மேலும், சேவையகத்தின் ஐபி முகவரி ஏற்கனவே பெறப்பட்டிருந்தால், முதலில் DHCPDISCOVER ஐ உருவாக்காமலேயே கிளையண்ட் ஒரு DHCPREQUEST பாக்கெட்டை அனுப்ப முடியும்.

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
மேஜிக் குக்கீகள்
எக்ஸ்: எக்ஸ்: எக்ஸ்: எக்ஸ்: எக்ஸ்
ஹெக்ஸ்
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:4d:ec
டிசம்பர்
18

 
தொகுப்பின் முடிவு
255
டிசம்பர்
1
255 பாக்கெட்டின் முடிவைக் குறிக்கிறது

DHCPACK

DHCP சர்வரில் இருந்து "ஆம், அது சரி, இது உங்கள் ஐபி முகவரி, நான் அதை வேறு யாருக்கும் கொடுக்க மாட்டேன்" என்பதை உறுதிப்படுத்தும் விதமாக, DHCPACK வடிவத்தில் ஒரு பாக்கெட் சர்வரில் இருந்து கிளையன்ட் வரை சேவை செய்கிறது. மற்ற பாக்கெட்டுகளைப் போலவே இது ஒளிபரப்பாக அனுப்பப்படுகிறது. இருப்பினும், பைத்தானில் செயல்படுத்தப்பட்ட DHCP சேவையகத்திற்கான கீழே உள்ள குறியீட்டில், ஒரு குறிப்பிட்ட கிளையன்ட் ஐபிக்கு பாக்கெட்டை அனுப்புவதன் மூலம் எந்தவொரு ஒளிபரப்பு கோரிக்கையையும் நான் நகலெடுக்கிறேன், அது ஏற்கனவே தெரிந்திருந்தால். மேலும், DHCPACK பாக்கெட் கிளையண்டை அடைந்துவிட்டதா என்பதை DHCP சர்வர் கவலைப்படுவதில்லை. கிளையன்ட் 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
மேஜிக் குக்கீகள்
எக்ஸ்: எக்ஸ்: எக்ஸ்: எக்ஸ்: எக்ஸ்
ஹெக்ஸ்
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 பாக்கெட்டின் முடிவைக் குறிக்கிறது

நிறுவல்

நிறுவல் உண்மையில் வேலைக்குத் தேவையான பைதான் தொகுதிகளை நிறுவுவதைக் கொண்டுள்ளது. MySQL ஏற்கனவே நிறுவப்பட்டு கட்டமைக்கப்பட்டுள்ளது என்று கருதப்படுகிறது.

ஃப்ரீ

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}') மற்றும் top(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 இல் சேவையகம் என்ன ஐபி முகவரியைக் கேட்கிறது
  • ஒளிபரப்பு - இது DHCPOFFER மற்றும் DHCPACK க்கான ஒளிபரப்பு ஆகும்
  • DHCPServer - DHCP சேவையகத்தின் ip என்றால் என்ன
  • வழங்கப்பட்ட IP முகவரியின் LeaseTime குத்தகை நேரம்
  • ThreadLimit - போர்ட் 67 இல் உள்வரும் UDP பாக்கெட்டுகளை செயலாக்க ஒரே நேரத்தில் எத்தனை த்ரெட்கள் இயங்குகின்றன. இது அதிக சுமை திட்டங்களுக்கு உதவும்.
  • defaultMask,defaultRouter,defaultDNS - தரவுத்தளத்தில் IP காணப்பட்டால், சந்தாதாரருக்கு முன்னிருப்பாக என்ன வழங்கப்படும், ஆனால் அதற்கு கூடுதல் அளவுருக்கள் குறிப்பிடப்படவில்லை

mysql பிரிவு:

புரவலன், பயனர்பெயர், கடவுச்சொல், அடிப்படை பெயர் - எல்லாம் தனக்குத்தானே பேசுகிறது. தோராயமான தரவுத்தள அமைப்பு இடுகையிடப்பட்டுள்ளது மகிழ்ச்சியா

வினவல் பிரிவு: சலுகை/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 பாக்கெட் போர்ட் 67 இல் வந்தது, 0025224ad764 , b'x91xa5xe0xa3xa5xa9-x8fx8a' , ('172.30.114.25', 68) {'ClientMacAddress': '0025224address': '764address' b'x00 7%"Jxd91d' , ' HType': 'Ethernet', 'HostName': b'x5xa0xe3xa5xa9xa8-x8fx43a', 'ReqListDNS': True, 'ReqListDomainName': True, 'ReqListPerfowmRouterDiscover': TrueListeRecover, 'TruterLiscover' பாதை': உண்மை, 'ReqListSubnetM கேட்கவும்': உண்மை, 'ReqListVendorSpecInfo': 0.0.0.0, 'RequestedIpAddress': '5.0', 'Vendor': b'MSFT 0025224', 'chaddr': '764ad172.30.128.13', '00', '00. , 'flags ': b'x172.30.114.25x308', 'giaddr': '6', 'gpoz': 1, 'hlen': 82, 'hops': 12, 'htype': 'MAC', 'magic_cookie': b'cx12Sc ', 'op': 'DHCPINFORM', 'option53': 53, 'option55': 55, 'option60': 60, 'option61': 61, 'option82': 82, 'option82': 12, ' option_01_byte': b'x06x00x04x00x01x00x06x02x08x00x06x00' b'x1x9x2eXx82exb12010600040001000602080006001xad', 'option_589_hex': '2 'option_82_hex' _18_len': 82 12, 'option_01_str': "b'x06x00x04x00x01x00x06x02x08x00x06x00x1x9x2eXx768exb0.0.0.0xad'", 'முடிவு': தவறு, 'வினாடிகள்': 'siaddr': '001', 'sw_mac': '589e2eb1ad', 'sw_port06': '89', 'xidbyte': b'

அதன்படி, நாம் எந்த மாறியையும் {} இல் மடிக்கலாம் மற்றும் அது SQL வினவலில் பயன்படுத்தப்படும்.

கிளையன்ட் ஐபி முகவரியைப் பெற்றதை வரலாற்றில் பதிவு செய்வோம்:

பைத்தானில் DHCP+Mysql சர்வர்

பைத்தானில் DHCP+Mysql சர்வர்

சேவையகத்தைத் தொடங்குதல்

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

— d கன்சோல் வெளியீட்டு முறை பிழைத்திருத்தம்
- c <filename> கட்டமைப்பு கோப்பு

விவரம்

இப்போது பைத்தானில் சேவையகத்தை செயல்படுத்துவது பற்றிய கூடுதல் விவரங்கள். இது ஒரு வலி. மலைப்பாம்பு பறக்கும்போது கற்றுக் கொள்ளப்பட்டது. பல தருணங்கள் "ஆஹா, எப்படியோ நான் அதை வேலை செய்தேன்" என்ற பாணியில் உருவாக்கப்பட்டுள்ளது. மேம்படுத்தப்படவில்லை, மேலும் பைதான் வளர்ச்சியில் சிறிய அனுபவத்தின் காரணமாக இந்த வடிவத்தில் விடப்பட்டது. "குறியீடு" இல் சேவையக செயலாக்கத்தின் மிகவும் சுவாரஸ்யமான அம்சங்களில் நான் வாழ்வேன்.

எக்ஸ்எம்எல் உள்ளமைவு கோப்பு பாகுபடுத்தி

நிலையான பைதான் தொகுதி xml.dom பயன்படுத்தப்படுகிறது. இது எளிமையானதாகத் தெரிகிறது, ஆனால் செயல்படுத்தும் போது இந்த தொகுதியைப் பயன்படுத்தி நெட்வொர்க்கில் தெளிவான ஆவணங்கள் மற்றும் எடுத்துக்காட்டுகள் இல்லாதது குறிப்பிடத்தக்கது.

    மரம் = minidom.parse(gconfig["config_file"]) mconfig=tree.getElementsByTagName("mysql") mconfig இல் உள்ள elem: gconfig["mysql_host"]=elem.getElementsByTagName("host")[0].fidarta gconfig["mysql_username"]=elem.getElementsByTagName("username")[0].firstChild.data gconfig["mysql_password"]=elem.getElementsByTagName("கடவுச்சொல்")[0].first"Child. =elem.getElementsByTagName("basename")[0].firstChild.data dconfig=tree.getElementsByTagName("dhcpserver") dconfig இல் உள்ள elem: gconfig["broadcast"]=elem.getElementsByTagcaste(0ByTagcaste)". 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) ஃபால்ட் மாஸ்க்"] =elem.getElementsByTagName("defaultMask")[0].firstChild.data gconfig["dhcp_defaultRouter"]=elem.getElementsByTagName("defaultRouter")[0].firstChild.data gconfiglements["defaultRouter" பெயர் (" 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("விருப்பங்கள்") : optionsMod.append(options.firstChild.data)

மல்டித்ரெடிங்

விந்தை போதும், பைத்தானில் மல்டித்ரெடிங் மிகவும் தெளிவாகவும் எளிமையாகவும் செயல்படுத்தப்படுகிறது.

def PacketWork(data,addr): ... # உள்வரும் பாக்கெட்டைப் பாகுபடுத்தி அதற்குப் பதிலளிப்பதைச் செயல்படுத்துதல் ... உண்மையாக இருக்கும் போது: தரவு, addr = udp_socket.recvfrom(1024) # UDP பாக்கெட் நூலுக்காக காத்திருக்கிறது = threading.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 பாக்கெட்டை பாகுபடுத்துகிறது

இங்குதான் நான் பைத்தானை மிகவும் விரும்பினேன். பெட்டிக்கு வெளியே இது பைட்கோடுடன் மிகவும் நெகிழ்வாக இருக்க உங்களை அனுமதிக்கிறது. தசம மதிப்புகள், சரங்கள் மற்றும் ஹெக்ஸ் என மிக எளிதாக மொழிபெயர்க்க அனுமதிக்கிறது - அதாவது. தொகுப்பின் கட்டமைப்பை நாம் உண்மையில் புரிந்து கொள்ள வேண்டியது இதுதான். எனவே, எடுத்துக்காட்டாக, நீங்கள் ஹெக்ஸ் மற்றும் பைட்டுகளின் வரம்பைப் பெறலாம்:

    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

கருத்தைச் சேர்