2014-07-01 21:37:52 +00:00
|
|
|
import sys
|
2012-12-31 22:13:56 +00:00
|
|
|
|
|
|
|
def lookup(address, port, s):
|
|
|
|
"""
|
|
|
|
Parse the pfctl state output s, to look up the destination host
|
|
|
|
matching the client (address, port).
|
|
|
|
|
|
|
|
Returns an (address, port) tuple, or None.
|
|
|
|
"""
|
|
|
|
spec = "%s:%s"%(address, port)
|
|
|
|
for i in s.split("\n"):
|
2013-06-16 04:23:36 +00:00
|
|
|
if "ESTABLISHED:ESTABLISHED" in i and spec in i:
|
|
|
|
s = i.split()
|
|
|
|
if len(s) > 4:
|
2014-07-01 21:37:52 +00:00
|
|
|
if "freebsd" in sys.platform:
|
|
|
|
# strip parentheses for FreeBSD pfctl
|
|
|
|
s = s[3][1:-1].split(":")
|
|
|
|
else:
|
|
|
|
s = s[4].split(":")
|
|
|
|
|
2012-12-31 22:13:56 +00:00
|
|
|
if len(s) == 2:
|
|
|
|
return s[0], int(s[1])
|