Results 1 to 2 of 2

Thread: ---------------->NetBios<---------------

  1. #1

    Thread Starter
    Member
    Join Date
    Mar 2001
    Posts
    39

    ---------------->NetBios<---------------

    In API functions How would I look up if an IP address has netbios enabled. In DOS the command is nbtstat -A IP.
    Anyone know??

  2. #2
    old fart Frans C's Avatar
    Join Date
    Oct 1999
    Location
    the Netherlands
    Posts
    2,926
    Here you go:

    Code:
    Option Explicit
    Private Declare Function Netbios Lib "netapi32.dll" (pncb As NCB) As Byte
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long)
    Private Declare Function GetProcessHeap Lib "kernel32" () As Long
    Private Declare Function HeapAlloc Lib "kernel32" (ByVal hHeap As Long, ByVal dwFlags As Long, ByVal dwBytes As Long) As Long
    Private Declare Function HeapFree Lib "kernel32" (ByVal hHeap As Long, ByVal dwFlags As Long, lpMem As Any) As Long
    Const NCBASTAT = &H33
    Const NCBNAMSZ = 16
    Const HEAP_ZERO_MEMORY = &H8
    Const HEAP_GENERATE_EXCEPTIONS = &H4
    Const NCBRESET = &H32
    Private Type NCB
        ncb_command As Byte
        ncb_retcode As Byte
        ncb_lsn As Byte
        ncb_num As Byte
        ncb_buffer As Long
        ncb_length As Integer
        ncb_callname As String * NCBNAMSZ
        ncb_name As String * NCBNAMSZ
        ncb_rto As Byte
        ncb_sto As Byte
        ncb_post As Long
        ncb_lana_num As Byte
        ncb_cmd_cplt As Byte
        ncb_reserve(9) As Byte
        ncb_event As Long
    End Type
    Private Type ADAPTER_STATUS
        adapter_address(5) As Byte
        rev_major As Byte
        reserved0 As Byte
        adapter_type As Byte
        rev_minor As Byte
        duration As Integer
        frmr_recv As Integer
        frmr_xmit As Integer
        iframe_recv_err As Integer
        xmit_aborts As Integer
        xmit_success As Long
        recv_success As Long
        iframe_xmit_err As Integer
        recv_buff_unavail As Integer
        t1_timeouts As Integer
        ti_timeouts As Integer
        Reserved1 As Long
        free_ncbs As Integer
        max_cfg_ncbs As Integer
        max_ncbs As Integer
        xmit_buf_unavail As Integer
        max_dgram_size As Integer
        pending_sess As Integer
        max_cfg_sess As Integer
        max_sess As Integer
        max_sess_pkt_size As Integer
        name_count As Integer
    End Type
    Private Type NAME_BUFFER
        name As String * NCBNAMSZ
        name_num As Byte
        name_flags As Byte
    End Type
    Private Type ASTAT
        adapt As ADAPTER_STATUS
        NameBuff(30) As NAME_BUFFER
    End Type
    
    Private Sub Command1_Click()
    ' for local address pass an asterisk
    MsgBox "MAC Address : " & GetMac("*")
    ' for remote address pass an ip address or a computer name
    'MsgBox "MAC Address : " & GetMac("195.86.71.72")
    End Sub
    
    Private Function ToHex(bByte As Byte) As String
        ToHex = Right("0" & Hex(bByte), 2)
    End Function
    
    Private Function GetMac(sName As String) As String
    Dim myNcb As NCB
    Dim bRet As Byte
    Dim myASTAT As ASTAT
    Dim pASTAT As Long
        sName = UCase(sName)
        myNcb.ncb_command = NCBRESET
        bRet = Netbios(myNcb)
        myNcb.ncb_command = NCBASTAT
        myNcb.ncb_lana_num = 0
        myNcb.ncb_callname = sName
        myNcb.ncb_length = Len(myASTAT)
        pASTAT = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS Or HEAP_ZERO_MEMORY, myNcb.ncb_length)
        If pASTAT <> 0 Then
            myNcb.ncb_buffer = pASTAT
            bRet = Netbios(myNcb)
            If bRet = 0 Then
                CopyMemory myASTAT, myNcb.ncb_buffer, Len(myASTAT)
                GetMac = ToHex(myASTAT.adapt.adapter_address(0)) & ToHex(myASTAT.adapt.adapter_address(1)) & ToHex(myASTAT.adapt.adapter_address(2)) & ToHex(myASTAT.adapt.adapter_address(3)) & ToHex(myASTAT.adapt.adapter_address(4)) & ToHex(myASTAT.adapt.adapter_address(5))
                ' There is more information in the myASTAT.NameBuff structure
            Else
                GetMac = "Error number " & bRet
            End If
            HeapFree GetProcessHeap(), 0, pASTAT
        Else
            GetMac = "Error allocating memory"
        End If
    End Function

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width