Отвечу сам на свой вопрос

PF очень крутая штука. Можно получить статистику практически ко всему
Статистика по всем интерфейсам одновременно:
pfctl -sI -vv
Статистика по конкретному интерфейсу:
pfctl -sI -vv -i interface
Статистика по правилам:
pfctl -sr -vv
Итак например нам нужно собрать суммарную входящую и исходящую статистику.
Код: Выделить всё
$ pfctl -sI -vv -i ng0
ng0
Cleared: Thu Dec 10 16:20:21 2009
References: [ States: 0 Rules: 14 ]
In4/Pass: [ Packets: 2173948 Bytes: 293719041 ]
In4/Block: [ Packets: 82890 Bytes: 11005998 ]
Out4/Pass: [ Packets: 3534355 Bytes: 2825644144 ]
Out4/Block: [ Packets: 60 Bytes: 3684 ]
In6/Pass: [ Packets: 0 Bytes: 0 ]
In6/Block: [ Packets: 0 Bytes: 0 ]
Out6/Pass: [ Packets: 0 Bytes: 0 ]
Out6/Block: [ Packets: 0 Bytes: 0 ]
Соответственно
In4/All = In4/Pass + In4/Block:
Код: Выделить всё
$ expr -e `pfctl -sI -vv -i ng0 | grep "In4/Pass" | awk '{print $6}'` + `pfctl -sI -vv -i ng0 | grep "In4/Block" | awk '{print $6}'`
305152579
Так само и для исходящей:
Out4/All = Out4/Pass + Out4/Block
Код: Выделить всё
$ expr -e `pfctl -sI -vv -i ng0 | grep "Out4/Pass" | awk '{print $6}'` + `pfctl -sI -vv -i ng0 | grep "Out4/Block" | awk '{print $6}'`
2857936511
С правилами немного посложнее, так как в PF не нумеруются правила

, но можно посмотреть их поочерёдность и выбрать нужное нам число.
Код: Выделить всё
$ pfctl -sr -vv
...
@32 pass out on ng0 proto tcp from any to any port = http flags S/SA keep state
[ Evaluations: 328 Packets: 102 Bytes: 12708 States: 4 ]
[ Inserted: uid 0 pid 8499 ]
...
Интересуемся исходящим трафиком на интерфейсе ng0 по http
Код: Выделить всё
$ pfctl -sr -vv | awk 'NR==104 {print $7}'
58728
Дальше дело за малым, можно собирать информацию о всех и вся
