Linux内核驱动——并发和竞争的处理 加锁和互斥的目的是为了保护共享资源(数据或外设地址)不被多个线程同时访问,而不是保护代码被同时执行 一、信号量信号量为1表示资源可用,为0表示资源不可用,对信号量的加减主要涉及PV操作,进入临界区调用P操作(down)将信号量减1,推出临界区调用V操作(up)将信号量加1.1. 信号量的实现struct semaphore *sem;void semaphore_init(...
Linux内核学习笔记——中断,tasklet和工作队列 对于操作系统来说,中断的实现和裸机代码是不一样的,对于裸机代码来说,它的处理过程更符合下面这个流程,我们在编写裸板驱动代码的时候,一般处理的是硬件中断,而且中断号也是硬件中断号,这个中断号是和CPU寄存器的连线方式直接相关的,只要连线方式一确定,那么外设对应的中断号就确定了。比如在下面这个图中,中断源可以是TIMER或者BUTTON,对应的中断号是6和16,当这些外设产生中断信号的时候,它首先通过...
vmware ubuntu搭建samba用于和windows共享 实现过程: 1.sudo apt-get samba 2.ps -aux 查看服务是否开启 smbd -F nmbd -D(若未开启 执行sudo /etc/init.d/smbd start ) 3.在home下创建share文件夹 mkdir /home/share (注...
Linux 内核网络协议栈 ------sk_buff 结构体 以及 完全解释 (2.6.16) 在2.6.24之后这个结构体有了较大的变化,此处先说一说2.6.16版本的sk_buff,以及解释一些问题。一、先直观的看一下这个结构体~~~~~~~~~~~~~~~~~~~~~~在下面解释每个字段的意义~~~~~~~~~~~[cpp] view plain copy struct sk_buff { /* These two members must be first. */...
selenium webdriver 页面css和xpath定位 对于html来说,不管用什么浏览器打开,他的架构是不变的,所以对于编写自动化测试程序来说,基于什么浏览器开发,差异不大,所以这里推荐使用chrome 65或以后版本浏览器,之所以推荐这个浏览器,是因为它可以不用安装任何插件,就可以很方便的提供定位相关的功能。chrome浏览器可以用F12调出调试窗口,用ctrl + F可以调出选择器和xpath搜索输入框,在搜索时可以显示搜索到结果的个数,如果搜索...
【Python】 Selenium常见元素定位方法和操作的学习介绍 这篇文章主要Selenium+Python自动测试或爬虫中的常见定位方法、鼠标操作、键盘操作介绍,希望该篇基础性文章对你有所帮助,如果有错误或不足之处,请海涵~ 前文目录: [Python爬虫] 在Windows下安装PhantomJS和CasperJS及入门介绍(上) [Python爬虫] 在Windows下安装PIP+Phantomjs+Seleni...
【Python】selenium webdriver 启动三大浏览器Firefox,Chrome,IE 一. 安装Python3 1. 进入Python官方网站:https://www.python.org/downloads/ 下载并安装最新版本的Python(建议安装Python3) 。 下面是Python官网上几个版本的区别: (1).web-based installer 是需要通过联网完成安装的 (...
学习Linux-4.12内核网路协议栈(3.2)——网路层的发包处理 上篇文章介绍了接口层将IP包传给网络层以后的处理过程,主要是包括传给上层,转发和丢包处理。这篇文章将介绍传输层怎么将包传递给网络层,以及传给网络层以后的处理过程。这里主要分两部分:TCP包的发送和UDP包的发送。在TCP中,将TCP段打包成IP数据报的方法根据TCP段类型的不同而有多种接口,最常用的就是ip_queue_xmit,而ip_build_and_send_pkt和ip_send
学习Linux-4.12内核网路协议栈(3.1)——网路层的收包处理 现在我们将进入传输层的分析:在前面我们知道,数据包到达接口层的时候,它会根据ptype_base来查询包的类型,并根据包的类型交给不同的网络层函数处理,比如ip_recv,icmp_recv等,现在我们就来看看网络层是怎么处理不同类型的包的:1. IP私有信息控制块 40 struct inet_skb_parm { 41 int iif;
学习Linux-4.12内核网路协议栈(2.4)——接口层数据包的发送 这篇文章主要介绍网络层的数据是怎么通过接口层将数据发送出去的,在开始之前我们还是再来看一下softnet_data这个很重要的结构体:struct softnet_data { struct list_head poll_list; struct sk_buff_head process_queue; /* stats */ unsigned int
学习Linux-4.12内核网路协议栈(2.3)——接口层数据包的接收(下半部) 我们来继续分析net_rx_action:static __latent_entropy void net_rx_action(struct softirq_action *h){ struct softnet_data *sd = this_cpu_ptr(&softnet_data); unsigned long time_limit = jiffies +
学习Linux-4.12内核网路协议栈(2.2)——接口层数据包的接收(上半部) 前面写了这么多,终于可以开始分析数据报的传输过程了,那我们就愉快的开始吧!我们知道,一个中断处理函数主要分两个部分,上半部和下半部,这篇文章主要介绍上半部分。当一个数据包到达的时候,网卡驱动会完成接收并且触发中断,我们就从这个中断处理函数开始:当一个中断产生并发送给CPU的时候,对于NAPI和不支持NAPI的设备来说处理结果是不一样的,NAPI调用的函数是napi_schedule
学习Linux-4.12内核网路协议栈(2.1)——接口层加快传输速率的特性 前面花了好多篇幅,终于将网络协议栈的初始化相关的内容介绍完了,也就是说完成前面的那些步骤以后,网络协议栈具备了数据包的收发功能。在网络接口层,它只负责数据包的接收与发送,而不关注数据包在网络层的类型是什么,所以传输速率的快慢往往与接口层的处理有着密切的关系,下面我们来了解一下在提供传输速率上面,现在的内核都引进了哪些新的特性。数据包的接收: NAPI, RPS,RFS数据包的发送: TSO
linux设备模型——总线,驱动,设备间的关系 设备模型之kobject,kset及其关系关于linux设备模型kobject,kset,ktype设备驱动基础0:设备模型之kobject,kset及其关系 设备模型之总线,驱动,设备Linux驱动之bus_register分析Linux设备管理(一)_kobject, kset,ktype分析
学习Linux-4.12内核网路协议栈(1.8)——网络设备驱动模块的加载 1.了解PCI总线说到网络设备驱动,就不得不说PCI总线,但是这个话题可深可浅,而且网上的资料也是一大堆(比如),但是对于我们来说,目前并不需要掌握很深,下面是网上找的两张最基本的PCI工作结构图,虽然PCI总线上可以挂接不同种类的设备,但我们这里只要了解网络设备就够了,所以我更偏好第二张图,它够简单,也够直观。 关于PCI总线,这里主要介绍两个结构体,一个是
学习Linux-4.12内核网路协议栈(1.7)——网络设备的初始化(struct net_device) 在linux的网络设备里,其中一个最关键的结构体应该要算net_device了,它由对应的网络设备驱动进行创建和初始化,服务于内核网络子系统。struct net_device这个结构体比较大,在了解它之前,我们先看一下它的注释:1433 /**1434 * struct net_device - The DEVICE structure.1435 * Actu
学习Linux-4.12内核网路协议栈(1.6)——协议栈的初始化(inet_init实现过程) 这篇文章主要分析inet_init()函数的实现过程:1796 static int __init inet_init(void)1797 {1798 struct inet_protosw *q;1799 struct list_head *r;1800 int rc = -EINVAL;18011802 sock_skb_cb_check_siz
学习Linux-4.12内核网路协议栈(1.5)——协议栈的初始化(inet_init主要数据结构) 前面了解到网络初始化申请了两块skb高速缓存和创建了一个/proc/net/protocols文件,现在开始重头戏,网络协议栈的初始化。这篇文章主要介绍网络栈中使用到的主要数据结构。网络协议栈的内核实现和理论上的分层有些不一样,在代码里面的分层如下图:开始前,先回顾一下应用层socket函数的调用,它会创建一个socket并返回对应的描述符:int sock
学习Linux-4.12内核网路协议栈(1.4)——协议栈的初始化(proto_init) 这篇文章主要分析proto_init过程,它完成协议相关proc文件的创建3241 static __net_initdata struct pernet_operations proto_net_ops = {3242 .init = proto_init_net,3243 .exit = proto_exit_net,3244 };324
学习Linux-4.12内核网路协议栈(1.3)——协议栈的初始化(sock_init) static int __init sock_init(void){ int err; /* * Initialize the network sysctl infrastructure. */ err = net_sysctl_init(); if (err) goto out; /* *
学习Linux-4.12内核网路协议栈(1.2)——协议栈的初始化(sk_buff) sk_buff 是网络数据包的承载,是最关键的结构体之一/** * struct sk_buff - socket buffer * @next: Next buffer in list * @prev: Previous buffer in list * @tstamp: Time we arrived/left * @rb
学习Linux-4.12内核网路协议栈(0)——前言 当决定开始写这个系列文章的时候,就意识到这可能会是个漫长的过程,也可能是个短暂的过程(如果自己中途放弃的话)。最近一段时间零零散散在了解内核网路协议栈相关的东西,有时候觉得好难,有时候觉得也就那么回事,这种感觉反反复复持续了一段时间,直到现在可以较为平静的面对这些问题的时候,决定对网络协议栈的学习做个梳理和记录,下面是阅读到的一些书籍:TCP IP详解卷1:协议 原书第2版
学习Linux-4.12内核网路协议栈(1.1)——系统的初始化(do_initcalls) 我们知道,不管在什么样的平台上启动linux,它的开始都是以start_kernel()进行系统的初始化,当然网络协议栈的初始化也是在这个过程中完成,下面从start_kernel()开始跟踪:start_kernel() --> rest_kernel() --> kernel_thread(kernel_init, NULL, CLONE_FS) --> kernel_init_freea
了解linux网络协议栈(五)——协议栈实现 linux网络报文接收发送浅析作者: 七伤 对于linux内核来说,网络报文由网络设备来进行接收。设备驱动程序从网络设备中读取报文,通过内核提供的网络接口函数,将报文传递到内核中的网络协议栈。报文经过协议栈的处理,或转发、或丢弃、或被传送给某个进程。 网络报文的发送与之相反,进程通过系统调用将数据送入网络协议栈,或者由网络协议栈自己发起报文的发送,然后协议栈通过调用网络接口函数
了解linux网络协议栈(四)——协议栈实现 Linux内核分析 - 网络[十七]:NetFilter之连接跟踪Linux内核分析 - 网络[十六]:TCP三次握手Linux内核分析 - 网络[十五]:陆由表[再议]Linux内核分析 - 网络[十四]:IP选项Linux内核分析 - 网络[八补]:IP协议补充
了解linux网络协议栈(三)——协议栈实现 【Linux4.1.12源码分析】virtio_net之NAPI机制【Linux4.1.12源码分析】virtio_net之中断注册【Linux4.1.12源码分析】收包软中断和NAPI【Linux4.1.12源码分析】VXLAN之remcsum实现分析【Linux4.1
了解linux网络协议栈(二)——协议栈实现 第十六章PHY -基于Linux3.10第十五章 提升网络性能技术--基于Linux3.10第十四章 netlink机制--基于Linux3.10第十三章 网络命名空间(内核源码实现)--基于Linux3.10第十二章 trie路由--基于Linux3.10
了解linux网络协议栈(一)——内核模块初始化 linux驱动 之 module_init解析 (上)Linux内核很吊之 module_init解析 (下)linux驱动篇之 driver_register 过程分析(一)linux驱动篇之 driver_register 过程分析(二)bus_add_driverlist_for_each_entry宏函数解析
linux内核模块初始化 内核启动过程中需要完成各个部分的初始化,比如中端、页面管理、slab分配器、任务调度器、网络、PCI设备等等的初始化,这些初始化大概可以分为两种:一种是关键的,必须完成的而且必须以特定的顺序来完成的初始化,这部分的代码往往是直接便如内核的而且是直接调用的另一种是非关键的的子系统(或者说模块、功能)的初始化,这部分根据配置可以不加载,可以以built-in的方式编到内核的可执行文件中,也可以
知识的管理会比知识的存储更重要 《失控》 藏品多没什么意义,关键是索引,你能用最快的速度找到你想找的那件,这才是有意义的。在一个博尔赫斯的那种包含所有图书的图书馆,找到一本书和写出那本书同样困难,找书的过程其实就是写书的过程。狄德罗,百科全书派人物,畅想了人类知识的汇总,汇总于一个博尔赫斯的图书馆中,但是他假设任何知识都是不可压缩的,即你不能用一个更短的短语来描述一个稍长的短语,在这种情况下,索引就是知识
内核中_init,_exit中的作用 __init, __initdata等属性标志,是要把这种属性的代码放入目标文件的.init.text节,数据放入.init.data节──这一过程是通过编译内核时为相关目标平台提供了xxx.lds链接脚本来指导ld完成的。 对编译成module的代码和数据来说,当模块加载时,__init属性的函数就被执行; 对静态编入内核的代码和数据来说,当内核引导时,do_basic_s
hostapd wpa_supplicant madwifi详细分析(十五)——supplicant扫描结果排序规则 int (*compar)(const void *, const void *) = wpa_scan_result_compar;qsort(scan_res->res, scan_res->num, sizeof(struct wpa_scan_res *),compar); // qsort函数介绍static int wpa_scan_result_compar(con
qsort用法--完整版(解释了cmp)【转】 qsort用法--完整版(解释了cmp)【转】用qsort快两年的时候了,却一直没有真正弄懂cmp函数的返回值1,-1,0的函数. 今天在做凸包时,郁闷了....所以请教了snoopy,终于弄懂了cmp返回值的意识:int cmp(const void *a, const void *b)返回正数就是说 cmp 传入参数第一个要放在第二个后面, 负数就是传入参数第一个要
Linux下查看支持的信号列表 Linux下查看支持的信号列表我们运行如下命令,可看到Linux支持的信号列表:~$ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKI
Openwrt学习笔记(四)——系统开机启动 (续) 下面是英文原版,如果访问慢,也可以直接查看这里https://wiki.openwrt.org/doc/techref/init.detail.ccInit (User space boot) reference for Chaos Calmer: procdAnalysis of how the user space part of the boot sequ
Openwrt学习笔记(四)——系统开机启动 1. 内核启动bootloader将kernel从flash中拷贝到RAM以后,bootloader将退出舞台,并将这个舞台交给了kernel。中间有些交接的细节过程,这里不赘述,我们直接从kernel的启动开始分析。不同平台的kernel启动时,最开始部分的汇编脚本会有些不一样,但是从汇编跳转到C语言的代码过程中的第一条命令大多数都是start_kernel函数,比如arm平台,
Openwrt学习笔记(三)——内核启动 本来想整理一下linux内核启动的大致过程,后来网上找到了朱老师的关于这方面的付费视频课程,讲的挺好,所以这里就自己偷偷懒,直接将笔记贴上来了,希望没影响到人家的知识产权http://edu.51cto.com/lesson/id-87648.html第一部分、章节目录2.16.1.做好内核分析的准备工作2.16.2.head.S文件分析12.16.3.内核启动的汇
Openwrt学习笔记(二)——Flash Layout and file system 在大多数系统中,闪存不像RAM一样可以直接执行指令,所以闪存中的数据和指令需要拷贝到RAM中执行,比如存放在flash中的kernel需要bootload的帮忙,将kernel拷贝到RAM里面才能运行。大多数router都是没有硬盘的,它使用闪存来完成相应的存储功能(包括存储固件以及系统数据),这种非易失性的闪存可以避免掉电丢失的问题。我们常接触的闪存主要有两种:NOR flash 和
Openwrt学习笔记(一)——系统架构 下表是OpenWrt系统架构和其他系统架构的对比: Desktop DistributionsOpenWrtAndroidReplicantmer-basedTypical main memory size128 MiB to 16 GiB (or more)32 MiB to 512 MiB1
802.11协议笔记(二)——PHY物理层的帧格式(802.11b) 这篇文章主要介绍下图中layer1物理层的内容前面有介绍,MPDU进入PLCP层以后,它的名字就换成了PSDU,PSDU加上前导码和PLCP头部以后,就形成了PPDU。在传输的过程中,发送端通过向接收端发送PLCP前导码来提醒对方。前导码是一序列0/1比特串,用于同步即将发生的传输。在802.11-2007 协议中有定义三种类型的前导码格式:the Long PPDU format,
802.11协议笔记(一)——基本概念 首先简单回顾一下IOS模型的7层结构:Layer 7: ApplicationLayer 6: PresentationLayer 5: SessionLayer 4: TransportLayer 3: NetworkLayer 2: Data-Link LLC sublayer MAC sublayerLayer
Vim 复制粘贴探秘 Vim作为最好用的文本编辑器之一,使用vim来编文档,写代码实在是很惬意的事情。每当学会了vim的一个新功能,就会很大地提高工作效率。有人使用vim几十年,还没有完全掌握vim的功能,这也说明了vim的强大。而这样何尝不是一件好事呢,只要有的学习,就有的提高。最近使用Vim来写博客,发现在Vim中粘贴Python代码后,缩进就全乱了。仔细研究了以下,原来是自动缩进的缘故,于是做如下设置:
在windows下使用Cygwin模拟unix环境,并安装apt-cyg,repo等工具 前面有一篇文章整理在windows下使用vim+git+ctags等工具查看代码,感觉挺方便的,但是在模拟unix开发环境的时候局限很大,特别是在涉及到编译以及调试的时候很难开展,所以找到了Cygwin这个比较综合的模拟软件, cygwin是windows平台上运行的unix模拟环境,它对于学习unix/linux操作环境,或者从unix到windows的应用程序移植,或者进行某些特殊的开发工作
无线局域网安全(四)————身份认证之4路握手 前面我们了解了三种加密方式,WEP、TKIP和CCMP,他们分别使用不同的算法给需要传送的MSDU进行加密以后,封装在MPDU中进行传送,然后在接收端对数据进行解密,以达到安全完整传送数据的目的。不管使用哪种加密方式,这都是在STA完成了身份认证以后进行的动作,也就是说在确认了STA获得足够的权限以及拥有正确的密钥以后才能进行安全的、完整的、受保护的的通信。那么对于一个新接入的STA,我们怎么知道
无线局域网安全(三)————CCMP加密 Counter Mode with Cipher-Block Chaining Message Authentication Code Protocol(CCMP)CCMP加密在802.11i修正案中定义,用于取代TKIP和WEP加密。CCMP使用AES快加密算法取代WEP和TKIP的RC4流算法,它也是WAP2指定的加密方式,因为AES加密算法是和处理器相联系的,所以旧的设备中可以支持WEP
无线局域网安全(二)————TKIP加密 Temporal Key Integrity Protocol (TKIP) 临时秘钥完整性协议TKIP是用来解决WEP容易被破解而提出的临时性加密协议,它并不是802.11推荐的强制加密协议, 简单来说,TKIP主要是用来加强WEP加密,这个升级主要体现在算法上,这一点很重要,为什么这么说呢?因为使用TKIP加密,并不需要进行硬件的升级,也就是说只要你的硬件支持WEP加密,那么同时也能够支持
无线局域网安全(一)———WEP加密 这篇文章是关于无线局域网加密的第一篇文章,所以先对无线局域网的加密做一个简单的概述。其实我们平常在使用wifi的时候,往往会用到的加密方式主要有WEP(pre-RSNA), WPA(TKIP), WPA2(CCMP-AES), 如果有个别对安全要求比较高的也会使用企业级加密(802.1x). 在最新的802.11-2010标准中,有明确的支持新的无线设备应该抛弃WEP和WPA加密方式,而且必须
怎么使用macbook抓取无线报文 怎么使用macbook抓取无线报文1. 打开终端2. 找到airport的路径 #:cd / ; find . –name airport –print3. 为了方便,创建一个软链接#: ln –s /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resou
怎么在windows下使用vim + git 查看管理代码? 怎么在windows环境下使用vim查看代码 ? 怎么在windows下使用git版本管理工具 ?在网上搜索会搜出个种各样的推荐,有人推荐直接下载一个windows下的vim安装包,或者有人推荐使用source insight,notpad++, sublime, ultraedit 或其他IDE工具等等,但是我尝试了使用这些工具查看代码以后,感觉都不顺手,后来才发现自己习惯了linux环境,用L
hostapd wpa_supplicant madwifi详细分析(十四)——完结篇 注:这篇文章不谈技术查看了一下《hostapd wpa_supplicant madwifi详细分析》系列文章,断断续续更新到现在,发现中间的持续时间都快要两年了。记得那时候刚毕业到公司,组长叫我看项目的无线部分代码,自己稀里糊涂的看了一个月,组长问我:vap是怎么创建的?sta和AP是怎么建立连接的?wds是怎么工作的?WPS中PIN和PUSHBUTTON的区别是什么?我们DUT中几
hostapd wpa_supplicant madwifi详细分析(十三)——EAPOL(802.1X-2004/IEEE Std 802.1X-2010) 这篇文章主要介绍EAPOL,关于它的详细定义可以到802.1X-2004/IEEE Std 802.1X-2010两个文档里面查询。如果有阅读前面一篇文章,应该会了解EAPOL在局域网中是用来为EAP服务的,它主要用来装载EAP数据包,完成802.1x的认证过程。EAPOL也工作在LLC层,现在我们来了解一下。一、总概1.使用范围为了让无线局域网中的设备能够安全的连接通信,802.
怎么使用CSDN的git仓库(code.csdn.net) 今天使用了一下CSDN的git仓库,做个简单的记录,虽然和githup有一定的差距,但是用来存放一些个人的东西还是够用了。但是CSDN的git仓库有几个地方我还是很喜欢的:1.国内服务器,访问起来会比较快2.可以使用QQ邮箱,这一点github是办不到的,这个邮箱用习惯了3.虽然没有github那样有各种丰富的资源,但是该有的管理功能都有了,而且提供了2G的个人空间,也是极好的
hostapd wpa_supplicant madwifi详细分析(十二)——EAP(RFC3748)及EAP状态机分析(RFC4137) wpa_supplicant/hostapd程序里面的核心部分,应该要算它的状态机了,前面分析了WPS的实现过程,但是在看代码的时候,不管是加密部分还是WSC部分,都绕不过它的状态机,它就像路上的一块石头,如果不搬开它,很难继续往下走。下面是wpa_supplicant 模块结构图,红线部分是状态机模块,它就像一个桥架在那里,如果左边进来的的数据想要到右边去实现加密或者解密,就必须经过这座桥,而且
hostapd wpa_supplicant madwifi详细分析(十一)——wps原理及实现 三 这篇文章主要整理一下关于WSC的边边角角,对一些比较重要且前面没有解释清楚的一些概念做一些补充,如果对前面两篇文章理解比较清楚,可以略过。
802.11n能够提供600M最大速率的由来 802.11n能够提供600M最大速率的由来无线WiFi技术能够达到的最大速率主要受到编码方式、调制方式、无线频宽等关键指标的影响,作为当前主流的无线WiFi技术,802.11n的最大理论速率能够达到600M,和传统的802.11a/g相比提升了10倍以上。那么哪些关键技术的运用对802.11n的速率提升起到了作用,而这些技术又分别提升了多大量级的速率呢?要搞清楚这个问题,首先还是以802.11g的
hostapd wpa_supplicant madwifi详细分析(十)——wps原理及实现 二 前面对WPS交互过程有了大概的了解,现在了解一下WPS交互时帧的格式以及每个帧所携带的信息。 WPS使用802.1x和EAP传输in-band注册协议的交互信息,这些信息里面都会携带大端排序的attributes字段。这个协议都会和一个自定义的EAP method相对应。WPS不需要AP支持RADIUS,也不要求网络内包含一个认证服务器,事实上,很多具有WPS功能的AP只支持802.1x使用WPS
基于SHA-256的HMAC文件校验器 HMAC即带密钥的HASH函数,用它产生的报文鉴别码(MAC)可以实现报文鉴别。这里我将其做成一个软件,用于对文件的合法性进行校验。以下我先简单介绍软件相关背景知识再介绍其代码实现。 一、背景知识简介 有时候进行通信的双方基于安全的考虑需要对对方发过来的消息进行校验,以确定消息是未经第三方修改过的。这种校验可以这样进行:双方共同约定一个密钥(即
HMAC算法安全性浅析 HMAC算法安全性浅析 1 引言 2004年8月17日在美国加州圣巴巴拉召开的国际密码学会议(Crypto’2004)上,来自中国山东大学的王小云教授做了破译MD5、HAVAL-128、 MD4和RIPEMD算法的报告。报告结束时,与会者长时间起立鼓掌致敬,这在密码学会议上是少见的盛况。 然而,更让密码学界震惊的是,2005年2月15日,在美
Diffie-Hellman(迪菲-赫尔曼)秘钥交换 https://www.captainbed.net/lee244868149/Diffie-Hellman算法是Whitefield Diffie和Martin Hellman在1976年公布的一种秘钥交换算法,它是一种建立秘钥的方法,而不是加密方法,所以秘钥必须和其他一种加密算法结合使用。这种秘钥交换技术的目的在于使两个用户安全的交换一个秘钥一遍后面的报文加密。Diff...
十大注定要被淘汰的安全技术 你是否曾有过这样的经历:启动软盘上的写入保护开关,以防止启动病毒和恶意覆写;关闭调制解调器,以防止黑客在晚上打来电话;卸载ansi.sys驱动,以防止恶意文本文件重新排布键盘,让下一次敲击直接格式化你的硬盘;检查autoexec.bat和config.sys文件,以确认没有恶意条目通过插入它们进行自启动。 时过境迁,上述情况如今很难见到了。黑客们取得了进步,技术替代了过时的方式。有的时
openwrt minidlna config MiniDLNAMiniDLNA is a lightweight DLNA/UPnP media server. The MiniDNLA daemon serves media files (music, pictures, and video) to clients on a network.Installationroot@OpenWrt:~# opkg u
hostapd wpa_supplicant madwifi详细分析(九)——wps原理及实现 一 这篇文章基于《Wi-Fi Simple Configuration Technical Specification Version 2.0.5》文档, 更详细的内容请直接参考文档,这里只将自己的想法做一些简单的记录。一、WSC的三种实现 WSC(wifi simple configuration),一看这名字就知道这个协议是用来偷懒用的,所以我将它翻译为“快速接入无线网”协议,这
hostapd wpa_supplicant madwifi详细分析(八)——wpa_supplicant的配置文件 距离上一篇文章的更新已经将近半年了,这半年忙项目忙得几乎没有什么时间给自己积累一些东西,也没什么心思转到这边来写点东西,当一个项目放到自己身上的时候,发现并不像开发一个模块或一个功能那么简单,涉及方方面面,各种琐碎的的事情会占据大量的时间,各个功能之间的交互等等。 前面写的关于hostapd的文章都太浅显了,一般都没怎么涉及到具体的功能,只是简单的分析了一下代码的流程,然而对于实际的功能开
windows bat脚本编写 Windows .bat 脚本简单用法介绍:一.简单批处理内部命令简介 1.Echo 命令 打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,echo 命令将显示当前回显设置。 语法: echo [{on│off}] [message] Sample:@echo off / echo hello world 在实际应用中我们会把这条命令和重定向符号(也称为管道符号
CSS reset的重新审视 – 避免样式重置 CSS reset的重新审视 – 避免样式重置一、CSS reset(CSS重置)的历史根据淘宝射雕的叙述,最早的一份CSS reset来自Tantek 的undohtml.css,很简单的代码,Tantek 根据自己的需要,对浏览器的默认样式进行了一些重置。其余一些有名的CSS reset如业界领袖Eric Meyer的reset,或是Tripoli Reset。CSS
C语言正则表达式详解 regcomp() regexec() regfree()详解 标准的C和C++都不支持正则表达式,但有一些函数库可以辅助C/C++程序员完成这一功能,其中最著名的当数Philip Hazel的Perl-Compatible Regular Expression库,许多Linux发行版本都带有这个函数库。C语言处理正则表达式常用的函数有regcomp()、regexec()、regfree()和regerror(),一般分为三个步骤,如下所示:
sscanf 函数使用 sscanf编辑sscanf() - 从一个字符串中读进与指定格式相符的数据。swscanf()- 用于处理宽字符字符串,和sscanf功能相同。外文名sscanf类 别数据输入解 释字符串中读进相符的数据处 理宽字符字符串头文件#include目录1名称2头文件3返回值4说明5支持集合操作6例子
(7)uboot详解——初始化SDRAM (7)uboot详解——初始化SDRAM在开始这篇文章之前,我们先回顾一下(1)uboot详解——板子刚上电时都干了些什么,不管板子是从nandflash启动还是从norflash启动,它的开始代码都不是在SDRAM中运行的,要么在stepping stone中运行,要么在norflash中运行,但是stepping stone的4k片上内存显然是不够的,而且norflash可读不可写的特
(6)uboot详解——关闭缓存和mmu uboot详解——关闭缓存和mmu当设置完时钟分频以后,uboot就会执行cpu_init_crit汇编函数,这个函数的主要作用就是关闭缓存和mmu,然后调用lowlevel_init函数进行系统总线的初始化。为什么启动的时候,需要关闭缓存和mmu呢?我们先了解一下他们的作用。缓存是主存(内存)和CPU通用寄存器之间设置的一个高速的、容量相对较小的存储器,把正在执行的指令地址附近的
(2.3)QCA atheros 无线配置命令——Beacon配置参数 参数命令格式DAOL描述ampdudensityget_ampdudensityiwpriv athNampdudensityMPDU_density 设置MPDU的精度,默认值是6#iwpriv ath0 ampdudensity 6#iwpriv ath0
(2.2)QCA atheros 无线配置命令——iwpriv关联和ACL 参数命令格式DAOL描述addmacdelmacgetmacmaccmdget_maccmdiwpriv athN addmacmacaddriwpriv athN delmacmacaddriwpriv athN maccmdcmdYY这个参数用
(2.1)QCA atheros 无线配置命令——iwpriv聚合和ANI参数 1. iwpriv参数这部分将说明iwpriv每一层对应的参数,包括radio层和协议层,注意,有一些参数在这两层之间是重复的,所以当要设置重复的参数的时候,建议将radio层的参数覆盖协议层的参数,带宽模式的参数(HT20/40)和一些其他参数将应用于radio层。如果radio层的参数改变了,那么所有连接到对应wifiN接口上的VAPs都将受到影响。使用iwpriv命令时,所有的参数都有
(5.3)uboot详解——PWM定时器(番外) 这篇文章是一些拓展内容,如果想了解uboot的启动过程,可以先跳过本章,如果需要掌握一些编写裸机程序或者内核与计时器相关的驱动的知识,可以了解一下。PWM定时器1.概述脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中——
(1)QCA atheros 无线配置命令——iwconfig (athN) AP驱动的命令行工具是由一系列无线工具组成的,他们可以用来修改无线驱动的环境变量。1.1 无线工具无线工具接口用来Linux下配置和操作WLAN接口的。这些工具是开源的,同时也需要驱动的指定的IOCTL接口的支持,QCA的WLAN驱动可以很好的与这些开源无线工具兼容,甚至在使用时不用做任何修改,任何一个高于28版本的无线工具都可以很好的配置qca atheros 的无线驱动。无线工具使
shell命令收集 1.比较两个文件的时间戳可以用test的-nt选项, 比如 [ file1 -nt file ] && echo "file1 is newer than file2" ,然而 -ot 与之相反2.虚拟机 设置 选项 共享文件夹 mount -t vmhgfs .host:/ /mnt/hgfs/
(5.1)uboot详解——时钟分频 (5)uboot详解——时钟分频如果cpu是计算机的大脑,电流是计算机的血液,那么时钟则是计算机的心脏,时钟频率决定了处理器运算的快慢,它的每一次“跳动”都驱动着处理器不停的执行命令。不同的是,人的各个部位心率是一样的,但计算机却有多个频率,而且每个部位可能有不同的频率,比如“大脑”有一个频率,“手“有一个频率,“脚”使用的是另外一个频率,这样就产生了两个问题:怎么产生这些不同的频率?处理器怎
(4.3)uboot详解——异常和异常向量 (4.3)uboot详解——异常和异常向量前面两节分析了外部中断和内部中断相关的内容,这篇文章对处理器的异常情况作一个总结。可以参考第二片文章(处理器工作模式),ARM处理器有七种工作模式,除了用户模式和系统模式以外,其他5中模式都是异常模式。人们都会生病,生病时我们可以依靠我们的免疫系统恢复过来,计算机也会“生病”,它“生病”的时候就会进入异常工作模式,依靠异常处理程序让cpu恢