<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<div name="messageBodySection" style="font-size: 14px; font-family: -apple-system, BlinkMacSystemFont, sans-serif;">Hi,
<div><br /></div>
<div>I am using pkt to create a custom ipv4 header:</div>
<div><br /></div>
<div> IpHeader_ = #ipv4{p = 1, saddr = {127,0,0,1}, daddr = {192,168,7,83}, len = byte_size(Icmp) + 20},<br /></div>
<div> IpHeader = pkt:ipv4(IpHeader_#ipv4{sum =  pkt:makesum(IpHeader_)})<br /></div>
<div><br /></div>
<div>Using a static icmp echo packet:  Packet = <<8,0,140,250,29,138,0,0,255,253,243,182,73,166,226,218,32,33,34,35,36,37,</div>
<div>       38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,</div>
<div>       62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79>>,</div>
<div><br /></div>
<div>I can send the ICMP properly and see it through Wireshark using the following:</div>
<div><br /></div>
<div>
<div>    {ok, FD} = procket:socket(inet, raw, icmp),</div>
<div>    {ok, Socket} = gen_udp:open(0, [binary, {fd, FD}, inet]),</div>
</div>
<div> gen_udp:send(Socket, {192,168,7,83}, 0, Packet),<br /></div>
<div><br /></div>
<div><br /></div>
<div>Now, if I Include the icmp header: NewPacket = <<IpHeader/binary, Packet/binary>> and send this, Wireshark shows a malformed ICMP packet. Gen_udp or procket, or someone down the line is still placing a standard icmp header on top of my custom one and treating it as payload.</div>
<div><br /></div>
<div>I have tried setting raw C setsocketopts : inet:sockopts(Socket, [{raw, 0(IPPROTO_IP), 3 (IP_HDRINCL) , <<1:32/native>>(integer 1 for on)}]) to attempt to stop the socket from adding the header, but when I do this the packet doesn’t seem to leave the machine, and I can’t see it on Wireshark. The numbers for IPPROTO comes from the header file: <a href="https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/in.h">https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/in.h</a> and IP_HDRINCL: <a href="http://students.mimuw.edu.pl/SO/Linux/Kod/include/linux/socket.h.html">http://students.mimuw.edu.pl/SO/Linux/Kod/include/linux/socket.h.html</a> . </div>
<div><br /></div>
<div>Is there any way to put a custom IP header on any ip packet in erlang?</div>
<div><br /></div>
<div>Thanks!</div>
<div><br /></div>
<div><br /></div>
<div><br /></div>
</div>
</body>
</html>