PDA

View Full Version : ارتباط با روتر از طریق سی شارپ



sahba_piano
پنج شنبه 20 مهر 1391, 08:35 صبح
در این تاپیک میخواهیم بررسی کنیم که چگونه از طریق سی شارپ می توانیم به کانفیگ یک روتر دسترسی داشته باشیم و اطلاعات آنرا پردازش نمائیم...بطورکلی در تاپیک فوق برنامه نویسی برای روتر مورد بررسی قرار میگیرد.

amirzandi
پنج شنبه 20 مهر 1391, 08:49 صبح
من این کار رو کردم ، ولی با VB.NET ، یک برنامه برای یک ISP نوشتم که Accounting مشترکین Wireless را انجام می داد ، سر یک تاریخ مشخص پورت مربوط به مشترک را ShutDown می کرد. همچنین چون سوییچ L3 بود ، این امکان را به کاربران داده بودم که پهنای باند را روی پورت تعیین کنند. فرامینی از قبیل Port Security هم برای کاربران قرار داده بودم.

بعد از آن یک برنامه نوشتم که به مودم ADSL وصل می شد و شروع می کرد به Config کردن آن ، این کار را در کمتر از 4 ثانیه انجام می داد و مودم را Reload می کرد. البته یک اینترفیس نوشتم برای کاربران که username و password مربوط به سرویس ADSL را از آنها می گرفت.

sahba_piano
پنج شنبه 20 مهر 1391, 11:35 صبح
من بیشتر دنیال کلاسی در داتنت می گردم که بتنونم کانفیگ یک روتر رو بخونم و پردازش کنم.....و حتی نتیجه یک دستور هم برام برگردونه ...مثلا اینکه کدام اینترفیس روتر الان آپه و .....

AmirGhasemi
پنج شنبه 20 مهر 1391, 11:38 صبح
سلام بر دوستان عزيز
آقا من بخدا مخلص شما هستم! تو را به خدا اين تاپيك را كامل كنيد و ما را از علوم خويش بهره مند سازيد
من مدتهاست كه دنبال مقاله و سورس براي كار با روترها توي سي شارپ هستم! امادريغ از يك خط مطلب مفيد
من حاضرم عروسي همه تان بيام برقصم ولي تو را بخدا اين تاپيك را كامل كنيد و ما را از علوم خفيه خويش اگاه سازيد

morteza271
پنج شنبه 20 مهر 1391, 12:03 عصر
دوستان من هم خیلی دوست دارم در این زمینه اطلاعاتی داشته باشم و بتوانم کد بنویسم.
پس از دوستانی که در این زمینه اطلاعاتی دارند لطف کنند کمک کنند.
با تشکر پیشاپیش...

من حاضرم عروسي همه تان بيام برقصم
آقای قاسمی میگم شما مثل اینکه خیلی عروسی و رقص رو دوست دارین نه؟؟؟؟؟؟؟؟؟؟؟!!!!!!!!

sahba_piano
پنج شنبه 20 مهر 1391, 13:00 عصر
از طریق پرتکل SNMP میشه...دوستان در این زمینه باید به Namespace :system.net.socket نگاهی بیاندازید.....من هم تحقیقاتم را شروع کردم ...به نتیجه رسیدم اطلاع رسانی میکنم......

amirzandi
پنج شنبه 20 مهر 1391, 19:30 عصر
از طریق SNMP شما خیلی نمی توانی روی دستگاه فرمان اجرا کنی ، SNMP بیشتر برای برنامه های گزارش گیری یا اینکه Live Report ها مثل ترافیک هر Interface بکار می ره . البته در Cisco شما می توانی برای SNMP هم read - write داشته باشی ، ولی SNMP روی سیسکو ، برای همه فرمانها پشتیبانی نمی شه.

شما از طریق Socket می تونی به Device با استفاده از Telnet وصل شی ، و فرمانها را مستقیم به Device ارسال کنی و نتیجه آنها رو هم بگیری.

babry1377
سه شنبه 02 آبان 1391, 19:17 عصر
با سلام .
من می خوام یک برنامه بنویسم که user و password مودم wifi را به دست بیاره.
چه کار باید بکنم؟
لطفا راهنمایی کنید

sahba_piano
چهارشنبه 03 آبان 1391, 09:59 صبح
من هم با توجه به جستجوئی که در اینترنت داشتم .....به نتیجه شما رسیدم....فکر کنم در حال حاضر بهترین راهه....

VE2016
سه شنبه 12 اردیبهشت 1402, 13:53 عصر
سلام وعرض ادب
مهندس امکانش هست توابعی که برای کار با روتر رو استفاده میکنید رو برام ارسال کنید
میخوام به روتر با نام کاربری و رمز عبور وصل بشم و یه سری کانفیگ از سوییچ بخونم و یه سری کانفیگ بزنم روی روتر.

پرستو پارسایی
سه شنبه 12 اردیبهشت 1402, 21:05 عصر
برای دسترسی به کانفیگ یک روتر و پردازش اطلاعات آن در سی شارپ، شما می توانید از کتابخانه‌هایی مانند SNMPSharpNet و SharpSnmpLib استفاده کنید.
البته باید توجه داشت که این مثال فقط یک نمونه ساده است و برای دسترسی به کانفیگ کامل یک روتر، باید از OID های مختلفی استفاده کرد که هر کدام اطلاعات مختلفی را در اختیار قرار می دهند . اگر نیاز هست بیشتر توضیح بدم


using Lextm.SharpSnmpLib;
using Lextm.SharpSnmpLib.Messaging;


// Define connection information
var agentAddress = new IpAddress("192.168.1.1");
var agentPort = 161;
var community = new OctetString("public");


// Create SNMP request
var pdu = new Pdu(
PduType.Get,
new Variable(
new ObjectIdentifier("1.3.6.1.2.1.2.2.1.8.1"))); // OID for interface status


// Send SNMP request and get response
var response = Messenger.Get(
VersionCode.V2,
agentAddress,
new OctetString("public"),
pdu,
5000);


// Process response
if (response != null && response.ErrorStatus == 0)
{
foreach (var v in response.VariableBindings)
{
Console.WriteLine("{0} ({1}): {2}",
v.Oid.ToString(),
SnmpConstants.GetTypeName(v.Value.Type),
v.Value.ToString());
}
}
else
{
Console.WriteLine("Error in SNMP response. Error status: {0}", response.ErrorStatus);
}

پرستو پارسایی
سه شنبه 12 اردیبهشت 1402, 21:29 عصر
برای بدست آوردن Username و Password یک روتر : به طور معمول، اطلاعات یوزرنیم و پسورد روتر در کانفیگ ذخیره می شوند و برای دسترسی به آنها باید از OID های مربوط به مدیریت کانفیگ ،استفاده کنید

برای مثال OID های مربوط به یوزرنیم و پسورد در قالب زیر هستند



یوزرنیم: 1.3.6.1.4.1.9.9.96.1.1.1.1.7
پسورد: 1.3.6.1.4.1.9.9.96.1.1.1.1.11

برای مثال :

using Lextm.SharpSnmpLib;
using Lextm.SharpSnmpLib.Messaging;


// Define connection information
var agentAddress = new IpAddress("192.168.1.1");
var agentPort = 161;
var community = new OctetString("public");


// Create SNMP request for username
var usernamePdu = new Pdu(
PduType.Get,
new Variable(
new ObjectIdentifier("1.3.6.1.4.1.9.9.96.1.1.1.1.7"))); // OID for username


// Send SNMP request and get response
var usernameResponse = Messenger.Get(
VersionCode.V2,
agentAddress,
community,
usernamePdu,
5000);


// Process username response
if (usernameResponse != null && usernameResponse.ErrorStatus == 0)
{
var username = usernameResponse.VariableBindings[0].Value.ToString();
Console.WriteLine("Username: {0}", username);
}
else
{
Console.WriteLine("Error in SNMP response. Error status: {0}", usernameResponse.ErrorStatus);
}


// Create SNMP request for password
var passwordPdu = new Pdu(
PduType.Get,
new Variable(
new ObjectIdentifier("1.3.6.1.4.1.9.9.96.1.1.1.1.11"))); // OID for password


// Send SNMP request and get response
var passwordResponse = Messenger.Get(
VersionCode.V2,
agentAddress,
community,
passwordPdu,
5000);


// Process password response
if (passwordResponse != null && passwordResponse.ErrorStatus == 0)
{
var password = passwordResponse.VariableBindings[0].Value.ToString();
Console.WriteLine("Password: {0}", password);
}
else
{
Console.WriteLine("Error in SNMP response. Error status: {0}", passwordResponse.ErrorStatus);
}
در این مثال، ابتدا درخواست Get برای دریافت یوزرنیم و پسورد ارسال میشود و پس از دریافت پاسخ، اطلاعات مربوطه از متغیرهای VariableBindings خوانده می شوند و در نهایت در کنسول نمایش داده میشود

اگر هم میخواهید نتیجه را در مسیج باکس دریافت کنید بجای کنسول از کد زیر استفاده کنید


using Lextm.SharpSnmpLib;
using Lextm.SharpSnmpLib.Messaging;
using System.Windows.Forms;


var agentAddress = new IpAddress("192.168.1.1");
var agentPort = 161;
var community = new OctetString("public");


var usernamePdu = new Pdu(
PduType.Get,
new Variable(
new ObjectIdentifier("1.3.6.1.4.1.9.9.96.1.1.1.1.7")));


var usernameResponse = Messenger.Get(
VersionCode.V2,
agentAddress,
community,
usernamePdu,
5000);


if (usernameResponse != null && usernameResponse.ErrorStatus == 0)
{
var username = usernameResponse.VariableBindings[0].Value.ToString();
MessageBox.Show("Username: " + username);
}
else
{
MessageBox.Show("Error in SNMP response. Error status: " + usernameResponse.ErrorStatus);
}


var passwordPdu = new Pdu(
PduType.Get,
new Variable(
new ObjectIdentifier("1.3.6.1.4.1.9.9.96.1.1.1.1.11")));


var passwordResponse = Messenger.Get(
VersionCode.V2,
agentAddress,
community,
passwordPdu,
5000);


if (passwordResponse != null && passwordResponse.ErrorStatus == 0)
{
var password = passwordResponse.VariableBindings[0].Value.ToString();
MessageBox.Show("Password: " + password);
}
else
{
MessageBox.Show("Error in SNMP response. Error status: " + passwordResponse.ErrorStatus);
}

پرستو پارسایی
سه شنبه 12 اردیبهشت 1402, 22:32 عصر
کد فوق دریافت اطلاعات از روتر هست یعنی Read اگر ایجاد تغییرات نیاز هست یعنی Write بفرمائید تا درج کنم

VE2016
چهارشنبه 13 اردیبهشت 1402, 11:41 صبح
ممنون از لطفتون کدهای معادل VB.net این سورس کد رو دارید؟

VE2016
چهارشنبه 13 اردیبهشت 1402, 11:48 صبح
کد فوق دریافت اطلاعات از روتر هست یعنی Read اگر ایجاد تغییرات نیاز هست یعنی Write بفرمائید تا درج کنم
خانم مهندس میخوام portsecurity بزنم رو سوییچ با Vb.net

پرستو پارسایی
چهارشنبه 13 اردیبهشت 1402, 18:44 عصر
برای اعمال PortSecurity بر روی سوئیچ ، شما میتوانید از دستورات CLI آن استفاده کنید . این دستورات به شما این امکان را میدهند تا محدودیت هایی بر روی پورت های سوئیچ تعیین کنید تا فقط دستگاه های مجاز به آنها دسترسی داشته باشد.
1- ابتدا به سوئیچ خود متصل شوید و با استفاده از دستورات CLI به حالت کانفیگ شدن بروید
2- با استفاده از دستورات "interface[interface-name] به پورت مورد نظر متصل شوید . برای مثال ، اگر میخواهید PortSecurity را بر روی پورت 1/1 اعمال کنید ، دستور زیر را وارد کنید


Switch(config)#interface GigabitEthernet1/1

3- سپس با استفاده از دستورات "switchport port-security " امکان portSecurity را برای پورت فراهم کنید . این دستور به شما این امکان را می دهد تا محدودیت هایی را برا دستگاه هایی که به پورت متصل شده اند ، تعیین کنید . بطور مثال شما میتوانید تعداد دستگاه هایی که به پورت متصل مشوند را محدود کنید . یا مشخص کنید فقط دستگاه هایی با MAC خاصی به پورت متصل شوند.

Switch(config-if)#switchport port-security

4 - برای تعیین یک آدرس MAC خاص از کد زیر استفاده کنید

Switch(config-if)#switchport port-security mac-address 0011.2233.4455

5- در صورتی که بخواهید تعداد دستگاه هایی که به پورت متصل می شوند را محدود کنید از کد زیر استفاده نمائید در کد زیر فقط دو دستگاه متصل میشود

Switch(config-if)#switchport port-security maximum 2

6 - در صورتی که اگر دستگاه نا معتبر متصل شد ، بخواهید بلافاصله پورت را مسدود کنید از کد زیر استفاده کنید

Switch(config-if)#switchport port-security violation shutdown

در نهایت با دستور Exit از حالت کانفیگ خارج شوید و تغییرات را ذخیره نمائید

Switch(config-if)#exit
Switch(config)#exit

Switch#write memory

VE2016
شنبه 16 اردیبهشت 1402, 12:40 عصر
ممنون از لطفتون ولی من با دستورات سیسکو کاملا آشنا هستم و بلدم کار کنم
بنده کدهای این دستورات در VB.net رو میخواستم(یه جورایی خودم میخوام یه برنامه بنویسم مثل Putty یا SecureCRT

پرستو پارسایی
شنبه 16 اردیبهشت 1402, 22:11 عصر
سوال رو تو بخش خودش مطرح کنید تا پاسخ مناسب دریافت کنید سوال شما را در بخش وی بی دات نت پاسخ دادم