PDA

View Full Version : گرفتن مشخصات سیستم کاربران



rasti_web
یک شنبه 19 شهریور 1385, 18:44 عصر
چگونه می توان در هنگام رجیستر کردن کاربران اطلاعاتی از سیستم آنها به دست آورد ؟
(مانند اطلاعات در مورد مشخصات سخت افزار سیستم )

prince-of-persia
یک شنبه 19 شهریور 1385, 18:55 عصر
من جواب این سوال رو نمیدونم اما خوشحال میشم بدونم به چه کاری میاد

rasti_web
دوشنبه 20 شهریور 1385, 10:47 صبح
تشکیل یک بانک اطلاعاتی مثلا از IP کاربران

titbasoft
دوشنبه 20 شهریور 1385, 11:22 صبح
اطلاعات مفیدی به راحتی نمی شه بدست اورد. شما با استفاده از Server Variable ها مقداری از مشخصات نرم افزاری کاربرها تون رو می تونید بدست بیارید. این مدل اطلاعات رو می شه با استفاده از Windows Management Instrumentation (http://www.microsoft.com/whdc/system/pnppwr/wmi/default.mspx) بدست آورد، که به اون هم در سمت کلاینت به راحتی دسترسی ندارید (به علت محدودیت های امنیتی)
به هر حال روی WMI توی سایت جستجو کنید، اطلاعات مفیدی بدست خواهید آورد.

rasti_web
دوشنبه 20 شهریور 1385, 12:16 عصر
لطفا اگه میشه یه نمونه برنامه به من معرفی کنید .
کار من خیلی خیلی ضروری هستش ...
برنامه من Web Application با #C است .

ealireza
دوشنبه 20 شهریور 1385, 15:41 عصر
دوست من
هیچی جز IP نمیتونی بدست بیاری
شما مشخصات سخت افزاری رو میخوای که امکان پذیر نیست .


اما اگه مشخصاتی که کانتر ها جمع میکنن مثل سیستم عامل - مرور گر و...
سادست خواستی بگو راهنمایی کنیم ...

موفق باشید

manager
سه شنبه 21 شهریور 1385, 00:31 صبح
شما می تونید اطلاعاتی عمومی رو که مرورگر های سمت کلاینت در اختیارتون می ذارن نظیر :

IP کلاینت
گزارش نگارش های نرم افزارهای نصب شده ی مهم. مثل گزارش انواع نگارش های دات نت فرم ورک
نوع و نام سیستم عامل
نام کاربری کاربر
گزارش مرورگرهای نصب شده و نگارش های آنان
زبان پبش فرض مرورگر
و ...دریافت کنید.
برای بدست آوردن اطلاعات بیشتر می تونید از طریق پروتکل SNMP عمل کنید و به پایگاه های اطلاعاتی نظیر فایل های MIB و یا WMI (Windows Management Instrument) دسترسی پیدا کنید. برای انجام این کار لازمه شما به مبانی برنامه نویس شبکه و سوکت آشنائی داشته باشید. قبل از اینکه در این زمینه اقدام کنید اول به مطالبی که داخل این پایگاه ها وجود داره نگاه بندازید ببینید به دردتون می خوره یا نه ؟
مطلب دیگه اینکه هر کلاینتی اجازه نمی ده شما به این اطلاعات دسترسی پیدا کنید، پس این رو هم در نظر بگیرید..

برای مشاهده فایل های MIB نرم افزار زیر رو نصب کنید سپس دنبال فایل با نام mib.bin بگردید و اون رو به نرم افزار معرفی کنید و محتویاتش رو ببینید ...



MIB Browser - http://www.nonlinearideas.com/ (http://www.nonlinearideas.com/)
MIB editor, builder and browser - http://www.mg-soft.com/index.html (http://www.mg-soft.com/index.html)




اگر این مطلب متقاضی داره بگید من بیشتر توضیح بدم ...

http://www.mg-soft.com/pic/mibb-v8-anim.gif

rasti_web
سه شنبه 21 شهریور 1385, 09:53 صبح
پس از طریق Web Application نمیتوان به مشخصات سخت افزاری سیستم های کلاینت دسترسی پیدا کرد .
لطفا در مورد روشهایی که در بالا ذکر نمودید بیشتر توضیح دهید ( اگر ممکنه ساده ترین روش باشه کار من ضروریه )
بی نهایت سپاسگذارم

manager
سه شنبه 21 شهریور 1385, 11:15 صبح
چرا می شه از طریق یه Web App به مشخصات سیستم دسترسی پیدا کرد البته با روش هائی که گفتم ... یکسری محدودیت ها داره مثلا ممکنه تعدا کمی سیستم به شما اجازه ی دسترسی به اطلاعات رو بدن من خودم به شخص امتحان نکردم ... من امروز می رم مسافرت ایشال.. هفته ی دیگه یه برنامه نمونه می نویسم می ذارم اینجا ...

rasti_web
سه شنبه 21 شهریور 1385, 12:10 عصر
من هم تا هفته دیگه میتونم برنامه رو تحویل بدم .
منتظر هستم .
ممنونم

manager
پنج شنبه 23 شهریور 1385, 19:16 عصر
خوب من یه برنامه نوشتم تا مشخصات سیستم کاربرانی که به این صفحه مراجعه می کنند رو نمایش بده. این برنامه از پروتکل SNMP V1.0 استفاده می کنه. همون طور که قبلا هم گفتم به ندرت سیستم های سرویس SNMP خودشون رو فعال می کنند. اکثرا مدیران شبکه از این پروتکل جهت مدیریت و نیز مشاهده اطلاعات آماری تجهیزات مخصوصا تجهیزات سیسکو در شبکه های LAN مورد استفاده قرار می گیره.
تو این برنامه که خیلی سرراست هست من اطلاعات SysDecs رو گرفتم. شما می تونید با نرم افزار های MIB Browser به دنبال اطلاعات مورد علاقه خودتون بگردید و بعد از پیدا کردن شیئ مورد نظرتون از طریق نرم افزار، شماره شناسه شیئ را که به صورت ASN هست رو استخراج کنید و در برنامه جایگزین کنید.
در صورتی که ماشین کلاینت سرویس SNMP خودش رو فعال کرده باشه باید در تنظیمات خودش نیز public رو به عنوان مقدار community name تنظیم کنه.
البته نا امید نشید، خیلی از سیستم ها نیز ممکنه این سرویس رو داشته باشند، همچنین public رایج ترین مقدار برای community name هست.
من سعی کردم یه هاست free برای تست کردن و نظر سنجی این برنامه پیدا کنم ولی متاسفانه چیزی گیرم نیومد، اگر شما یه هاست فری پیدا کردید بگید من این برنامه رو بزارم برای تست و آمار گیری.



[SecurityPermission(SecurityAction.Assert)]
protected void Page_Load(object sender, EventArgs e)
{
SNMPObject snmpObject = new SNMPObject("1.3.6.1.2.1.1.1.0");
string clientIP = Request.ServerVariables["REMOTE_ADDR"];
string value = "";
try
{
value = snmpObject.getSimpleValue(new SNMPAgent(clientIP));
Literal1.Text="<b>Your system description : </b><br/>"+value;
}
catch (Exception ex)
{
Literal1.Text="<font color='red'>ERROR :</font> " + ex.Message;
}
}


کتابخانه ای که من ازش استفاده کردم کار رو خیلی آسون تر کرده البته کار خاصی نیست که شما لازم باشه بدونید. ساختن و بازیابی packetهای شبکه ای SNMP یه خر کاریه درست و حسابیه که این کتابخانه این کار رو برای شما تمام و کمال می کنه.
برای ساخت یک پکت می تونید از کد زیر استفاده کنید :

public static byte[] Get(string request, string host, string community, string mibstring)
{
byte[] packet = new byte[1024];
byte[] mib = new byte[1024];
int snmplen;
int comlen = community.Length;
string[] mibvals = mibstring.Split('.');
int miblen = mibvals.Length;
int cnt = 0, temp, i;
int orgmiblen = miblen;
int pos = 0;
// Convert the string MIB into a byte array of integer values
// Unfortunately, values over 128 require multiple bytes
// which also increases the MIB length
for (i = 0; i < orgmiblen; i++)
{
temp = Convert.ToInt16(mibvals[i]);
if (temp > 127)
{
mib[cnt] = Convert.ToByte(128 + (temp / 128));
mib[cnt + 1] = Convert.ToByte(temp - ((temp / 128) * 128));
cnt += 2;
miblen++;
}
else
{
mib[cnt] = Convert.ToByte(temp);
cnt++;
}
}
snmplen = 29 + comlen + miblen - 1; //Length of entire SNMP packet
//The SNMP sequence start
packet[pos++] = 0x30; //Sequence start
packet[pos++] = Convert.ToByte(snmplen - 2); //sequence size
//SNMP version
packet[pos++] = 0x02; //Integer type
packet[pos++] = 0x01; //length
packet[pos++] = 0x00; //SNMP version 1
//Community name
packet[pos++] = 0x04; // String type
packet[pos++] = Convert.ToByte(comlen); //length
//Convert community name to byte array
byte[] data = Encoding.ASCII.GetBytes(community);
for (i = 0; i < data.Length; i++)
{
packet[pos++] = data[i];
}
//Add GetRequest or GetNextRequest value
if (request == "get")
packet[pos++] = 0xA0;
else
packet[pos++] = 0xA1;
packet[pos++] = Convert.ToByte(20 + miblen - 1); //Size of total MIB
//Request ID
packet[pos++] = 0x02; //Integer type
packet[pos++] = 0x04; //length
packet[pos++] = 0x00; //SNMP request ID
packet[pos++] = 0x00;
packet[pos++] = 0x00;
packet[pos++] = 0x01;
//Error status
packet[pos++] = 0x02; //Integer type
packet[pos++] = 0x01; //length
packet[pos++] = 0x00; //SNMP error status
//Error index
packet[pos++] = 0x02; //Integer type
packet[pos++] = 0x01; //length
packet[pos++] = 0x00; //SNMP error index
//Start of variable bindings
packet[pos++] = 0x30; //Start of variable bindings sequence
packet[pos++] = Convert.ToByte(6 + miblen - 1); // Size of variable binding
packet[pos++] = 0x30; //Start of first variable bindings sequence
packet[pos++] = Convert.ToByte(6 + miblen - 1 - 2); // size
packet[pos++] = 0x06; //Object type
packet[pos++] = Convert.ToByte(miblen - 1); //length
//Start of MIB
packet[pos++] = 0x2b;
//Place MIB array in packet
for (i = 2; i < miblen; i++)
packet[pos++] = Convert.ToByte(mib[i]);
packet[pos++] = 0x05; //Null object value
packet[pos++] = 0x00; //Null
//Send packet to destination
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,
ProtocolType.Udp);
sock.SetSocketOption(SocketOptionLevel.Socket,
SocketOptionName.ReceiveTimeout, 5000);
IPHostEntry ihe = Dns.Resolve(host);
IPEndPoint iep = new IPEndPoint(ihe.AddressList[0], 161);
EndPoint ep = (EndPoint)iep;
sock.SendTo(packet, snmplen, SocketFlags.None, iep);
//Receive response from packet
try
{
int recv = sock.ReceiveFrom(packet, ref ep);
}
catch (SocketException)
{
packet[0] = 0xff;
}
return packet;
}
SNMP پنج دستور داره که هر کدومشون به درد یه کاری می خورند ولی دستوری که ما اینجا ازش استفاده کردیم دستور get هست که اطلاعات مربوط به یک شیئ فایل MIB رو بر می گردونه. لازم به ذکره که ما از MIB نگارش 2 استفاده کردیم.
بازیابی اطلاعات مربوط به Packet هم کاری نداره ولی برای نوشتن کدهاش شما احتیاج به یه رفرنس دارید که معنای هر بایت موجود در پکت رو بهتون بگه. مثلا بایت 6ام پکت اندازه مقدار community name رو باز می گردونه !..
با استفاده از کتابخانه فوق الذکر احتیاجی به نوشتن این کدهای طاقت فرسا نیست....
در پایان یادآور می شم یه وقت اجازه نوشتن به سرویس SNMP ندید وگرنه مسئولیت عواقبش با خودتونه !!!!!!!!!!!!!

پروژه نمونه :

manager
پنج شنبه 23 شهریور 1385, 20:09 عصر
لطفا روی لینک زیر کلیلک کنید تا مشخصات سیستم خود رو ببینید و مثال بالا رو تست کنید :

http://mfarahy-1.at.vwdhosting.net/

لطفا اگر کلیک کردید ومطالبی راجع به سیستمتون دیدید بگید که متوجه بشیم رو چند تا سیستم این برنامه کار می کنه !!
اگر تعداد کلاینت هائی که به این تست جواب مثبت بدن زیاد باشه تو تاپیک های بعدی مطالب بیشتری در این باب قرار می دم ..

mahdi_negahi
جمعه 24 شهریور 1385, 09:06 صبح
آقا ما که بیصبرانه منتظر اطلاعات بیشتر هستیم منیجر جان لطفا ادامه دهید

manager
شنبه 25 شهریور 1385, 11:52 صبح
من خودم تا به حال رو هر سیستمی که امتحان کردم کار کرده.. فقط یک نکته در صورتی که شما از طریق یک Lan به اینترنت وصل بشید این برنامه اطلاعات مربوط به Getway رو بر می گردونه نه اون کلاینتی که به این صفحه مراجعه کرده ..

اطلاعات دیگه ای که قابل نمایشه عبارت است از :

نام سیستم
مدت زمان روشن بودن سیستم
اطلاعاتی در مورد سخت افزار و Platform سیستم (که در مثال بالا استفاده شده)
تعداد کارت های شبکه سیستم
تمام اطلاعات آماری Packet های پروتکل هائی مثل : TCP, UDP, ICMP, SNMP و ...
نوع و مشخصات سخت افزاری کارت های شبکه
و ...برای اطلاعات بیشتر به نرم افزار معرفی شده مراجعه کنید.

فقط در صورتی که کسی در هنگام آزمایش پیغام خطا دید، بگه تا به دنبال رفع مشکل باشم.

yavari
یک شنبه 26 شهریور 1385, 09:47 صبح
لطفا روی لینک زیر کلیلک کنید تا مشخصات سیستم خود رو ببینید و مثال بالا رو تست کنید :

http://mfarahy-1.at.vwdhosting.net/

لطفا اگر کلیک کردید ومطالبی راجع به سیستمتون دیدید بگید که متوجه بشیم رو چند تا سیستم این برنامه کار می کنه !!
اگر تعداد کلاینت هائی که به این تست جواب مثبت بدن زیاد باشه تو تاپیک های بعدی مطالب بیشتری در این باب قرار می دم ..


سلام

با سپاس فراوان از جناب منیجر
استاد ، کارتون حرف نداره ! :تشویق: :تشویق: :تشویق:
ادامه بدید لطفا !
با این حال دوستان اگه مشکلی برخوردن ، کم لطفی نکنن و عنوان کنن !

با تشکر

tomcat
یک شنبه 26 شهریور 1385, 14:46 عصر
جمیعا سلام
کسی فایل VNSSetu1.cab را داره مربوط به web Developer2005 می باشد.
همچنین فایل microsoft.vsa.hosting.dll

nazaninam
یک شنبه 26 شهریور 1385, 18:55 عصر
من آپلودش کردم توی یک هاست http://karyab.net
البته بدون اینکه تغییرش بدم ولی ارور میده :

manager
یک شنبه 26 شهریور 1385, 19:24 عصر
من آپلودش کردم توی یک هاست http://karyab.net
البته بدون اینکه تغییرش بدم ولی ارور میده :
Result :
ERROR : Object reference not set to an instance of an object.

>> اگر توضیح بدین که این پاسخ چه ربطی به این تاپیک داره ممنون می شم !!!!!!؟؟؟

microsoft.vsa.hosting.dll :
http://www.fileproperties.com/m/microsoft.vsa.hosting.dll.htm

nazaninam
چهارشنبه 29 شهریور 1385, 15:36 عصر
دوست عزیز اون پروژه ای که بالا برامون زحمت کشیدید آپلود کردید من هم روی یک هاست گذاشتم ولی پیام خطا میده
البته روی لوکال هم همین مشکل هست

manager
جمعه 31 شهریور 1385, 19:42 عصر
دوست عزیز اون پروژه ای که بالا برامون زحمت کشیدید آپلود کردید من هم روی یک هاست گذاشتم ولی پیام خطا میده
البته روی لوکال هم همین مشکل هستمن قبل از اینکه این برنامه رو بنویسم گفتم که روی سیستم های کمی جواب میده چون شما احتاج به IP ولید کلاینت دارید.این سیستم فقط به درد لوکال می خوره ... پروژه مشکلی نداره من خودم چک کردم ولی حالا هر وقت از مسافرت برگشتم دوباره چک می کنم ...

rasti_web
شنبه 01 مهر 1385, 09:59 صبح
از راهنمایی هاتون سپاسگذارم
من لینک رو تست کردم ولی روی سیستم من فقط شماره IP رو میده .

PrinceDotNet
شنبه 01 مهر 1385, 13:37 عصر
منم همینتور