vb.net and sockets bug?

  • Thread starter Thread starter Henning Krause [MVP - Exchange]
  • Start date Start date
H

Henning Krause [MVP - Exchange]

Hello,

have you bound your local socket to an explicit port?

Dim socket as Socket

socket = new Socket(...)

socket.Bind(new IPEndPoint(IPAddress.Any), port_number)

Best regards,
Henning Krause
 
Why does VB.NET UDP sockets send data on random ports?. If I set a simple
socket up to transmit a UDP packet on a port, look at the packet with a
sniffer, the actual packets source port and dest.port are diff. The packets
destination port is correct, but the packets source port it is actually sent
from is random. Why? How can I figure out the actual source port windows is
using, not what the vb.net socket is fake reporting?
Thanks BUC
 
Yes, I bind to a port, for example 9001, and 9001 is placed into the packet
as the destination port, but the source send port is in the 2000 range. This
appears to be a bug, and is easily reproducable with only a few lines of
code. Even example code from the MSDN. I tried the same code on XP or 2003
server platform with the same results.
BUC
 
Hello,

please post your code here.

Best regards,
Henning Krause
 
Dim UpdateIP As IPAddress
Dim packet(2) As Byte
Dim txSocket As Socket = New Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp)
'load some data of some sort
packet(0) = 1 : packet(0) = 1
UpdateIP = IPAddress.Parse("192.168.0.100")
txSocket = New Socket(AddressFamily.InterNetwork, SocketType.Dgram,
ProtocolType.Udp)
Dim txPLCEP As New IPEndPoint(UpdateIP, 9001)
txSocket.SendTo(packet, txPLCEP)
txSocket.Close()
txSocket = Nothing

'packet is transmitted to 192.168.0.100 with a source dest port of 9001 and
a source send port of 2039. Depending on the machine I test this code
on the source send port randomly changes around the 2000 range. verified
with 2 diff packet sniffers including W2k3 server net monitor.

Thanks..
N\BUC
 
Hello,

1. Why are you creating the sockets two times?

2. Add a txSocket.Bind(new IPEndPoint(IPAddress.Any), 1234)

This will bind the socket to the local port 1234, and should solve your
issue.

Best regards,
Henning Krause
 
Sorry about the double creation. Changing the bind to 1234 does bind PART of
the local port 1234. If I issue a sendto as in my code Sendto(...,1234), the
actual setup of the packet from vb.net shows a send source port of 2011 and
a send dest port of 1234. which is only halfway correct, as verified by
windows network monitor. This is def. a BUG.
I am trying to do something simple. I send to a remote machine(nonwindows)
with a simple UDP packet. I used the code to send 2 bytes of data on port
9001. The remote receives the data but transmits a packet back to me on the
REAL send source port the VB program sent it on which is NOT 9001, it looks
like a windows assigned port. In fact the MSDN says it if you dont assign
the SEND SOURCE PORT for the packet , it will assign a port in the
2000-65535 range. VB is only setting the dest port part of the packet, not
the source send port part of it. I you actually fired the code off and
lookup at it with a sniffer, this happens every time. I am very
frustrated.Since windows is assigning a random port, I cant use the bind to
figure out what port to listen on. Using a sniffer it is easy to see this
bug, using MSDN code or mine, Ive tried several examples from MSDN with same
results.
Any more ideas?
Thanks BUC
 
Back
Top