د دې پروژې موخه دا وه:
- په IPv4 شبکه کې د DHCP په اړه زده کړه
- د پایتون زده کړه (له پیل څخه یو څه ډیر 😉)
- د سرور بدیل
DB2DHCP (زما فورک)، اصليدلته ، کوم چې د نوي OS لپاره راټولول ورځ تر بلې ستونزمن کیږي. او زه دا نه خوښوم چې دا یو بائنری دی چې د "اوس مهال بدلون" لپاره کومه لاره نشته - د کارونکي DHCP سرور ترلاسه کول د دې وړتیا سره چې د پیرودونکي ماک په کارولو سره د پیرودونکي IP پته غوره کړئ یا د میک + پورټ ترکیب بدل کړئ (اختیار 82)
- بل بایسکل لیکل (آه! دا زما د خوښې فعالیت دی)
- په حبرهبر کې ستاسو د کلب لاس ته راوړنې په اړه د نظرونو ترلاسه کول (یا تر دې غوره، بلنه) 😉
پایله: دا کار کوي 😉 په FreeBSD او اوبنټو OS کې ازمول شوی. په تیوریکي توګه، کوډ د هر OS لاندې کار کولو غوښتنه کیدی شي، ځکه داسې ښکاري چې په کوډ کې کوم ځانګړي بندیزونه شتون نلري.
په احتیاط سره! د راتلو لپاره ډیر څه شته.
د شوقیانو لپاره د ذخیره کولو لینک
د "د هارډویر مطالعې" پایلې د نصبولو، تنظیمولو او کارولو پروسه خورا ټیټه ده، او بیا د DHCP پروتوکول په اړه لږ تیوري. د ځان لپاره. او د تاریخ لپاره 😉
یو کوچنی نظریه
DHCP څه شی دی؟
دا د شبکې پروتوکول دی چې یوه وسیله ته اجازه ورکوي چې د DHCP سرور څخه خپل IP پته (او نور پیرامیټونه لکه ګیټس، DNS، او نور) ومومي. پاکټونه د UDP پروتوکول په کارولو سره تبادله کیږي. د وسیلې د عملیاتو عمومي اصول کله چې د شبکې پیرامیټرو غوښتنه کول په لاندې ډول دي:
- وسیله (پیرودونکي) د غوښتنې سره په ټوله شبکه کې د UDP نشر غوښتنه (DHCPDISCOVER) لیږي "ښه ، یو څوک ما ته IP پته راکړي." سربیره پردې ، معمولا (مګر تل نه) غوښتنه د پورټ 68 (سرچینې) څخه پیښیږي ، او منزل د 67 بندر (منزل) دی. ځینې وسایل هم د 67 بندر څخه پاکټونه لیږي. د پیرودونکي وسیلې MAC پته د DHCPDISCOVER پاکټ دننه شامله ده.
- ټول DHCP سرورونه چې په شبکه کې موقعیت لري (او ممکن ډیری یې وي) د وسیلې لپاره د شبکې ترتیباتو سره د DHCPOFFER وړاندیز رامینځته کوي چې DHCPDISCOVER یې لیږلی ، او دا یې په شبکه کې هم خپروي. د دې پیژندنه د چا لپاره ده چې دا کڅوړه د پیرودونکي د MAC پتې پراساس ده چې دمخه د DHCPDISCOVER غوښتنې کې چمتو شوي.
- پیرودونکی د شبکې ترتیباتو لپاره وړاندیزونو سره پاکټونه مني، خورا زړه راښکونکي غوره کوي (معاملات ممکن توپیر ولري، د بیلګې په توګه، د پاکټ تحویل وخت، د منځنیو لارو شمیر)، او د شبکې ترتیباتو سره "رسمي غوښتنه" DHCPREQUEST کوي. د DHCP سرور څخه دا خوښوي. په دې حالت کې، پاکټ یو ځانګړي DHCP سرور ته ځي.
- هغه سرور چې DHCPREQUEST ترلاسه کړی د DHCPACK فارمیټ کڅوړه لیږي، په کوم کې چې دا یو ځل بیا د دې پیرودونکي لپاره د شبکې ترتیبات لیست کوي
برسېره پردې، د DHCPINFORM کڅوړې شتون لري چې د پیرودونکي څخه راځي، او موخه یې د DHCP سرور ته خبر ورکول دي چې "پیرودونکی ژوندی دی" او د جاري شوي شبکې ترتیبات کاروي. د دې سرور په تطبیق کې، دا پاکټونه له پامه غورځول شوي.
د بسته بندۍ بڼه
په عموم کې، د ایترنیټ پاکټ چوکاټ یو څه داسې ښکاري:
زموږ په قضیه کې، موږ به یوازې د 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 برخه:
کوربه، کارن-نوم، پټنوم، اساس نوم - هرڅه د ځان لپاره خبرې کوي. د اټکل شوي ډیټابیس جوړښت په اړه پوسټ شوی
د پوښتنې برخه: د وړاندیز/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 پته ترلاسه کړې:
د سرور پیل
./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