په Python کې DHCP + Mysql سرور

په Python کې DHCP + Mysql سرور

د دې پروژې موخه دا وه:

  • په IPv4 شبکه کې د DHCP په اړه زده کړه
  • د پایتون زده کړه (له پیل څخه یو څه ډیر 😉)
  • د سرور بدیل DB2DHCP (زما فورک)، اصلي دلته، کوم چې د نوي OS لپاره راټولول ورځ تر بلې ستونزمن کیږي. او زه دا نه خوښوم چې دا یو بائنری دی چې د "اوس مهال بدلون" لپاره کومه لاره نشته
  • د کارونکي DHCP سرور ترلاسه کول د دې وړتیا سره چې د پیرودونکي ماک په کارولو سره د پیرودونکي IP پته غوره کړئ یا د میک + پورټ ترکیب بدل کړئ (اختیار 82)
  • بل بایسکل لیکل (آه! دا زما د خوښې فعالیت دی)
  • په حبرهبر کې ستاسو د کلب لاس ته راوړنې په اړه د نظرونو ترلاسه کول (یا تر دې غوره، بلنه) 😉

پایله: دا کار کوي 😉 په FreeBSD او اوبنټو OS کې ازمول شوی. په تیوریکي توګه، کوډ د هر OS لاندې کار کولو غوښتنه کیدی شي، ځکه داسې ښکاري چې په کوډ کې کوم ځانګړي بندیزونه شتون نلري.
په احتیاط سره! د راتلو لپاره ډیر څه شته.

د شوقیانو لپاره د ذخیره کولو لینک "ژوندی لمس".

د "د هارډویر مطالعې" پایلې د نصبولو، تنظیمولو او کارولو پروسه خورا ټیټه ده، او بیا د DHCP پروتوکول په اړه لږ تیوري. د ځان لپاره. او د تاریخ لپاره 😉

یو کوچنی نظریه

DHCP څه شی دی؟

دا د شبکې پروتوکول دی چې یوه وسیله ته اجازه ورکوي چې د DHCP سرور څخه خپل IP پته (او نور پیرامیټونه لکه ګیټس، DNS، او نور) ومومي. پاکټونه د UDP پروتوکول په کارولو سره تبادله کیږي. د وسیلې د عملیاتو عمومي اصول کله چې د شبکې پیرامیټرو غوښتنه کول په لاندې ډول دي:

  1. وسیله (پیرودونکي) د غوښتنې سره په ټوله شبکه کې د UDP نشر غوښتنه (DHCPDISCOVER) لیږي "ښه ، یو څوک ما ته IP پته راکړي." سربیره پردې ، معمولا (مګر تل نه) غوښتنه د پورټ 68 (سرچینې) څخه پیښیږي ، او منزل د 67 بندر (منزل) دی. ځینې ​​وسایل هم د 67 بندر څخه پاکټونه لیږي. د پیرودونکي وسیلې MAC پته د DHCPDISCOVER پاکټ دننه شامله ده.
  2. ټول DHCP سرورونه چې په شبکه کې موقعیت لري (او ممکن ډیری یې وي) د وسیلې لپاره د شبکې ترتیباتو سره د DHCPOFFER وړاندیز رامینځته کوي چې DHCPDISCOVER یې لیږلی ، او دا یې په شبکه کې هم خپروي. د دې پیژندنه د چا لپاره ده چې دا کڅوړه د پیرودونکي د MAC پتې پراساس ده چې دمخه د DHCPDISCOVER غوښتنې کې چمتو شوي.
  3. پیرودونکی د شبکې ترتیباتو لپاره وړاندیزونو سره پاکټونه مني، خورا زړه راښکونکي غوره کوي (معاملات ممکن توپیر ولري، د بیلګې په توګه، د پاکټ تحویل وخت، د منځنیو لارو شمیر)، او د شبکې ترتیباتو سره "رسمي غوښتنه" DHCPREQUEST کوي. د DHCP سرور څخه دا خوښوي. په دې حالت کې، پاکټ یو ځانګړي DHCP سرور ته ځي.
  4. هغه سرور چې DHCPREQUEST ترلاسه کړی د DHCPACK فارمیټ کڅوړه لیږي، په کوم کې چې دا یو ځل بیا د دې پیرودونکي لپاره د شبکې ترتیبات لیست کوي

په Python کې DHCP + Mysql سرور

برسېره پردې، د DHCPINFORM کڅوړې شتون لري چې د پیرودونکي څخه راځي، او موخه یې د DHCP سرور ته خبر ورکول دي چې "پیرودونکی ژوندی دی" او د جاري شوي شبکې ترتیبات کاروي. د دې سرور په تطبیق کې، دا پاکټونه له پامه غورځول شوي.

د بسته بندۍ بڼه

په عموم کې، د ایترنیټ پاکټ چوکاټ یو څه داسې ښکاري:

په Python کې DHCP + Mysql سرور

زموږ په قضیه کې، موږ به یوازې د UDP کڅوړې مینځپانګې څخه مستقیم معلومات په پام کې ونیسو، پرته د OSI پرت پروتوکول سرلیکونه، د بیلګې په توګه د DHCP جوړښت:

DHCPDISCOVER

نو، د وسیلې لپاره د IP پتې ترلاسه کولو پروسه د 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
د پیرودونکي 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
هیکس
6
د پیکټ لیږونکي MAC پته (پیرودونکي)

31
د پیرودونکي هارډویر پته پیډینګ
 
هیکس
10
ساتل شوې څوکۍ. معمولا د صفرونو سره ډک شوی

41
د سرور کوربه نوم
 
کرښه
64
د DHCP سرور نوم. معمولا نه لیږدول کیږي

105
د بوټ فایل نوم
 
کرښه
128
په سرور کې د فایل نوم د ډیسک سټیشنونو لخوا کارول کیږي کله چې بوټ کول

235
جادو کوکیز
63: 82: 53: 63
هیکس
4
د "جادو" شمیره، د هغې مطابق، په شمول. تاسو کولی شئ معلومه کړئ چې دا پاکټ د DHCP پروتوکول پورې اړه لري

د DHCP اختیارونه. کولی شي په هر ترتیب کې لاړ شي

236
د اختیار شمیره
53
Dec
1
اختیار 53، کوم چې د DHCP پیکټ ډول مشخص کوي

1 - DHCPDISCOVER
3 - DHCPREQUEST
2 - DHCPOFFER
5 - DHCPACK
۸ – DHCPINFORM

 
د اختیار اوږدوالی
1
Dec
1

 
د اختیار ارزښت
1
Dec
1

 
د اختیار شمیره
50
Dec
1
کوم IP پته پیرودونکي غواړي ترلاسه کړي؟

 
د اختیار اوږدوالی
4
Dec
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
Dec
 
اختیار 82، کوم چې د تکرارونکي وسیلې MAC پته او ځینې اضافي ارزښتونه لیږدوي.

ډیری وختونه، دا د سویچ بندر دی چې په پای کې د DHCP پیرودونکي چلوي. دا اختیار اضافي پیرامیټونه لري. لومړی بایټ د "سب اپشن" شمیره ده، دویم یې اوږدوالی دی، بیا یې ارزښت دی.

په دې حالت کې، په 82 اختیار کې، فرعي اختیارونه ځړول شوي دي:
د اجنټ سرکټ ID = 00:04:00:01:00:04، چیرې چې وروستي دوه بایټونه د DHCP پیرودونکي پورټ دي چې له هغه څخه غوښتنه شوې

د اجنټ ریموټ ID = 00:06:c8:be:19:93:11:48 - د DHCP ریپیټر وسیلې MAC پته

 
د اختیار اوږدوالی
18
Dec
 

 
د اختیار ارزښت
01:06
00:04:00:01:00:04
02:08
00:06:c8:be:19:93:11:48
هیکس
 

 
د بسته بندۍ پای
255
Dec
1
255 د کڅوړې پای نښه کوي

د DHCPOFFER

هرڅومره ژر چې سرور د DHCPDISCOVER پاکټ ترلاسه کړي او که دا وګوري چې دا پیرودونکي ته د غوښتل شوي څخه یو څه وړاندیز کولی شي ، نو دا د دې لپاره ځواب رامینځته کوي - DHCPDISCOVER. ځواب بندر ته لیږل کیږي "له کوم ځای څخه راغلی"، د نشر له لارې، ځکه په دې وخت کې، پیرودونکی لا تر اوسه IP پته نلري، نو دا یوازې هغه پیکټ منل کیدی شي که چیرې دا د نشر له لارې لیږل کیږي. پیرودونکی پیژني چې دا د هغه لپاره د کڅوړې دننه د هغه د 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
د پیرودونکي 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
هیکس
6
د پیکټ لیږونکي MAC پته (پیرودونکي)

31
د پیرودونکي هارډویر پته پیډینګ
 
هیکس
10
ساتل شوې څوکۍ. معمولا د صفرونو سره ډک شوی

41
د سرور کوربه نوم
 
کرښه
64
د DHCP سرور نوم. معمولا نه لیږدول کیږي

105
د بوټ فایل نوم
 
کرښه
128
په سرور کې د فایل نوم د ډیسک سټیشنونو لخوا کارول کیږي کله چې بوټ کول

235
جادو کوکیز
63: 82: 53: 63
هیکس
4
د "جادو" شمیره، د هغې مطابق، په شمول. تاسو کولی شئ معلومه کړئ چې دا پاکټ د DHCP پروتوکول پورې اړه لري

د DHCP اختیارونه. کولی شي په هر ترتیب کې لاړ شي

236
د اختیار شمیره
53
Dec
1
اختیار 53، کوم چې د DHCP 2 پیکټ ډول تعریفوي - DHCPOFFER

 
د اختیار اوږدوالی
1
Dec
1

 
د اختیار ارزښت
2
Dec
1

 
د اختیار شمیره
1
Dec
1
د DHCP پیرودونکي ته د شبکې ماسک وړاندیز کولو اختیار

 
د اختیار اوږدوالی
4
Dec
1

 
د اختیار ارزښت
255.255.224.0
کرښه
4

 
د اختیار شمیره
3
Dec
1
د DHCP پیرودونکي ته د ډیفالټ دروازې وړاندیز کولو اختیار

 
د اختیار اوږدوالی
4
Dec
1

 
د اختیار ارزښت
172.16.12.1
کرښه
4

 
د اختیار شمیره
6
Dec
1
د DNS پیرودونکي ته د DHCP وړاندیز کولو اختیار

 
د اختیار اوږدوالی
4
Dec
1

 
د اختیار ارزښت
8.8.8.8
کرښه
4

 
د اختیار شمیره
51
Dec
1
د جاري شوي شبکې پیرامیټونو ژوند په ثانیو کې، وروسته له دې چې د DHCP پیرودونکی باید دوی بیا غوښتنه وکړي

 
د اختیار اوږدوالی
4
Dec
1

 
د اختیار ارزښت
86400
Dec
4

 
د اختیار شمیره
82
Dec
1
اختیار 82، هغه څه تکراروي چې په DHCPDISCOVER کې راغلي

 
د اختیار اوږدوالی
18
Dec
1

 
د اختیار ارزښت
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d:ec
Dec
18

 
د بسته بندۍ پای
255
Dec
1
255 د کڅوړې پای نښه کوي

د DHCPREQUEST

وروسته له دې چې پیرودونکي DHCPOFFER ترلاسه کړي، هغه یو بسته جوړوي چې د شبکې پیرامیټونو غوښتنه کوي په شبکه کې د DHCP ټولو سرورونو ته نه، مګر یوازې یو ځانګړي ته، چې د DHCPOFFER وړاندیز یې خورا "خوښه" دی. د "لکه" معیارونه توپیر لري او د پیرودونکي DHCP پلي کولو پورې اړه لري. د غوښتنې ترلاسه کونکی د DHCP سرور د MAC پتې په کارولو سره مشخص شوی. همچنان ، د DHCPREQUEST کڅوړه د پیرودونکي لخوا لیږل کیدی شي پرته لدې چې لومړی DHCPDISCOVER تولید کړي ، که چیرې د سرور IP پته دمخه ترلاسه شوې وي.

د 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
د پیرودونکي 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
هیکس
6
د پیکټ لیږونکي MAC پته (پیرودونکي)

31
د پیرودونکي هارډویر پته پیډینګ
 
هیکس
10
ساتل شوې څوکۍ. معمولا د صفرونو سره ډک شوی

41
د سرور کوربه نوم
 
کرښه
64
د DHCP سرور نوم. معمولا نه لیږدول کیږي

105
د بوټ فایل نوم
 
کرښه
128
په سرور کې د فایل نوم د ډیسک سټیشنونو لخوا کارول کیږي کله چې بوټ کول

235
جادو کوکیز
63: 82: 53: 63
هیکس
4
د "جادو" شمیره، د هغې مطابق، په شمول. تاسو کولی شئ معلومه کړئ چې دا پاکټ د DHCP پروتوکول پورې اړه لري

د DHCP اختیارونه. کولی شي په هر ترتیب کې لاړ شي

236
د اختیار شمیره
53
Dec
3
اختیار 53، کوم چې د DHCP پیکټ ډول 3 تعریفوي - DHCPREQUEST

 
د اختیار اوږدوالی
1
Dec
1

 
د اختیار ارزښت
3
Dec
1

 
د اختیار شمیره
61
Dec
1
د پیرودونکي ID: 01 (د Ehernet لپاره) + د پیرودونکي MAC پته

 
د اختیار اوږدوالی
7
Dec
1

 
د اختیار ارزښت
01:2c:ab:25:ff:72:a6
هیکس
7

 
د اختیار شمیره
60
Dec
 
"د پلورونکي ټولګي پیژندونکی". زما په قضیه کې، دا د DHCP مراجعینو نسخه راپور ورکوي. شاید نور وسایل یو څه مختلف بیرته راولي. وینډوز د مثال په توګه د MSFT 5.0 راپور ورکوي

 
د اختیار اوږدوالی
11
Dec
 

 
د اختیار ارزښت
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
Dec
1
اختیار 82، هغه څه تکراروي چې په DHCPDISCOVER کې راغلي

 
د اختیار اوږدوالی
18
Dec
1

 
د اختیار ارزښت
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d:ec
Dec
18

 
د بسته بندۍ پای
255
Dec
1
255 د کڅوړې پای نښه کوي

د ‏‎DHCPACK

د تایید په توګه چې "هو، دا سمه ده، دا ستاسو IP پته ده، او زه به یې بل چا ته نه ورکوم" د DHCP سرور څخه، د DHCPACK ب formatه کې یو پاکټ له سرور څخه پیرودونکي ته خدمت کوي. دا د نورو کڅوړو په څیر نشر ته لیږل کیږي. که څه هم، په Python کې پلي شوي د DHCP سرور لپاره لاندې کوډ کې، یوازې په هغه صورت کې چې زه د ځانګړي پیرودونکي IP ته د پیکټ په لیږلو سره د خپرونې غوښتنې نقل کوم، که دا دمخه پیژندل شوی وي. سربیره پردې ، د DHCP سرور هیڅ پروا نه کوي چې ایا د DHCPAC پیکټ پیرودونکي ته رسیدلی. که چیرې پیرودونکی 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
د پیرودونکي 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
هیکس
6
د پیکټ لیږونکي MAC پته (پیرودونکي)

31
د پیرودونکي هارډویر پته پیډینګ
 
هیکس
10
ساتل شوې څوکۍ. معمولا د صفرونو سره ډک شوی

41
د سرور کوربه نوم
 
کرښه
64
د DHCP سرور نوم. معمولا نه لیږدول کیږي

105
د بوټ فایل نوم
 
کرښه
128
په سرور کې د فایل نوم د ډیسک سټیشنونو لخوا کارول کیږي کله چې بوټ کول

235
جادو کوکیز
63: 82: 53: 63
هیکس
4
د "جادو" شمیره، د هغې مطابق، په شمول. تاسو کولی شئ معلومه کړئ چې دا پاکټ د DHCP پروتوکول پورې اړه لري

د DHCP اختیارونه. کولی شي په هر ترتیب کې لاړ شي

236
د اختیار شمیره
53
Dec
3
اختیار 53، کوم چې د DHCP پیکټ ډول 5 تعریفوي - DHCPACK

 
د اختیار اوږدوالی
1
Dec
1

 
د اختیار ارزښت
5
Dec
1

 
د اختیار شمیره
1
Dec
1
د DHCP پیرودونکي ته د شبکې ماسک وړاندیز کولو اختیار

 
د اختیار اوږدوالی
4
Dec
1

 
د اختیار ارزښت
255.255.224.0
کرښه
4

 
د اختیار شمیره
3
Dec
1
د DHCP پیرودونکي ته د ډیفالټ دروازې وړاندیز کولو اختیار

 
د اختیار اوږدوالی
4
Dec
1

 
د اختیار ارزښت
172.16.12.1
کرښه
4

 
د اختیار شمیره
6
Dec
1
د DNS پیرودونکي ته د DHCP وړاندیز کولو اختیار

 
د اختیار اوږدوالی
4
Dec
1

 
د اختیار ارزښت
8.8.8.8
کرښه
4

 
د اختیار شمیره
51
Dec
1
د جاري شوي شبکې پیرامیټونو ژوند په ثانیو کې، وروسته له دې چې د DHCP پیرودونکی باید دوی بیا غوښتنه وکړي

 
د اختیار اوږدوالی
4
Dec
1

 
د اختیار ارزښت
86400
Dec
4

 
د اختیار شمیره
82
Dec
1
اختیار 82، هغه څه تکراروي چې په DHCPDISCOVER کې راغلي

 
د اختیار اوږدوالی
18
Dec
1

 
د اختیار ارزښت
01:08:00:06:00
01:01:00:00:01
02:06:00:03:0f
26:4d:ec
Dec
18

 
د بسته بندۍ پای
255
Dec
1
255 د کڅوړې پای نښه کوي

د جوړولو

نصب کول په حقیقت کې د کار لپاره اړین د پیتون ماډلونو نصب کول دي. داسې انګیرل کیږي چې MySQL لا دمخه نصب او ترتیب شوی.

FreeBSD

pkg python3 نصب کړئ python3 -m ډاډ ترلاسه کړئ pip pip3 mysql-connector نصب کړئ

د وبنټو

sudo apt-get install python3 sudo apt-get install pip3 sudo pip3 install mysql-connector

موږ د MySQL ډیټابیس جوړوو، په هغې کې د pydhcp.sql ډمپ اپلوډ کوو، او د ترتیب فایل تنظیم کوو.

شکل بندي

د سرور ټول ترتیبات په xml فایل کې دي. د حوالې فایل:

1.0 0.0.0.0 255.255.255.255 ۸۶۰۰ 192.168.0.71 8600 1 ۸.۸.۸.۸ localhost ازموینه ازموینه pydhcp option_255.255.255.0_hex:sw_port192.168.0.1:8.8.8.8:82 option_1_hex:sw_port20:22:82 option_2_hex:sw_mac:16:18 82 د کاروونکو څخه ip,mask,router,dns غوره کړئ چیرې چې upper(mac)=upper('{option_26_AgentRemoteId_hex}') او upper(port)=upper('{option_40_AgentCircuitId_port_hex}') د کاروونکو څخه ip,mask,router,dns غوره کړئ چیرې چې پورتنۍ(mac)=upper('{sw_mac}') او upper(port)=upper('{sw_port3}') د کاروونکو څخه ip,mask,router,dns غوره کړئ چیرې چې upper(mac)=upper('{ClientMacAddress}') په تاریخ کې دننه کړئ (id,dt,mac,ip,comment) ارزښتونه (null,now(),'{ClientMacAddress}','{RequestedIpAddress}','DHCPACK/INFORM')

اوس په ټاګونو کې په ډیر تفصیل سره:

د dhcpserver برخه د سرور پیل کولو لپاره لومړني ترتیبات تشریح کوي، یعنې:

  • کوربه - کوم IP پته سرور په پورټ 67 کې اوري
  • نشر - کوم ip د DHCPOFFER او DHCPACK لپاره نشر دی
  • DHCPServer - د DHCP سرور ip څه شی دی
  • د جاري شوي IP پتې د اجارې وخت
  • د 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

، د sw_mac متغیر تعریف کړئ ، د 26:40 رینج څخه هیکس اخلي

تاسو کولی شئ ټول ممکنه اختیارونه وګورئ چې د -d سویچ سره د سرور پیل کولو سره په پوښتنو کې کارول کیدی شي. موږ به د دې لاګ په څیر یو څه وګورو:

--a د DHCPINFORM پاکټ 67 پورټ ته رسیدلی، له 0025224ad764، b'x91xa5xe0xa3xa5xa9-x8fx8a' , ('172.30.114.25', 68) {'ClientMacAddress',ClientMacAddress',C0025224dAdress'764B yte': b'x00 7%"Jxd91d' , 'HType': 'Ethernet' , 'HostName': b'x5xa0xe3xa5xa9xa8-x8fx43a' , 'ReqListDNS': ریښتیا، 'ReqListDomainName': ریښتیا، 'ReqListPerfowmRouterDiscover': 'TruqistRouter' e': ریښتیا، 'ReqListSubnetM ask': True, 'ReqListVendorSpecInfo': 0.0.0.0, 'RequestedIpAddress': '5.0', 'Vendor': b'MSFT 0025224', 'chaddr': '764ad172.30.128.13', 'ciaddr': '00ad00': . , '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': '2b _82_len': 18 82, 'option_12_str': "b'x01x06x00x04x00x01x00x06x02x08x00x06x00x1x9eXx2exb768xad'", 'پایله': غلط, 'secs': 0.0.0.0 'siaddr': '001', 'sw_mac': '589e2eb1ad', 'sw_port06': '89', 'xidbyte': b'

په دې اساس، موږ کولی شو هر متغیر په {} کې وپلټو او دا به د SQL پوښتنې کې وکارول شي.

راځئ چې د تاریخ لپاره ثبت کړو چې پیرودونکي IP پته ترلاسه کړې:

په Python کې DHCP + Mysql سرور

په Python کې DHCP + Mysql سرور

د سرور پیل

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

- د کنسول محصول حالت DEBUG
- c <filename> د تشکیلاتو فایل

د

او اوس په Python کې د سرور پلي کولو په اړه نور توضیحات. دا یو درد دی. پیتون په الوتنه کې زده شوی و. ډیری شیبې په سټایل کې رامینځته کیږي "واه ، یو څه ما دا کار وکړ." په بشپړ ډول مطلوب نه دی، او په دې بڼه کې پریښودل په عمده توګه د Python پراختیا کې د لږې تجربې له امله. زه به په "کوډ" کې د سرور پلي کولو خورا په زړه پورې اړخونو کې پاتې شم.

د XML ترتیب کولو فایل پارسر

معیاري Python ماډل xml.dom کارول کیږي. دا ساده ښکاري، مګر د پلي کولو په جریان کې د دې ماډل کارولو په شبکه کې د واضح اسنادو او مثالونو د پام وړ نشتوالی شتون درلود.

    tree = minidom.parse(gconfig["config_file"]) mconfig=tree.getElementsByTagName("mysql") په mconfig کې د عنصر لپاره: gconfig["mysql_host"]=elem.getElementsByTagName("host")[0].firstChild.data gconfig["mysql_username"]=elem.getElementsByTagName("username")[0].firstChild.data gconfig["mysql_password"]=elem.getElementsByTagName("password")[0].firstChild"config_basedamydaname. =elem.getElementsByTagName("basename")[0].firstChild.data dconfig=tree.getElementsByTagName("dhcpserver") په dconfig کې د عنصر لپاره: gconfig["broadcast"]=elem.getElementsByTagName")[broadcast]0. firstChild.data gconfig["dhcp_host"]=elem.getElementsByTagName("host")[0].firstChild.data gconfig["dhcp_LeaseTime"]=elem.getElementsByTagName("LeaseTime")[0].firstChild. dhcp_ThreadLimit"]=int(elem.getElementsByTagName("ThreadLimit")[0].firstChild.data) gconfig["dhcp_Server"]=elem.getElementsByTagName("DHCPServer")[0]. =elem.getElementsByTagName("defaultMask")[0].firstChild.data gconfig["dhcp_defaultRouter"]=elem.getElementsByTagName("defaultRouter")[0].firstChild.data"gconfig_defaultRouter")[0].firstChild.data"gconfig_defaultNsBements["Dhcp_defaultRouter" " defaultDNS"). حد(int(gconfig["offer_count"])): gconfig["offer_"+str(num+0)]=elem.getElementsByTagName("offer_"+str(num+1))[1].firstChild.data gconfig ["history_sql"]=elem.getElementsByTagName("history_sql")[0].firstChild.data options=tree.getElementsByTagName("اختیارات") په اختیارونو کې د عنصر لپاره: node=elem.getElementsByTagName("options) لپاره node=elem.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"]: وخت. خوب

د DHCP پاکټ ترلاسه کول / لیږل

د دې لپاره چې د شبکې کارت له لارې د UDP کڅوړې راځي، تاسو اړتیا لرئ چې ساکټ "اوچت" کړئ:

udp_socket = ساکټ. ساکیټ

، چیرې چې بیرغونه دي:

  • 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 پاکټ تجزیه کول

دا هغه ځای دی چې ما واقعیا پیتون خوښ کړ. دا معلومه شوه چې د بکس څخه بهر دا تاسو ته اجازه درکوي د بایټکوډ سره خورا انعطاف وړ وي. دا اجازه ورکوي چې په اسانۍ سره د لسیزو ارزښتونو، تارونو او هیکس کې ژباړل شي - i.e. دا هغه څه دي چې موږ واقعیا د کڅوړې جوړښت پوهیدو ته اړتیا لرو. نو، د مثال په توګه، تاسو کولی شئ په HEX کې د بایټونو لړۍ ترلاسه کړئ او یوازې بایټونه:

    res["xidhex"]=data[4:8].hex() Res["xidbyte"]=ډاټا[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

Add a comment