从配置的接入点收集 MAC 地址

从配置的接入点收集 MAC 地址

我想为我的房子建立一个接入点,我想收集连接到网络的设备的 mac 地址并将它们保存在数据库中,基本上我想要做的是有一些信息告诉我每个在家的人,我的数据库上有一张表,里面有我家里的每个成员,还有一个名为“Status_Id”的状态列,当有人连接到接入点时需要更新它,我想使用 mac 地址或固定 IP 来知道谁是谁并更新它。

注意:我计划在任何 Linux 发行版上执行此操作,因此如果您对如何执行此操作有任何建议,请告诉我。

答案1

从你的发行版或http://netfilter.org

您需要 ulog2 和 iptables。此外,ulog-mysql 可能是一个单独的包。

iptables -A INPUT **some condition if necessary** -j NFLOG

您需要在这里添加条件以避免数据库因数据包过载。

对于 dhcp 客户端,我建议

ulogd 配置文件

stack=log1:NFLOG,base1:BASE,ifi1:​​IFINDEX,ip2bin1:IP2BIN,mac2str1:HWHDR,mysql1:MYSQL iptables -I INPUT 1 -m udp -p udp --dport=67 -j NFLOG --log-prefix "dhcp 67 " iptables -I INPUT 2 -m conntrack --ctstate NEW -j NFLOG

至少规则 #2 会降低记录包的数量,可能需要进一步改进。这对于静态 IP 来说是必要的。

然后需要配置/etc/ulogd.conf

我手边没有笔记,但我可以稍后添加。

您必须输入数据库名称、表名、用户名和密码。

您可以修改 INSERT_FULL_PACKET 以将相关记录插入到您想要的任何表中。

但是,ulogd.conf 中指定的表名有一个技巧。ulog 程序会检查存在哪些字段,并仅输出这些字段。取消注释 mysql 条目。

待续.....

/BASE# Example configuration for ulogd

[global]

user="ulogd"

logfile="/var/log/ulogd/ulogd.log"

loglevel=1

plugin="/usr/lib64/ulogd/ulogd_raw2packet_BASE.so"
plugin="/usr/lib64/ulogd/ulogd_inppkt_NFLOG.so"
plugin="/usr/lib64/ulogd/ulogd_inpflow_NFCT.so"
plugin="/usr/lib64/ulogd/ulogd_filter_IFINDEX.so"
plugin="/usr/lib64/ulogd/ulogd_filter_IP2STR.so"
plugin="/usr/lib64/ulogd/ulogd_filter_IP2BIN.so"
plugin="/usr/lib64/ulogd/ulogd_filter_IP2HBIN.so"
plugin="/usr/lib64/ulogd/ulogd_filter_HWHDR.so"
plugin="/usr/lib64/ulogd/ulogd_filter_PRINTFLOW.so"
plugin="/usr/lib64/ulogd/ulogd_filter_MARK.so"
plugin="/usr/lib64/ulogd/ulogd_output_NACCT.so"
plugin="/usr/lib64/ulogd/ulogd_output_MYSQL.so"
plugin="/usr/lib64/ulogd/ulogd_inpflow_NFACCT.so"

stack=log1:NFLOG,base1:BASE,ifi1:IFINDEX,ip2bin1:IP2BIN,mac2str1:HWHDR,mysql1:MYSQL

[ct1]

[ct2]
hash_enable=0

[log1]
nlgroup=1
group=1
netlink_socket_buffer_size=217088
netlink_socket_buffer_maxsize=1085440

[log2]
group=1 # Group has to be different from the one use in log1
netlink_socket_buffer_size=217088
netlink_socket_buffer_maxsize=10854400

[log3]
group=2 # Group has to be different from the one use in log1/log2
numeric_label=1 # you can label the log info based on the packet verdict

[nuauth1]
socket_path="/tmp/nuauth_ulogd2.sock"

[emu1]
file="/var/log/ulogd/syslogemu.log"
sync=1

[op1]
file="/var/log/ulogd/oprint.log"
sync=1

[gp1]
file="/var/log/ulogd/gprint.log"
sync=1
timestamp=1

[xml1]
directory="/var/log/ulogd/"
sync=1

[json1]
sync=1

[pcap1]
sync=1

[mysql1]
db="database"
host="ip-address"
user="user"
table="table"
pass="password"
procedure="INSERT_PACKET_FULL"
backlog_memcap=20000000
backlog_oneshot_requests=20

[mysql2]
db="database"
host="host"
user="user"
table="table"
pass="password
procedure="INSERT_procedure"

[nacct1]
sync = 1

[mark1]
mark = 1

[acct1]
pollinterval = 2

您将需要来自 netfilter.org 的 ulogd 文件

找到这个文件

./doc/mysql-ulogd2.sql

提前创建数据库名称。

mysql -u root -p 数据库名称 < ./doc/mysql-ulogd2.sql

相关内容