>Synopsis:      UDP divert-to rule: getsockname(2) won't show original
destination
>Category:      kernel amd64
>Environment:
        System      : OpenBSD 7.1-beta
        Details     : OpenBSD 7.1-beta (GENERIC) #353: Sun Feb 20 17:14:05
MST 2022

        Architecture: OpenBSD.amd64
        Machine     : amd64
>Description:

getsockname(2) won't show the original destination address/port for a
UDP inet packet redirected using a PF divert-to rule to a local
socket.

This works as expected for TCP.

>How-To-Repeat:

server:

(pf.conf)
pass in on vio0 inet proto udp from any to 100.64.0.100 divert-to 127.0.0.1
port 9000

>>> import socket
>>> s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
>>> s.bind(("127.0.0.1", 9000))
>>> s.recvfrom(1024)
(b'data\n', ('100.64.0.1', 16079))
>>> s.getsockname()
('127.0.0.1', 9000)

client:

$ echo data | nc -u 100.64.0.100 12345

>Fix:
        Unknown.

Reply via email to