Hello all.

I have been trying to write a ARP packet injector script for Ruby
and did quite a bit of research on how to construct ARP Reply datagrams 
and what not, and now that I think I have an idea how to construct them 
but also I'd like to transmit them to a host.

Courtesy of bit-struct I am able to craft and fill in the headers of an 
IPv4 datagram with ease, but transmitting this information is not so 
easy. What I'd like to know is is there some specific syntax using 
Socket#new for just transmitting packets not to any specific TCP port?, 
this is a snippet from the script:

------------------------------------------------------------------------------
class IP < BitStruct
          unsigned    :ip_v,     4,     "Version"
          unsigned    :ip_hl,    4,     "Header length"
          unsigned    :ip_tos,   8,     "TOS"
          unsigned    :ip_len,  16,     "Length"
          unsigned    :ip_id,   16,     "ID"
          unsigned    :ip_off,  16,     "Frag offset"
          unsigned    :ip_ttl,   8,     "TTL"
          unsigned    :ip_p,     8,     "Protocol"
          unsigned    :ip_sum,  16,     "Checksum"
          octets      :ip_src,  32,     "Source addr"
          octets      :ip_dst,  32,     "Dest addr"
          rest        :body,            "Body of message"

          note "     rest is application defined message body"

          initial_value.ip_v    = 4
          initial_value.ip_hl   = 5
end

def mk_dgram(src_ip,dst_ip,src_h,dst_h)
        arp_msg = ['1', '0x800', '6', '4', '2', src_h, src_ip, dst_h, 
dst_ip]

        ip = IP.new
        ip.ip_tos = 0
        ip.ip_len = 0
        ip.ip_id  = 0
        ip.ip_off = 0
        ip.ip_ttl = 255
        ip.ip_p   = 255
        ip.ip_sum = 0
        ip.ip_src = src_ip
        ip.ip_dst = dst_ip
        ip.body   = arp_msg.to_s
        ip.ip_len = ip.length
        puts ip.inspect_detailed

        # TRANSMISSION CODE WOULD GO HERE
        # .....
end
-----------------------------------------------------------------------------

Now I'm stuck with transmitting this datagram, any idea how I would 
implement this?. Also I'm just taking a guess there as how to craft an 
ARP Message encapsulated in an IP datagram so if you know the correct 
way of doing that too your feedback is much appreciated.

I apologize in advance if this was not an appropriate place to post this 
subject .


-- 
Posted via http://www.ruby-forum.com/.