ورود

View Full Version : تشخیص آنلاین بودن یک IP



mostafa_tak2000
دوشنبه 02 اسفند 1395, 00:38 صبح
سلام به همه دوستان
من میخوام یک رنج در فرم قرار بدم که وقتی کاربر روی دکمه کلیک کرد چک کنه و آی پی هایی که آنلاین هستند در ستون وضعیت OK و اگر نیستند NO نمایش بده . من با کد زیر مشکلم را حل کردم و در واقع برنامه Ping آی پی ها را میگیره و هرکدوم پینگ داشت OK می نویسه ولی مشکل من اینجاست که هر سیتمی که آنلاین نیست 5 ثانیه بیشتر زمان می بره و در شبکه من که حدود 170 کاربر هست اگه 100 تا آنلاین نباشند چیزی حدود 1.5 دقیقه طول میکشه که زمان زیادی هست . آیا روش دیگری هست که زودتر بشه چک و نتیجه نمایش داده شود . با سپاس فراوان از شما



Protected Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
Dim PingTable As New DataTable
PingTable.Columns.Add("IP_Address")
PingTable.Columns.Add("Status")


Dim i As Integer
Dim j As Integer = 0


Dim row_total As Integer = 20


For i = 1 To row_total
Dim PingRow As DataRow = PingTable.NewRow()
PingRow(0) = "192.168.88." & i + j


Scan(PingRow(0), PingRow(1))


PingTable.Rows.InsertAt(PingRow, PingTable.Rows.Count)
Next


GridView1.DataSource = PingTable
GridView1.DataBind()


End Sub


Sub Scan(ByVal IP, ByRef Status)


Dim strComputer As String = IP
Dim objShell = CreateObject("WScript.Shell")
Dim objScriptExec = objShell.Exec("ping -n 1 -w 100 " & strComputer)
Dim strPingResults = LCase(objScriptExec.StdOut.ReadAll)


If InStr(strPingResults, "reply from") Then
Status = "OK"
Else
Status = "NO"
End If




End Sub

mostafa_tak2000
سه شنبه 03 اسفند 1395, 00:30 صبح
سلام . دوستان واقعا راهی وجود ندارد ؟

Mag-Mag
چهارشنبه 04 اسفند 1395, 09:37 صبح
میتونی از ایونت های Session_OnStart و Session_OnEnd فایل global.asax استفاده کنی
موقعی که کاربری سایت رو باز میکنه با ایونت Session_OnStart ای پی اون رو بریز توی جدول ای پی های انلاین
و در Session_OnEnd اون ای پی رو پاک کن


راه دیگش اینه که همین روشی که رفتی ، رو به صورت اژاکسی فراخونی کنی
یعنی صفحه ات لود بشه ، بعد در پس زمینه
یکی یکی ، این ای پی ها رو چک کنی و اگر انلاین هستند ، اون مقدار مد نظرت رو ON کنی

یه راه دیگش استفاده از خود ASP.NET Membership هست (تا جایی که توی ذهنم هست ، فکر میکنم خودش همچین موردی داشت)

یه سری راه حل هم اینجا (https://www.codeproject.com/questions/491558/howplustoplusseepluswhoplusisplusonlineplusinplusa )هستش