获取建立https连接的设备/用户数与IP

3 篇文章 0 订阅
2 篇文章 0 订阅
在开始前访问一下你的网站或者建立链接,使我们下面能获取到目的数据
①先使用Netstat 命令加上参数:

-a (all)显示所有选项,默认不显示LISTEN相关
-n 拒绝显示别名,能显示数字的全部转化成数字
-p 显示建立相关链接的程序名(用于区分)

这样↓ 可以显示所有我们需要进行操作的链接数据

netstat -anp 
②从中我们取已经建立连接的,加上管道符 |

这样↓

netstat -anp |grep ESTABLISHED
③因为我的网站是基于nginx的,所以通过程序名过滤一下:
netstat -anp |grep ESTABLISHED |grep nginx
④过滤后得到nginx建立的所有链接,接下来过滤掉本地链接,使用参数:

-v 标识,表示not,反向,排除的意思
这样↓

netstat -anp |grep ESTABLISHED |grep nginx |grep -v 127.0.0.1
⑤剩下的就都是通向外部的链接了,这里根据你的需要来过滤端口,我需要443,就直接用grep获取443的数据,如果你需要获取全部tcp链接的或者80的,那就把443换成tcp或者80。然后开始截取列数据,使用awk

awk '{print $5}'就是截取第五列,这里依旧可以根据你的需要,截取对应列

netstat -anp |grep ESTABLISHED |grep nginx |grep -v 127.0.0.1 |grep 443 | awk '{print $5}'
⑥这样我们就获取到了外部的ip:端口号了,接下来进行切割,使用awk加上参数:

-F ':' 以冒号为分隔符切割成ip和端口号前后两部分,然后取前面的部分也就是ip部分,加上: '{print $1}'
这样↓

netstat -anp |grep ESTABLISHED |grep nginx |grep -v 127.0.0.1 |grep 443 | awk '{print $5}'| 
awk -F ':' '{print $1}'
⑦获取到一堆ip,如果建立链接多的话,会存在很多重复的值,我们去个重,使用sort加上参数:

-u (uniq)独一无二
这样↓

netstat -anp |grep ESTABLISHED |grep nginx |grep -v 127.0.0.1 |grep 443 | awk '{print $5}'| 
awk -F ':' '{print $1}' |sort -u
⑧获取到了ip,自然就可以得到数目了。不过以防万一,再过滤一下,让我们获取到的必须是ip值,使用grep,加上参数:

-o 表示“only-matching”,即“仅匹配”之意
-E 使用扩展正则表达式

([0-9]{1,3}[.]){3}[0-9]{1,3}就是ipv4的正则表达式

netstat -anp |grep ESTABLISHED |grep 443 |grep nginx |grep -v 127.0.0.1 |awk '{print $5}' |
awk -F ':' '{print $1}' |sort -u |grep -E -o '([0-9]{1,3}[\.]){3}[0-9]{1,3}'
⑨加下来直接获取数目,这里可以直接通过行数来计算数目了,所以使用wc,加上参数:

-l (line) 只显示行数
这样↓

netstat -anp |grep ESTABLISHED |grep 443 |grep nginx |grep -v 127.0.0.1 |awk '{print $5}' |
awk -F ':' '{print $1}' |sort -u |grep -E -o '([0-9]{1,3}[\.]){3}[0-9]{1,3}' |wc -l
⑩获取有人需要得到一行ip,这里用python来简单演示一下。

使用os模块,记得先import os

def get_ipres():
	result = os.popen("netstat -anp |grep ESTABLISHED |grep 443 |grep nginx |grep -v 127.0.0.1 |awk '{print $5}' |awk -F ':' '{print $1}' |sort -u |grep -E -o '([0-9]{1,3}[\.]){3}[0-9]{1,3}'").read()
	ipres=result.replace("\n","|")[:-1]
	return ipres

我这里用管道符分割ip,你可以用逗号或者其他方式来替换换行符,进行分割ip显示,[:-1]是去掉最后一个分隔符

还可以将得到的数据装到数组转成json发送。
使用socket,json ,记得import

SERVER = "x.x.x.x"
PORT = xxxx
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((SERVER, PORT))
array = {}
array['ips'] = get_ipres()
s.send(json.dumps(array))

记得异常s.close()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值