اذهب الي المحتوي
أوفيسنا

الردود الموصى بها

قام بنشر

عن طريق الاستعلام ممكن ولكن التنفيذ سيكون ثقيل جدا .. يعني حتنتظر اكثر من ما هو معمول الآن

حد الاستعلام  20 الى 30 سجل

وايضا يمكن من خلال النموذج وبدلا من عداد الوقت نستخدم دوارة على السجلات ولكن ان اردتها سريعة لا تتجاوز مثل ذلك

فاختر ما يناسبك من اجل اطبق لك على مثالك

قام بنشر

أخي @محمد احمد لطفى أحضرت لك دالة تقوم بفحص ال IP Address إذا كان متصل ولا لا .. ويمكن وضعها في الاستعلام 🙂 

ولكن كما قال المهندس @ابوخليل أنها بطييييييييئة جدا لأنها تفحص كل IP على حده وتستغرق وقت كبير لحد ما تعطيك ال Response ..

لذلك من الأسهل أن تجعلها في نموذج مفرد وليس متعدد لفحص ال IP الذي تريد معرفته فقط .. أو لك أن تجرب أكثر وتعطينا نتيجة تجاربك 🙂 

وهذه هي الدالة :

Function IsIPConnected(strIPAddress As String) As Boolean
    Dim objPing As Object
    Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2:Win32_PingStatus.Address='" & strIPAddress & "'")
    If objPing.StatusCode = 0 Then
        IsIPConnected = True
    Else
        IsIPConnected = False
    End If
End Function

 

  • Like 1
قام بنشر

أستاذى @ابوخليل

ممكن التطبيق على           

يمكن من خلال النموذج وبدلا من عداد الوقت نستخدم دوارة على السجلات ولكن ان اردتها سريعة لا تتعدا السجلات 100 او 120 بالكثير
وبصراحة لا استطيع عمل شريط التحميل 

أستاذى @Moosak

أريد أن أ‘عرف الاجهزة التى تعمل على الشبكها جميعها 
وكيف يمكن تطبيقها فى الاستعلام لا أعرف كيف اربط حقل IP بالوحدة النمطية

وحزاكم الله كل خير

 

قام بنشر

أستاذى @ابوخليل
ممكن عن طريق النموذج ( يمكن من خلال النموذج وبدلا من عداد الوقت نستخدم دوارة على السجلات ولكن ان اردتها سريعة لا تتعدا السجلات 100 او 120 بالكثير)

لأن الاستعلام فعلا بطىء و كله مشاكل

 

قام بنشر
1 ساعه مضت, محمد احمد لطفى said:

لا أعرف كيف اربط حقل IP بالوحدة النمطية

هذه طريقة ربط ال IP بالدالة 🙂 :

' إعطائها رقم الآيدي مباشرة
IsIPConnected("192.168.1.110")


' طريقة استخدامها في الاستعلام أو النموذج بحيث تربطها بحقل الآي بي
IsIPConnected([IP])

 

  • Thanks 1
قام بنشر (معدل)

جزاك الله خيرا استاذى @ابوخليل
تم 255 IP فى دقيقتين سوف أعرف الاجهزة التى تعمل و احذف IP الاجهزة التى لا تعمل 

وسأبحث عن تسريع الامر برنامج ipscan وقت scan  استغرق 39 ثانية
 

تم تعديل بواسطه محمد احمد لطفى
قام بنشر
18 ساعات مضت, kkhalifa1960 said:

استاذي أبو خليل هل ممكن استخراج NameIP ولصقه بالجدول .

وجدت لك كلاس يستخرج اسم المضيف من خلال الـــ الآي بي ، والعكس

Private Const IP_SUCCESS As Long = 0
Private Const SOCKET_ERROR As Long = -1

Private Const MAX_WSADescription As Long = 256
Private Const MAX_WSASYSStatus As Long = 128
Private Const MIN_SOCKETS_REQD As Long = 1

Private Const WS_VERSION_REQD As Long = &H101
Private Const WS_VERSION_MAJOR As Long = WS_VERSION_REQD \ &H100 And &HFF&
Private Const WS_VERSION_MINOR As Long = WS_VERSION_REQD And &HFF&

Private Const WSADescription_Len As Long = 256
Private Const WSASYS_Status_Len As Long = 128
Private Const AF_INET As Long = 2

'// structures

Private Type HOSTENT
    hName As Long
    hAliases As Long
    hAddrType As Integer
    hLength As Integer
    hAddrList As Long
End Type

 
Private Type WSADATA
   wVersion As Integer
   wHighVersion As Integer
   szDescription(0 To MAX_WSADescription) As Byte
   szSystemStatus(0 To MAX_WSASYSStatus) As Byte
   wMaxSockets As Long
   wMaxUDPDG As Long
   dwVendorInfo As Long
End Type

'// api
'kernel32
Private Declare Sub apiCopyMemory Lib "kernel32" Alias "RtlMoveMemory" (xDest As Any, xSource As Any, ByVal nBytes As Long)
Private Declare Function apiStrLen Lib "kernel32" Alias "lstrlenA" (lpString As Any) As Long
'wsock32
Private Declare Function apiGetHostByName Lib "wsock32.dll" Alias "gethostbyname" (ByVal hostname As String) As Long
Private Declare Function apiWSAStartup Lib "wsock32.dll" Alias "WSAStartup" (ByVal wVersionRequired As Long, lpWSADATA As WSADATA) As Long
Private Declare Function apiWSACleanup Lib "wsock32.dll" Alias "WSACleanup" () As Long
Private Declare Function apiInetAddr Lib "wsock32.dll" Alias "inet_addr" (ByVal s As String) As Long
Private Declare Function apiGetHostByAddr Lib "wsock32.dll" Alias "gethostbyaddr" (haddr As Long, ByVal hnlen As Long, ByVal addrtype As Long) As Long
 
'// private functions
Private Function InitializeSocket() As Boolean
    Dim WSAD As WSADATA
   
    'attempt to initialize the socket
    InitializeSocket = apiWSAStartup(WS_VERSION_REQD, WSAD) = IP_SUCCESS
End Function

Private Sub CloseSocket()
    'try to close the socket
    If apiWSACleanup() <> 0 Then
        MsgBox "Error calling apiWSACleanup.", vbCritical
    End If

End Sub

Public Function GetIPFromHostName(ByVal sHostName As String) As String
    'converts a host name to an IP address.
   
    Dim nBytes As Long
    Dim ptrHosent As Long
    Dim hstHost As HOSTENT
    Dim ptrName As Long
    Dim ptrAddress As Long
    Dim ptrIPAddress As Long
    Dim sAddress As String 'declare this as Dim sAddress(1) As String if you want 2 ip addresses returned
   
    'try to initalize the socket
    If InitializeSocket() = True Then
      
        'try to get the IP
        ptrHosent = apiGetHostByName(sHostName & vbNullChar)
       
        If ptrHosent <> 0 Then
                   
            'get the IP address
            apiCopyMemory hstHost, ByVal ptrHosent, LenB(hstHost)
            apiCopyMemory ptrIPAddress, ByVal hstHost.hAddrList, 4
             
            'fill buffer
            sAddress = Space$(4)
            'if you want multiple domains returned,
            'fill all items in sAddress array with 4 spaces
           
            apiCopyMemory ByVal sAddress, ByVal ptrIPAddress, hstHost.hLength
           
            'change this to
            'CopyMemory ByVal sAddress(0), ByVal ptrIPAddress, hstHost.hLength
            'if you want an array of ip addresses returned
            '(some domains have more than one ip address associated with it)
           
            'get the IP address
            GetIPFromHostName = IPToText(sAddress)
            'if you are using multiple addresses, you need IPToText(sAddress(0)) & "," & IPToText(sAddress(1))
            'etc
        End If
    Else
        MsgBox "Failed to open Socket."
    End If
End Function

Private Function IPToText(ByVal IPAddress As String) As String
    'converts characters to numbers
    IPToText = CStr(Asc(IPAddress)) & "." & _
              CStr(Asc(Mid$(IPAddress, 2, 1))) & "." & _
              CStr(Asc(Mid$(IPAddress, 3, 1))) & "." & _
              CStr(Asc(Mid$(IPAddress, 4, 1)))
End Function

Public Function GetHostNameFromIP(ByVal sIPAddress As String) As String
   
    Dim ptrHosent As Long
    Dim hAddress As Long
    Dim sHost As String
    Dim nBytes As Long
   
    'try to open the socket
    If InitializeSocket() = True Then
   
        'convert string address to long datatype
        hAddress = apiInetAddr(sIPAddress)
       
        'check if an error ocucred
        If hAddress <> SOCKET_ERROR Then
           
            'obtain a pointer to the HOSTENT structure
            'that contains the name and address
            'corresponding to the given network address.
            ptrHosent = apiGetHostByAddr(hAddress, 4, AF_INET)
           
            If ptrHosent <> 0 Then
               
                'convert address and
                'get resolved hostname

                apiCopyMemory ptrHosent, ByVal ptrHosent, 4
               
                nBytes = apiStrLen(ByVal ptrHosent)
               
                If nBytes > 0 Then
                    'fill the IP address buffer
                    sHost = Space$(nBytes)
                   
                    apiCopyMemory ByVal sHost, ByVal ptrHosent, nBytes
                    GetHostNameFromIP = sHost
                End If
            Else
                MsgBox "Call to gethostbyaddr failed."
            End If
            'close the socket
            CloseSocket
        Else
            MsgBox "Invalid IP address"
        End If
    Else
        MsgBox "Failed to open Socket"
    End If
End Function
' وهنا نستدعيه
Dim cResolve As clsResolve
  Set cResolve = New clsResolve
    MsgBox cResolve.GetHostNameFromIP("216.239.38.120")
    MsgBox cResolve.GetIPFromHostName("microsoft.com")

 

قام بنشر
19 ساعات مضت, kkhalifa1960 said:

استاذي أبو خليل هل ممكن استخراج NameIP ولصقه بالجدول .

إن كنت تقصد كود معرفة ال IP للجهاز حسب فهمي المتواضع فهذه الدالة تقوم بذلك : 🙂 

Function GetIPAddress() As String
    Dim objWMI As Object
    Dim colAdapters As Object
    Dim objAdapter As Object
    Dim strIPAddress As String
    Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
    Set colAdapters = objWMI.ExecQuery("Select * from Win32_NetworkAdapterConfiguration")
    For Each objAdapter In colAdapters
        If Not IsNull(objAdapter.IPAddress) Then
            strIPAddress = objAdapter.IPAddress(0)
            Exit For
        End If
    Next objAdapter
    GetIPAddress = strIPAddress
End Function

 

  • Thanks 1
قام بنشر

المطلوب HostIP اسم المضيف بمعلومية الآي بي

واذا شبكة داخلية مطلوب اسم الجهاز  بمعلومية IP Address

يمكن يوجد اكواد مختصرة تقوم بالمهمة

انظروا الى مصنف اكسل يحقق الغرض

لقلة خبرتي في اكسل لو احد الاخوة يعدل الكود الى اكسس

 

42_Lookup_Hostname.xlsm

  • Thanks 1
قام بنشر

أنا جربت هذه الدالة فنجحت في إحضار اسم جهازي .. ولكنها لم تفلح في الآيبيات الأخرى 

ربما تنجح لديكم .. 🙂 

Function GetHostIP(strIPAddress As String) As String
    Dim objWMI As Object
    Dim colAdapters As Object
    Dim objAdapter As Object
    Dim strHostName As String
    Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
    Set colAdapters = objWMI.ExecQuery("Select * from Win32_NetworkAdapterConfiguration")
    For Each objAdapter In colAdapters
        If Not IsNull(objAdapter.IPAddress) Then
            If objAdapter.IPAddress(0) = strIPAddress Then
                strHostName = objAdapter.DNSHostName
                Exit For
            End If
        End If
    Next objAdapter
    GetHostIP = strHostName
End Function

 

قام بنشر
22 دقائق مضت, محمد احمد لطفى said:

شكرا أستاذ أبو خليل حاولت تشغيله فى اكسس مشتغلش فعلا

سؤال هل يمكن تشغيل نموذجين مع بعض :fff:لمعرفة IP متصل أو غير متصل لاختصار الوقت

الحقيقة لم افهم المطلوب !

كما تعلم يكون التركيز على نموذج واحد ، ولا ادري كيف يمكن تشغيل نموذجين مع بعض

  • Thanks 1
قام بنشر
17 دقائق مضت, Moosak said:

أنا جربت هذه الدالة فنجحت في إحضار اسم جهازي .. ولكنها لم تفلح في الآيبيات الأخرى 

ربما تنجح لديكم .. 🙂 

Function GetHostIP(strIPAddress As String) As String
    Dim objWMI As Object
    Dim colAdapters As Object
    Dim objAdapter As Object
    Dim strHostName As String
    Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
    Set colAdapters = objWMI.ExecQuery("Select * from Win32_NetworkAdapterConfiguration")
    For Each objAdapter In colAdapters
        If Not IsNull(objAdapter.IPAddress) Then
            If objAdapter.IPAddress(0) = strIPAddress Then
                strHostName = objAdapter.DNSHostName
                Exit For
            End If
        End If
    Next objAdapter
    GetHostIP = strHostName
End Function

 

ركب الكلاس اعلاه عندك

ثم اجعل بيانات الرسائل هكذا

  MsgBox cResolve.GetHostNameFromIP("85.10.205.205")
    MsgBox cResolve.GetIPFromHostName("www.officena.net")

ستلاحظ انه يعطي اسم الموقع في الرسالة الاولى بناء على الآيبي المدخل

والرسالة الثاني عكس الاولى

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information