When receiving ICMP packets via divert, which have been received from a NAT 
interface, how does one fill in the struct pfioc_natlook to get the information 
on the NAT’d host?

Given ‘struct pfioc_natlook nl;’ I have filled in nl as follows: 

        memset nl to zero first
        nl.saddr = ip header src addr field from the received packet
        nl.daddr = ip header dest addr field from the received packet
        nl.af = AF_INET
        nl.proto = IPPROTO_ICMP

        for nl.direction, I’ve tried both PF_IN and PF_OUT
        for nl.sport and nl.dport, I’ve tried
                nl.sport = ICMP type
                nl.dport = ICMP code
        and
                nl.sport = ICMP code
                nl.dport = ICMP type

In all cases, ioctl(pffd, DIOCNATLOOK, &nl) returns -1.

Thanks.

Matt

Reply via email to