(昨天没有来得及记录下来,现在回到家里再补写,代码5.7过完假后再补贴)
由于我在linux下架设的pppoe服务器没有办法防止一个帐号多人使用,使用pppoe-server+freeradiusd,似乎只要帐号和密码一核对通过,那么就可以上网了,一个帐号可以n个人使用。虽然我之前用修改sql.conf中验证和postAuth的办法,在验证地方加上了mac地址认证,但是mac地址在系统下可以被修改,(包括我自己的机器,TPLink的网卡,右键选择属性,很容易就可以找到修改mac地址的地方了,连注册表都不用动,郁闷),几个人把自己的mac地址修改成一样的话,照样可以同时上。
前一段时间本来打算自己写pppd的插件,抛开pppd自带的radius.so和freeradius不用的,但是发现如果在pppd的plugin里自行进行mysql的连接和查询,那么每个pppoe连接建立时会调用一个plugin的进程,那么如果我在plugin中与mysql建立全程的连接,那么有1000人在线的时候,mysql会有1000个连接,但是如果分别在plugin中的验证、流量统计过程里连接mysql的话,由于流量统计的时候是定时的,那么与mysql建立连接与释放连接会很频繁,(据我理解,建立连接比查询耗费的时间更多),那么也会造成问题。最终的解决办法似乎也只能效法freeradius的方式,在mysql主机上建立类似freeradius的服务器程序,在plugin中发查询和校验包给它,由它建立几个永久的mysql连接进行查询。当中涉及到包协议的设定,密码的编码和解码,比较复杂