For UDP packets forwarded to a local daemon with a rule like below: ipfw add 10 fwd localhost,7000 udp from any to any in recv em1 The daemon may obtain the original destination address of forwarded packets using recvmsg(2) and IP_RECVDSTADDR socket option. However, there is no API to obtain the original destination _port_. One possible solution is to add a new socket option, say IP_RECVDSTSOADDR. If set on a datagram socket, ip_savecontorl/ip6_savecontrol_v4 would record the datagram's destination address and port as a 'sockaddr_in[6]' structure.