Hi Ruby communauty. I am trying to broadcast a message using UDPSocket
on destination port 10000. My code is:
client = UDPSocket.new
client.connect Socket.gethostname, 10000
client.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, true)
client.send data, 0
But my packet is not a broadcast, its address is the same as my host:
192.168.0.101
In order to do so on the external interface of my system (named en0), I
had remplaced this:
client.connect Socket.gethostname, 10000
by this:
client.connect "192.168.0.255", 10000
And now this is working. But is there a way to get automatically the
"192.168.0.255" address thanks to a Ruby method? I know I can get my IP
with IPSocket.getaddress(Socket.gethostname) but I don't see any way to
gets its broadcast address.
Thanks
···
--
Posted via http://www.ruby-forum.com/.
The simplest way to do it is to use a regex to change the last term in the quad:
IPSocket.getaddress(Socket.gethostname).gsub!(/.\d{1,3}$/, '.255')
Ellie
Eleanor McHugh
Games With Brains
http://slides.games-with-brains.net
···
On 28 Feb 2009, at 16:20, Sai Hl wrote:
Hi Ruby communauty. I am trying to broadcast a message using UDPSocket
on destination port 10000. My code is:
client = UDPSocket.new
client.connect Socket.gethostname, 10000
client.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, true)
client.send data, 0
But my packet is not a broadcast, its address is the same as my host:
192.168.0.101
In order to do so on the external interface of my system (named en0), I
had remplaced this:
client.connect Socket.gethostname, 10000
by this:
client.connect "192.168.0.255", 10000
And now this is working. But is there a way to get automatically the
"192.168.0.255" address thanks to a Ruby method? I know I can get my IP
with IPSocket.getaddress(Socket.gethostname) but I don't see any way to
gets its broadcast address.
Thanks
----
raise ArgumentError unless @reality.responds_to? :reason
Simple but not necessarily correct
<http://learn-networking.com/network-design/how-a-broadcast-address-works>
FWIW,
···
On Sat, Feb 28, 2009 at 11:12 AM, Eleanor McHugh <eleanor@games-with-brains.com> wrote:
... But is there a way to get automatically the
"192.168.0.255" address thanks to a Ruby method? I know I can get my IP
with IPSocket.getaddress(Socket.gethostname) but I don't see any way to
gets its broadcast address.
The simplest way to do it is to use a regex to change the last term in the
quad:
IPSocket.getaddress(Socket.gethostname).gsub!(/.\d{1,3}$/, '.255')
--
Hassan Schroeder ------------------------ hassan.schroeder@gmail.com
True, but I'm not sure the general case is so easy on the eye ;p
subnet_mask = [ 255, 255, 255, 0 ]
IPSocket.getaddress(Socket.gethostname).split('.').zip(subnet_mask).collect { |(i, m)| ((~m) & 255) | i.to_i }.join(".")
Ellie
Eleanor McHugh
Games With Brains
http://slides.games-with-brains.net
···
On 28 Feb 2009, at 22:49, Hassan Schroeder wrote:
On Sat, Feb 28, 2009 at 11:12 AM, Eleanor McHugh > <eleanor@games-with-brains.com> wrote:
... But is there a way to get automatically the
"192.168.0.255" address thanks to a Ruby method? I know I can get my IP
with IPSocket.getaddress(Socket.gethostname) but I don't see any way to
gets its broadcast address.
The simplest way to do it is to use a regex to change the last term in the
quad:
IPSocket.getaddress(Socket.gethostname).gsub!(/.\d{1,3}$/, '.255')
Simple but not necessarily correct
<http://learn-networking.com/network-design/how-a-broadcast-address-works>
----
raise ArgumentError unless @reality.responds_to? :reason
Brian Candler wrote:
This is messier than it should be, but:
require 'ipaddr'
n = IPAddr.new("192.168.0.101/24")
p n | (~n.instance_variable_get(:@mask_addr) & IPAddr::IN4MASK)
Or maybe you could just broadcast to the all-ones address
(255.255.255.255)
Yes, I had use the broadcast address
Finaly it's simple and efficient. But I think I will try your first
solution after to.
Thanks
···
--
Posted via http://www.ruby-forum.com/\.