[erlang-questions] UDP Headers

Michael Santos michael.santos@REDACTED
Tue Jul 8 23:47:10 CEST 2014

On Tue, Jul 08, 2014 at 07:04:12PM +0100, Lee Sylvester wrote:
> Hey guys,
> So, I’m using gen_udp for a server I’m building, but I really need to be able to update the headers of incoming packets.  Does anyone know how I can do this with gen_udp without having to resort to using raw sockets?

It depends which header needs to be changed:

* for UDP (source/destination port, length, checksum), the simplest
  method is to receive and resend the packet

* for IPv4/IPv6, some of the headers may be able to be influenced by setting
  socket options. For example, by using inet:setopts/2 or by using
  setsockopt(2) from an NIF.

* otherwise, there's the raw socket interface.

  For IPv4, the socket can be opened in raw mode and passed back into

  For IPv6 headers, if the headers can be changed, you generally have to
  use sendmsg(2)/recvmsg(2) which means using a port or an NIF.

* for ethernet, it will depend on the OS: PF_PACKET for linux, BPF for
  the BSDs

* another option is routing the packets through a tun/tap device and
  having some erlang code re-write the headers

More information about the erlang-questions mailing list