require "socket" # EtherIPヘッダも含んでそれらも含めた上側のデータ def trans_data # IP Header: 20Byte # MAC Header: 14Byte # EtherIP Header: 2Byte # とりあえず、EtherIPヘッダ+自然に生成されたEtherヘッダ+IPヘッダをベタで。 bynary_data = 0x30000ab1a91e677a0a2b383bbb0a080045000014d2b84000ff61e09aac1f0bf408080808.to_s(2).rjust(36 * 8, "0") data_byte_arr = bynary_data.scan(/.{1,8}/) data_byte_arr.map! { |byte| byte.to_i(2).chr } # TO ASCII data_byte_arr.join end # 以下により、Etherヘッダ+IPヘッダ(TypeはEtherIP)が入る sock = Socket.new( Socket::AF_INET, Socket::SOCK_RAW, # TCP とか UDP とかではなく、IPヘッダ以上は自分で書くことができる? 97 # EtherIP ) sock.bind(Socket.sockaddr_in(nil, "172.31.11.244")) sock.send(trans_data, 0, Socket.sockaddr_in(nil, "8.8.8.8"))
できあがるデータ