Avatar billede shadowdance Nybegynder
10. juni 2002 - 02:05 Der er 8 kommentarer og
1 løsning

Intelligent LAN-afskanning

1) Findes der en metode eller control der kan afskanne et lokalnetværk for computere, og returnere computernavne, fx "olescomputer" - Winsock bruger disse til at danne kontakt...

2) Ydermere, kan man få en oversigt over brugte og især ledige porte?

3) Kan én winsock-control vedligeholde kontakten med flere på samme tid, eller er man tvunget til at afbryde og oprette kontakt ved hver data-transmission?
Avatar billede cordack Nybegynder
10. juni 2002 - 02:26 #1
1) i dos kan du skrive "net view" for at se computere på dit lokalnet.

2) netstat (også i dos) viser hvilke porte der er i brug på din egen computer
Avatar billede shadowdance Nybegynder
10. juni 2002 - 02:48 #2
Det er faktisk brugbart. Problemet er bare, at det ikke hjælper mit program til selvstyring...men tak alligevel! Nu ved jeg ihvertfald hvilket portområde jeg skal holde mig til...
Avatar billede sjh Nybegynder
10. juni 2002 - 13:53 #3
Avatar billede shadowdance Nybegynder
10. juni 2002 - 16:39 #4
Idéen er god nok, jeg ville bare gerne holde mig til brug af controls. API kald er mere uoverskuelige, og så ved jeg ikke præcis hvad jeg laver. Findes der virkelig ikke en almindelig control, der giver adgang til afskanning af netværk???
Avatar billede sjh Nybegynder
10. juni 2002 - 17:23 #5
shadowdance >Du kan da bare lave den til en control
hvis du forstår.
Avatar billede itbjarne Nybegynder
10. juni 2002 - 23:45 #6
Er du interesseret i et VB program som kan scanne et adresseområde som du selv definerer v.h.a PING ?  Jeg mener at have noget liggende på min PC på arbejdet - kan først sende det til dig imorgen.
Når du så har en liste over de adresser som har svaret, kan du anvende nslookup (hvis adresserne er registreret i DNS og du kan udføre nslookup på din PC), så har du hostnavnene.
Til dit spørgsmål 2: Hvis jeg tror du mener hvad du mener, så er du ude efter af finde ud af hvad de enkelte porte bliver brugt til (??)
Prøv og se om http://www.portdetective.com/ er interessant for dig. I forbindelse med standarder, skal du nok kigge på www.ieee.com eller noget i den retning - netværk er beskrevet i IEEE 802.x som er drevet af standardiseringorganisationen (langt ord) IEEE.
Vedr. 3: Der skelnes mellem UDP og TCP forbindelser. Den ene er en "forbindelsesorienteret" protokol, den anden er "forbindelsesløs" (kan ikke lige huske hvad er hvad). Ved den forbindelsesorienterede protokol skal du først have etableret en forbindelse mellem to computere (som hvis du foretager en tlf-opringning) før dataudveksling kan finde sted. Ved den "forbindelsesløse" protokol kaster du blot data ud i den blå luft og håber på at den computer som du ønsker at sende data til også lytter efter data på samme tidspunkt. Så svaret på 3) er "ja" - hvis du anvender den "forbindelsesløse" protokol, kan du kommunikere med flere maskiner på een gang, men du er aldrig helt sikker på at den ønskede modtager lytter når der bliver sendt til den. Dette kan du så sikre dig ved selv at lave noget software handshaking.
Avatar billede eflow Nybegynder
11. juni 2002 - 19:01 #7
her: http://www.mvps.org/vbnet/index.html?code/network/netserverenumver.htm
du skal bare lave det program, du kan jo selv "skille det ad" hvis du vil kode vidre på de funktioner der er, men programmet tjekker os og computer navn på de computere du er i netværk med ....
Avatar billede itbjarne Nybegynder
18. juni 2002 - 11:03 #8
Her så koden som jeg lovede til at pinge en adresse. Hvis du ønsker at pinge et bestemt adresseområde, kan du selv lave nogle tællere som tæller op. Husk at den 4. oktet må ikke være 0 (f.eks. 10.0.10.0) eller 255 (f.eks. 10.0.10.255). Disse bruges til hhv netværket og til broadcast.
Koden herunder er baseret på at du har flg.:
1. En form hvor du kopierer nedenstående kode ind i kodevinduet.
2. En knap: navn = cmdStartPing, caption = Start Ping
3. En knap: navn = cmdClose, caption = Luk
4. Et tekstfelt: navn = txtIPAddress (her indtaster du IP adressen som skal pinges)
5. Et tekstfelt: navn = txtResult, egenskab multiline = TRUE (her vises resultatet i millisekunder af en ping)
That's it !
Når du så har fundet en adresse som der bliver svaret på, kan du gå igang med at undersøge hvilke porte der er aktive for hvilke services, f.eks. mail, FTP, etc.

Private Const IP_SUCCESS = 0
Private Const IP_BUF_TOO_SMALL = (11000 + 1)
Private Const IP_DEST_NET_UNREACHABLE = (11000 + 2)
Private Const IP_DEST_HOST_UNREACHABLE = (11000 + 3)
Private Const IP_DEST_PROT_UNREACHABLE = (11000 + 4)
Private Const IP_DEST_PORT_UNREACHABLE = (11000 + 5)
Private Const IP_NO_RESOURCES = (11000 + 6)
Private Const IP_BAD_OPTION = (11000 + 7)
Private Const IP_HW_ERROR = (11000 + 8)
Private Const IP_PACKET_TOO_BIG = (11000 + 9)
Private Const IP_REQ_TIMED_OUT = (11000 + 10)
Private Const IP_BAD_REQ = (11000 + 11)
Private Const IP_BAD_ROUTE = (11000 + 12)
Private Const IP_TTL_EXPIRED_TRANSIT = (11000 + 13)
Private Const IP_TTL_EXPIRED_REASSEM = (11000 + 14)
Private Const IP_PARAM_PROBLEM = (11000 + 15)
Private Const IP_SOURCE_QUENCH = (11000 + 16)
Private Const IP_OPTION_TOO_BIG = (11000 + 17)
Private Const IP_BAD_DESTINATION = (11000 + 18)
'
'  The next group are status codes passed up on status indications to
'  transport layer protocols.
'
Private Const IP_ADDR_DELETED = (11000 + 19)
Private Const IP_SPEC_MTU_CHANGE = (11000 + 20)
Private Const IP_MTU_CHANGE = (11000 + 21)
Private Const IP_UNLOAD = (11000 + 22)
Private Const IP_ADDR_ADDED = (11000 + 23)
Private Const IP_GENERAL_FAILURE = (11000 + 50)
Private Const MAX_IP_STATUS = 11000 + 50
Private Const IP_PENDING = (11000 + 255)

'  option information for network ping, we don't implement these here as this is
'  a simple sample (simon says).
Private Type ip_option_information
    Ttl            As Byte    'Time To Live
    Tos            As Byte    'Type Of Service
    Flags          As Byte    'IP header flags
    OptionsSize    As Byte    'Size in bytes of options data
    OptionsData    As Long    'Pointer to options data
End Type

'  structure that is returned from the ping to give status and error information
Private Type icmp_echo_reply
    Address        As Long            'Replying address
    Status          As Long            'Reply IP_STATUS, values as defined above
    RoundTripTime  As Long            'RTT in milliseconds
    DataSize        As Integer          'Reply data size in bytes
    Reserved        As Integer          'Reserved for system use
    DataPointer    As Long            'Pointer to the reply data
    Options        As ip_option_information    'Reply options
    Data            As String * 250    'Reply data which should be a copy of the string sent, NULL terminated
                                        ' this field length should be large enough to contain the string sent
End Type

Private Type ip_bytes
    Byte1          As String
    Byte2          As String
    Byte3          As String
    Byte4          As String
End Type
   
'  declares for function to be used from icmp.dll
Private Declare Function IcmpCreateFile Lib "icmp.dll" () As Long
Private Declare Function IcmpCloseHandle Lib "icmp.dll" (ByVal IcmpHandle As Long) As Long
Private Declare Function IcmpSendEcho Lib "icmp.dll" (ByVal IcmpHandle As Long, _
                                                    ByVal DestinationAddress As Long, _
                                                    ByVal RequestData As String, _
                                                    ByVal RequestSize As Integer, _
                                                    ByVal RequestOptions As Long, _
                                                    ReplyBuffer As icmp_echo_reply, _
                                                    ByVal ReplySize As Long, _
                                                    ByVal Timeout As Long) As Long

Private Const PING_TIMEOUT = 10000      ' number of milliseconds to wait for the reply

Public Sub PingAddress(CounterAddress As String)
Dim hFile      As Long            ' handle for the icmp port opened
Dim lRet        As Long            ' hold return values as required
Dim strMessage  As String
Dim pReturn    As icmp_echo_reply
Dim iVal        As Integer
Dim lPingRet    As Long
lIPAddress = ConvertIPAddressToLong(CheckIPAddress(CounterAddress))
   
'  open up a file handle for doing the ping
hFile = IcmpCreateFile()

'  Call the function that actually does the ping. It is a blocking call so we
'  don't get control back until it completes.
lRet = IcmpSendEcho(hFile, lIPAddress, strMessage, Len(strMessage), 0, pReturn, Len(pReturn), PING_TIMEOUT)

If lRet = 0 Then
' the ping failed for some reason, hopefully the error is in the return buffer
Rem Update Flensburg Router status label
    varPingRespTime = 1000
Else
    ' the ping succeeded, .Status will be 0, .RoundTripTime is the time in ms for
    '  the ping to complete, .Data is the data returned (NULL terminated), .Address
    '  is the Ip address that actually replied, .DataSize is the size of the string in
    '  .Data
    varPingRespTime = pReturn.RoundTripTime
    If txtResult = "" Then
        txtResult = CStr(varPingRespTime) + " ms"
    Else
        txtResult = txtResult + vbCrLf + CStr(varPingRespTime) + " ms"
    End If
End If    '  close the file handle that was used
lRet = IcmpCloseHandle(hFile)
End Sub
Private Function CheckIPAddress(strAddress As String) As ip_bytes
Dim strTemp            As String
Dim iValCount          As Integer
Dim CheckedIP          As ip_bytes
Dim lDotValues(1 To 4) As String
   
' set up the initial storage and counter
strTemp = strAddress
iValCount = 0

' keep going while we still have dots in the string
While InStr(strTemp, ".") > 0
    iValCount = iValCount + 1  ' count the number
    lDotValues(iValCount) = Mid(strTemp, 1, InStr(strTemp, ".") - 1)    ' pick it off and convert it
    strTemp = Mid(strTemp, InStr(strTemp, ".") + 1) ' chop off the number and the dot
Wend
   
' the string only has the last number in it now
iValCount = iValCount + 1
lDotValues(iValCount) = strTemp

' if we didn't get four pieces then the IP address is no good
If iValCount <> 4 Then
    MsgBox "IP Address contains errors - please check!"
    Exit Function
Else
    CheckedIP.Byte1 = lDotValues(1)
    CheckedIP.Byte2 = lDotValues(2)
    CheckedIP.Byte3 = lDotValues(3)
    CheckedIP.Byte4 = lDotValues(4)
End If
CheckIPAddress = CheckedIP
End Function

Private Function ConvertIPAddressToLong(lDotValue As ip_bytes) As Long
Dim lAddress            As Long
'  take the four value, hex them, pad to 2 digits, make a hex
'  string and then convert the whole mess to a long for returning
lAddress = Val("&H" & Right("00" & Hex(lDotValue.Byte4), 2) & _
            Right("00" & Hex(lDotValue.Byte3), 2) & _
            Right("00" & Hex(lDotValue.Byte2), 2) & _
            Right("00" & Hex(lDotValue.Byte1), 2))
'  set the return value
ConvertIPAddressToLong = lAddress
End Function

Private Sub cmdClose_Click()
Unload Me
End Sub

Private Sub cmdStartPing_Click()
PingAddress txtIPAddress
End Sub
Avatar billede itbjarne Nybegynder
18. juni 2002 - 11:03 #9
Ovenstående var mit svar.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester