[Semi-OT] Dar prioridad a unas ip en la configuracion de re dsobre otras

09/10/2003 - 10:34 por GuRRiATo | Informe spam
Hola a todos.

Vereis, estoy desarrollando un programa en Visual Basic, que lee datos que
le llegan a una de las ips de mi ordenador.

Tengo varias ips y quiero que lea los datos que le llegan a una en concreto.
El visual basic abre un winsock en la ip que le sale de los cojones y no se
como elegirla (empiezo a pensar que no se debe poder).

Asi que he pensado que igual coge la que esta primero o la mas prioritaria
para windows.

¿Como puedo poner que una ip tenga prioridad sobre las otras para el
windows?
¿se puede hacer?

Muchas gracias y saludos a todos

Miguel Angel

Preguntas similare

Leer las respuestas

#1 Marc S. [MS MVP]
09/10/2003 - 13:51 | Informe spam
Pregunta en el grupo de Visual Basic, por favor.


Saludos

Marc
MS MVP Windows - Shell/User
NOTA. Por favor, las preguntas y comentarios en los grupos, así nos beneficiamos todos.

Reglas de conducta de los grupos de noticias: http://support.microsoft.com/defaul...newsreglas

"GuRRiATo" escribió en el mensaje news:749hb.194019$
Hola a todos.

Vereis, estoy desarrollando un programa en Visual Basic, que lee datos que
le llegan a una de las ips de mi ordenador.

Tengo varias ips y quiero que lea los datos que le llegan a una en concreto.
El visual basic abre un winsock en la ip que le sale de los cojones y no se
como elegirla (empiezo a pensar que no se debe poder).

Asi que he pensado que igual coge la que esta primero o la mas prioritaria
para windows.

¿Como puedo poner que una ip tenga prioridad sobre las otras para el
windows?
¿se puede hacer?

Muchas gracias y saludos a todos

Miguel Angel


Respuesta Responder a este mensaje
#2 GuRRiATo
09/10/2003 - 15:17 | Informe spam
Hola Marc

Si lees atentamente el final de la exposicion, lo que pregunto es como se le
puede decir a windows que direcciones de ip de una tarjeta de red tiene que
mirar antes que las otras. Como se puede indicar al windows esto si es que
se puede indicar.

Mi pregunta no tiene nada que ver con el visual basic, solo he hecho el
comentario como introduccion y para que se entienda el porque de la
pregunta. De hecho ya se resolverlo con el visual basic, pero me gustaria
saber que criterio tiene el windows (si mira el orden de algun archivo o del
registro) para asignar prioridades a las distinta ips de una tarjeta de red.

Lamento la confusion, ya puse en el asunto que era semi-OT, pero lo estoy
preguntando nada tiene que ver con el visual basic.

Muchas gracias y un cordial saludo. :-)

Miguel Angel Gomez

"Marc S. [MS MVP]" escribió en el mensaje
news:%
Pregunta en el grupo de Visual Basic, por favor.


Saludos

Marc
MS MVP Windows - Shell/User
NOTA. Por favor, las preguntas y comentarios en los grupos, así nos
beneficiamos todos.

Reglas de conducta de los grupos de noticias:
http://support.microsoft.com/defaul...newsreglas

"GuRRiATo" escribió en el mensaje
news:749hb.194019$
Hola a todos.

Vereis, estoy desarrollando un programa en Visual Basic, que lee datos que
le llegan a una de las ips de mi ordenador.

Tengo varias ips y quiero que lea los datos que le llegan a una en


concreto.
El visual basic abre un winsock en la ip que le sale de los cojones y no


se
como elegirla (empiezo a pensar que no se debe poder).

Asi que he pensado que igual coge la que esta primero o la mas prioritaria
para windows.

¿Como puedo poner que una ip tenga prioridad sobre las otras para el
windows?
¿se puede hacer?

Muchas gracias y saludos a todos

Miguel Angel


Respuesta Responder a este mensaje
#3 Marc S. [MS MVP]
09/10/2003 - 15:53 | Informe spam
El visual basic abre un winsock en la ip que le sale de los cojones y no se



Pues eso, que quizás mediante la API de Windows con el WSAStartup (Declare Function WSAStartup Lib "WSOCK32" (ByVal wVersionRequired As Long, lpWSADATA As WSAData) As Long) y adaptando esto [pegado debajo] te sirva.

'In a form

Private Sub Form_Load()

'KPD-Team 1999

'URL: http://www.allapi.net/

'E-Mail:

MsgBox "IP-address: " + GetIPAddress

End Sub

'In a module

Public Const MIN_SOCKETS_REQD As Long = 1

Public Const WS_VERSION_REQD As Long = &H101

Public Const WS_VERSION_MAJOR As Long = WS_VERSION_REQD \ &H100 And &HFF&

Public Const WS_VERSION_MINOR As Long = WS_VERSION_REQD And &HFF&

Public Const SOCKET_ERROR As Long = -1

Public Const WSADESCRIPTION_LEN = 257

Public Const WSASYS_STATUS_LEN = 129

Public Const MAX_WSADescription = 256

Public Const MAX_WSASYSStatus = 128

Public Type WSAData

wVersion As Integer

wHighVersion As Integer

szDescription(0 To MAX_WSADescription) As Byte

szSystemStatus(0 To MAX_WSASYSStatus) As Byte

wMaxSockets As Integer

wMaxUDPDG As Integer

dwVendorInfo As Long

End Type

Type WSADataInfo

wVersion As Integer

wHighVersion As Integer

szDescription As String * WSADESCRIPTION_LEN

szSystemStatus As String * WSASYS_STATUS_LEN

iMaxSockets As Integer

iMaxUdpDg As Integer

lpVendorInfo As String

End Type

Public Type HOSTENT

hName As Long

hAliases As Long

hAddrType As Integer

hLen As Integer

hAddrList As Long

End Type

Declare Function WSAStartupInfo Lib "WSOCK32" Alias "WSAStartup" (ByVal wVersionRequested As Integer, lpWSADATA As WSADataInfo) As Long

Declare Function WSACleanup Lib "WSOCK32" () As Long

Declare Function WSAGetLastError Lib "WSOCK32" () As Long

Declare Function WSAStartup Lib "WSOCK32" (ByVal wVersionRequired As Long, lpWSADATA As WSAData) As Long

Declare Function gethostname Lib "WSOCK32" (ByVal szHost As String, ByVal dwHostLen As Long) As Long

Declare Function gethostbyname Lib "WSOCK32" (ByVal szHost As String) As Long

Declare Sub CopyMemoryIP Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long)

Public Function GetIPAddress() As String

Dim sHostName As String * 256

Dim lpHost As Long

Dim HOST As HOSTENT

Dim dwIPAddr As Long

Dim tmpIPAddr() As Byte

Dim I As Integer

Dim sIPAddr As String

If Not SocketsInitialize() Then

GetIPAddress = ""

Exit Function

End If

If gethostname(sHostName, 256) = SOCKET_ERROR Then

GetIPAddress = ""

MsgBox "Windows Sockets error " & Str$(WSAGetLastError()) & " has occurred. Unable to successfully get Host Name."

SocketsCleanup

Exit Function

End If

sHostName = Trim$(sHostName)

lpHost = gethostbyname(sHostName)

If lpHost = 0 Then

GetIPAddress = ""

MsgBox "Windows Sockets are not responding. " & "Unable to successfully get Host Name."

SocketsCleanup

Exit Function

End If

CopyMemoryIP HOST, lpHost, Len(HOST)

CopyMemoryIP dwIPAddr, HOST.hAddrList, 4

ReDim tmpIPAddr(1 To HOST.hLen)

CopyMemoryIP tmpIPAddr(1), dwIPAddr, HOST.hLen

For I = 1 To HOST.hLen

sIPAddr = sIPAddr & tmpIPAddr(I) & "."

Next

GetIPAddress = Mid$(sIPAddr, 1, Len(sIPAddr) - 1)

SocketsCleanup

End Function

Public Function GetIPHostName() As String

Dim sHostName As String * 256

If Not SocketsInitialize() Then

GetIPHostName = ""

Exit Function

End If

If gethostname(sHostName, 256) = SOCKET_ERROR Then

GetIPHostName = ""

MsgBox "Windows Sockets error " & Str$(WSAGetLastError()) & " has occurred. Unable to successfully get Host Name."

SocketsCleanup

Exit Function

End If

GetIPHostName = Left$(sHostName, InStr(sHostName, Chr(0)) - 1)

SocketsCleanup

End Function

Public Function HiByte(ByVal wParam As Integer)

HiByte = wParam \ &H100 And &HFF&

End Function

Public Function LoByte(ByVal wParam As Integer)

LoByte = wParam And &HFF&

End Function

Public Sub SocketsCleanup()

If WSACleanup() <> ERROR_SUCCESS Then

MsgBox "Socket error occurred in Cleanup."

End If

End Sub

Public Function SocketsInitialize() As Boolean

Dim WSAD As WSAData

Dim sLoByte As String

Dim sHiByte As String

If WSAStartup(WS_VERSION_REQD, WSAD) <> ERROR_SUCCESS Then

MsgBox "The 32-bit Windows Socket is not responding."

SocketsInitialize = False

Exit Function

End If

If WSAD.wMaxSockets < MIN_SOCKETS_REQD Then

MsgBox "This application requires a minimum of " & CStr(MIN_SOCKETS_REQD) & " supported sockets."

SocketsInitialize = False

Exit Function

End If

If LoByte(WSAD.wVersion) < WS_VERSION_MAJOR Or (LoByte(WSAD.wVersion) = WS_VERSION_MAJOR And HiByte(WSAD.wVersion) < WS_VERSION_MINOR) Then

sHiByte = CStr(HiByte(WSAD.wVersion))

sLoByte = CStr(LoByte(WSAD.wVersion))

MsgBox "Sockets version " & sLoByte & "." & sHiByte & " is not supported by 32-bit Windows Sockets."

SocketsInitialize = False

Exit Function

End If

'must be OK, so lets do it

SocketsInitialize = True

End Function



Saludos

Marc
MS MVP Windows - Shell/User
NOTA. Por favor, las preguntas y comentarios en los grupos, así nos beneficiamos todos.

Reglas de conducta de los grupos de noticias: http://support.microsoft.com/defaul...newsreglas

"GuRRiATo" escribió en el mensaje news:bm3mus$p8i$
Hola Marc

Si lees atentamente el final de la exposicion, lo que pregunto es como se le
puede decir a windows que direcciones de ip de una tarjeta de red tiene que
mirar antes que las otras. Como se puede indicar al windows esto si es que
se puede indicar.

Mi pregunta no tiene nada que ver con el visual basic, solo he hecho el
comentario como introduccion y para que se entienda el porque de la
pregunta. De hecho ya se resolverlo con el visual basic, pero me gustaria
saber que criterio tiene el windows (si mira el orden de algun archivo o del
registro) para asignar prioridades a las distinta ips de una tarjeta de red.

Lamento la confusion, ya puse en el asunto que era semi-OT, pero lo estoy
preguntando nada tiene que ver con el visual basic.

Muchas gracias y un cordial saludo. :-)

Miguel Angel Gomez

"Marc S. [MS MVP]" escribió en el mensaje
news:%
Pregunta en el grupo de Visual Basic, por favor.


Saludos

Marc
MS MVP Windows - Shell/User
NOTA. Por favor, las preguntas y comentarios en los grupos, así nos
beneficiamos todos.

Reglas de conducta de los grupos de noticias:
http://support.microsoft.com/defaul...newsreglas

"GuRRiATo" escribió en el mensaje
news:749hb.194019$
> Hola a todos.
>
> Vereis, estoy desarrollando un programa en Visual Basic, que lee datos que
> le llegan a una de las ips de mi ordenador.
>
> Tengo varias ips y quiero que lea los datos que le llegan a una en
concreto.
> El visual basic abre un winsock en la ip que le sale de los cojones y no
se
> como elegirla (empiezo a pensar que no se debe poder).
>
> Asi que he pensado que igual coge la que esta primero o la mas prioritaria
> para windows.
>
> ¿Como puedo poner que una ip tenga prioridad sobre las otras para el
> windows?
> ¿se puede hacer?
>
> Muchas gracias y saludos a todos
>
> Miguel Angel
>
>


Respuesta Responder a este mensaje
#4 GuRRiATo
10/10/2003 - 08:56 | Informe spam
Hola Marc

Muchas gracias por tu respuesta.

De todas formas, es una respuesta de visual basic, y yo esperaba algo mas
parecido a

...Pues cuando cualquier programa (este hecho en visual basic, C o lo que
sea) abre un winsock y le hace una peticion a windows preguntandole la ip,
pues windows va a mirar en el registro en tal sitio y le responde la primera
que encuentra, o responde las ips en tal orden...

...o bien... existe un archivo llamado LMHOSTloquesea (ya se o creo saber
que lmhosts es para resolucion de nombres si no me equivoco) donde hay una
lista con las ips que devuelve a las peticiones de un programa...

Es decir queria saber algo mas sobre como funciona windows (en este caso el
XP).

De todas formas y volviendo al visual basic, y por si le puede servir de
utilidad a alguien que nos este leyendo, existe una forma mucho mas sencilla
de trabajar con una ip determinada que es usando el metodo Bind del objeto
winsock, antes de usar el metodo Listen, de la siguiente forma:

Winsock1.Bind 4000, "16.9.33.51"
Winsock1.Listen

Esto lo he averiguado durante el hilo nuestra conversacion.

De todas formas no me cansare de repetir que muchas gracias por el interes
que has demostrado ;-)

Un cordial saludo.

Miguel Angel Gomez

"Marc S. [MS MVP]" escribió en el mensaje
news:
El visual basic abre un winsock en la ip que le sale de los cojones y no


se

Pues eso, que quizás mediante la API de Windows con el WSAStartup (Declare
Function WSAStartup Lib "WSOCK32" (ByVal wVersionRequired As Long, lpWSADATA
As WSAData) As Long) y adaptando esto [pegado debajo] te sirva.

'In a form

Private Sub Form_Load()

'KPD-Team 1999

'URL: http://www.allapi.net/

'E-Mail:

MsgBox "IP-address: " + GetIPAddress

End Sub

'In a module

Public Const MIN_SOCKETS_REQD As Long = 1

Public Const WS_VERSION_REQD As Long = &H101

Public Const WS_VERSION_MAJOR As Long = WS_VERSION_REQD \ &H100 And &HFF&

Public Const WS_VERSION_MINOR As Long = WS_VERSION_REQD And &HFF&

Public Const SOCKET_ERROR As Long = -1

Public Const WSADESCRIPTION_LEN = 257

Public Const WSASYS_STATUS_LEN = 129

Public Const MAX_WSADescription = 256

Public Const MAX_WSASYSStatus = 128

Public Type WSAData

wVersion As Integer

wHighVersion As Integer

szDescription(0 To MAX_WSADescription) As Byte

szSystemStatus(0 To MAX_WSASYSStatus) As Byte

wMaxSockets As Integer

wMaxUDPDG As Integer

dwVendorInfo As Long

End Type

Type WSADataInfo

wVersion As Integer

wHighVersion As Integer

szDescription As String * WSADESCRIPTION_LEN

szSystemStatus As String * WSASYS_STATUS_LEN

iMaxSockets As Integer

iMaxUdpDg As Integer

lpVendorInfo As String

End Type

Public Type HOSTENT

hName As Long

hAliases As Long

hAddrType As Integer

hLen As Integer

hAddrList As Long

End Type

Declare Function WSAStartupInfo Lib "WSOCK32" Alias "WSAStartup" (ByVal
wVersionRequested As Integer, lpWSADATA As WSADataInfo) As Long

Declare Function WSACleanup Lib "WSOCK32" () As Long

Declare Function WSAGetLastError Lib "WSOCK32" () As Long

Declare Function WSAStartup Lib "WSOCK32" (ByVal wVersionRequired As Long,
lpWSADATA As WSAData) As Long

Declare Function gethostname Lib "WSOCK32" (ByVal szHost As String, ByVal
dwHostLen As Long) As Long

Declare Function gethostbyname Lib "WSOCK32" (ByVal szHost As String) As
Long

Declare Sub CopyMemoryIP Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As
Any, ByVal hpvSource As Long, ByVal cbCopy As Long)

Public Function GetIPAddress() As String

Dim sHostName As String * 256

Dim lpHost As Long

Dim HOST As HOSTENT

Dim dwIPAddr As Long

Dim tmpIPAddr() As Byte

Dim I As Integer

Dim sIPAddr As String

If Not SocketsInitialize() Then

GetIPAddress = ""

Exit Function

End If

If gethostname(sHostName, 256) = SOCKET_ERROR Then

GetIPAddress = ""

MsgBox "Windows Sockets error " & Str$(WSAGetLastError()) & " has occurred.
Unable to successfully get Host Name."

SocketsCleanup

Exit Function

End If

sHostName = Trim$(sHostName)

lpHost = gethostbyname(sHostName)

If lpHost = 0 Then

GetIPAddress = ""

MsgBox "Windows Sockets are not responding. " & "Unable to successfully get
Host Name."

SocketsCleanup

Exit Function

End If

CopyMemoryIP HOST, lpHost, Len(HOST)

CopyMemoryIP dwIPAddr, HOST.hAddrList, 4

ReDim tmpIPAddr(1 To HOST.hLen)

CopyMemoryIP tmpIPAddr(1), dwIPAddr, HOST.hLen

For I = 1 To HOST.hLen

sIPAddr = sIPAddr & tmpIPAddr(I) & "."

Next

GetIPAddress = Mid$(sIPAddr, 1, Len(sIPAddr) - 1)

SocketsCleanup

End Function

Public Function GetIPHostName() As String

Dim sHostName As String * 256

If Not SocketsInitialize() Then

GetIPHostName = ""

Exit Function

End If

If gethostname(sHostName, 256) = SOCKET_ERROR Then

GetIPHostName = ""

MsgBox "Windows Sockets error " & Str$(WSAGetLastError()) & " has occurred.
Unable to successfully get Host Name."

SocketsCleanup

Exit Function

End If

GetIPHostName = Left$(sHostName, InStr(sHostName, Chr(0)) - 1)

SocketsCleanup

End Function

Public Function HiByte(ByVal wParam As Integer)

HiByte = wParam \ &H100 And &HFF&

End Function

Public Function LoByte(ByVal wParam As Integer)

LoByte = wParam And &HFF&

End Function

Public Sub SocketsCleanup()

If WSACleanup() <> ERROR_SUCCESS Then

MsgBox "Socket error occurred in Cleanup."

End If

End Sub

Public Function SocketsInitialize() As Boolean

Dim WSAD As WSAData

Dim sLoByte As String

Dim sHiByte As String

If WSAStartup(WS_VERSION_REQD, WSAD) <> ERROR_SUCCESS Then

MsgBox "The 32-bit Windows Socket is not responding."

SocketsInitialize = False

Exit Function

End If

If WSAD.wMaxSockets < MIN_SOCKETS_REQD Then

MsgBox "This application requires a minimum of " & CStr(MIN_SOCKETS_REQD) &
" supported sockets."

SocketsInitialize = False

Exit Function

End If

If LoByte(WSAD.wVersion) < WS_VERSION_MAJOR Or (LoByte(WSAD.wVersion) WS_VERSION_MAJOR And HiByte(WSAD.wVersion) < WS_VERSION_MINOR) Then

sHiByte = CStr(HiByte(WSAD.wVersion))

sLoByte = CStr(LoByte(WSAD.wVersion))

MsgBox "Sockets version " & sLoByte & "." & sHiByte & " is not supported by
32-bit Windows Sockets."

SocketsInitialize = False

Exit Function

End If

'must be OK, so lets do it

SocketsInitialize = True

End Function



Saludos

Marc
MS MVP Windows - Shell/User
NOTA. Por favor, las preguntas y comentarios en los grupos, así nos
beneficiamos todos.

Reglas de conducta de los grupos de noticias:
http://support.microsoft.com/defaul...newsreglas

"GuRRiATo" escribió en el mensaje
news:bm3mus$p8i$
Hola Marc

Si lees atentamente el final de la exposicion, lo que pregunto es como se


le
puede decir a windows que direcciones de ip de una tarjeta de red tiene


que
mirar antes que las otras. Como se puede indicar al windows esto si es


que
se puede indicar.

Mi pregunta no tiene nada que ver con el visual basic, solo he hecho el
comentario como introduccion y para que se entienda el porque de la
pregunta. De hecho ya se resolverlo con el visual basic, pero me gustaria
saber que criterio tiene el windows (si mira el orden de algun archivo o


del
registro) para asignar prioridades a las distinta ips de una tarjeta de


red.

Lamento la confusion, ya puse en el asunto que era semi-OT, pero lo estoy
preguntando nada tiene que ver con el visual basic.

Muchas gracias y un cordial saludo. :-)

Miguel Angel Gomez

"Marc S. [MS MVP]" escribió en el mensaje
news:%
Pregunta en el grupo de Visual Basic, por favor.


Saludos

Marc
MS MVP Windows - Shell/User
NOTA. Por favor, las preguntas y comentarios en los grupos, así nos
beneficiamos todos.

Reglas de conducta de los grupos de noticias:
http://support.microsoft.com/defaul...newsreglas

"GuRRiATo" escribió en el mensaje
news:749hb.194019$
> Hola a todos.
>
> Vereis, estoy desarrollando un programa en Visual Basic, que lee datos


que
> le llegan a una de las ips de mi ordenador.
>
> Tengo varias ips y quiero que lea los datos que le llegan a una en
concreto.
> El visual basic abre un winsock en la ip que le sale de los cojones y no
se
> como elegirla (empiezo a pensar que no se debe poder).
>
> Asi que he pensado que igual coge la que esta primero o la mas


prioritaria
> para windows.
>
> ¿Como puedo poner que una ip tenga prioridad sobre las otras para el
> windows?
> ¿se puede hacer?
>
> Muchas gracias y saludos a todos
>
> Miguel Angel
>
>


Respuesta Responder a este mensaje
#5 Tako
10/10/2003 - 09:31 | Informe spam
"GuRRiATo" wrote in message
news:749hb.194019$
Hola a todos.

Vereis, estoy desarrollando un programa en Visual Basic, que lee datos que
le llegan a una de las ips de mi ordenador.

Tengo varias ips y quiero que lea los datos que le llegan a una en


concreto.
El visual basic abre un winsock en la ip que le sale de los cojones y no


se
como elegirla (empiezo a pensar que no se debe poder).

Asi que he pensado que igual coge la que esta primero o la mas prioritaria
para windows.




El control Winsock dispone de una propiedad llamada Bind que te permite
especificar en que puerto y dirección escucha. No suele estar mal leerse la
documentación de los cojones.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida