|
|
<转载请注明出处>
1. ND协议介绍
邻居发现协议(Neighbor Discovery Protocol,以下称ND协议)是IPv6的一个关键协议,可以说,ND协议是IPv4某些协议在IPv6中综合起来的升级和改进,如ARP、ICMP路由器发现和ICMP重定向等协议。当然,作为IPv6的基础性协议,ND还提供了其他功能,如前缀发现、邻居不可达检测、重复地址检测、地址自动配置等。
1.1 IPv6协议格式

Version(4-bit):IP版本,该字段值为6
Traffic Class(8-bit):流量分类,与IPv4包头的TOS类似
Flow Label(20-bit):流标签,用来标记IPv6数据包的一个流
Payload Length(16-bit):有效载荷的长度,有效载荷为紧跟IPv6包头的数据包的其他部分
Next Header(8-bit):处理选项字段,分段,安全,移动性,松散源路由,记录路由等的新方式。该字段在承载ND报文时字段值为58(ICMPv6)。该字段详细字段值对应如下表
| Value |
Type of Header |
| 0 |
Hop-by-Hop Options Header |
| 6 |
TCP |
| 17 |
UDP |
| 41 |
Encapsulated IPv6 Header |
| 43 |
Routing Header |
| 44 |
Fragment Header |
| 50 |
Encapsulating Security Payload |
| 51 |
Authentication Header |
| 58 |
ICMPv6 |
| 59 |
No next header |
| 60 |
Destination Options Header |
Hop Limit:(8-bit):定义IP数据包所能经过的最大跳数,每跳一次将此值减1
Source Address(128-bit):IP数据包的源地址
Destination Address(128-bit):IP数据包的目的地址
继续阅读
收集于网络
/* base.h:基本操作的位运算实现 */
#ifndef BASE_H
#define BASE_H
#define word int
#define uword unsigned int
/* 将最右侧的1位改成0位 */
#define right1to0(x) ((x)&((x)-1))
/* 向右传播最右侧的1位 */
#define right1torig(x) ((x)|((x)-1))
/* 将最右侧的连续1位串改成0位串 */
#define right1sto0s(x) (((x)|(x)-1)+1 & (x))
/* 检查无符号整数x是否为2的幂,注意&的优先级低于==,需要括号 */
#define powof2u(x) (((x)&((x)-1))==0)
/* 检查无符号整数x是否为2**n-1的形式 */
#define pow2sub1u(x) (((x)&((x)+1))==0)
/* 检查无符号整数x是否为2**j-2**k形式 */
#define pow2subpow2u(x) ((((x)|(x)-1)+1 & (x))==0)
/* 下列掩码直接析出字中指定的位 */
/* 析出最右侧的1位 */
#define right1(x) ((x) & -(x))
/* 析出最右侧的0位 */
#define right0(x) (~(x)&((x)+1))
/* 析出后缀0 */
#define suffix0(x) (((x)&-(x))-1)
/* 析出最右侧的1位和后缀0(即后缀10…0) */
#define suffix10s0(x) ((x) ^ (x)-1)
/* 下列掩码与字做&运算,可以析出字中指定的字段 */
/* 析出高阶n位(注意n的值不能大于int型的宽度) */
#define high_ones(n) (-1<<32-(n))
/* 析出低阶n位 */
#define low_ones(n) (~(-1<<(n)))
/* 析出低阶offset位和高阶32-offset-width位 */
#define mid_zeros(width,offset) \
(-1<<(width)+(offset) | ~(-1<<(offset)))
/* 析出中间width位,它右侧有offset位 */
#define mid_ones(width,offset) \
(~(-1<<(width)+(offset)) & (-1<<(offset)))
/* 对无符号整数x,求比x大且与x中的位1个数相同的下一个整数:
例如对nnn0 1111 0000,则下一个整数为nnn1 0000 01111。
可以用这个函数来遍历一个集合的所有子集 */
#define nextsame1u(x) (right1(x)+(x) | \
(((x)^right1(x)+(x))>>2)/right1(x))
/* 字的绝对值函数:注意x>>31为0或-1,而x^0=x,x^-1=~x */
#define abs(x) (((x)^((x)>>31))-((x)>>31))
/* 绝对值的负值 */
#define nabs(x) (((x)>>31)-((x)^((x)>>31)))
/* 符号扩展:将第7位向左传播(位编号从0开始) */
#define prop7thtolef(x) ((((x) & 0×000000FF) ^ 0×00000080)-0×00000080)
/* 对无符号整数实现算术右移:也可用更简单的((signed)(x)>>n) */
#define arithrshiftu(x,n) ((((x)^0×80000000)>>(n))-(0×80000000>>(n)))
/* 对有符号整数实现逻辑右移:也可用更简单的((unsigned)(x)>>n) */
#define logicrshift(x,n) ((((x)^0×80000000)>>(n))+(1<<31-(n)))
/* 符号函数:x>0返回1,x=0返回0,x<0返回-1 */
#define sign(x) (((x)>0)-((x)<0))
/* 三值比较函数:x>y返回1,x=y返回0,x<y返回-1 */
#define cmp(x,y) (((x)>(y))-((x)<(y)))
/* 符号传递函数:返回采用y的符号后的x */
#define copysign(x,y) ((abs(x)^((y)>>31))-((y)>>31))
/* 比较谓词:带符号整数 */
#define equal(x,y) (~((x)-(y)|(y)-(x))>>31)
#define noteq(x,y) (((x)-(y)|(y)-(x))>>31)
#define less(x,y) ((((x)^(y)) & ((x)-(y)^(x)) ^ (x)-(y))>>31)
#define larger(x,y) ((((y)^(x)) & ((y)-(x)^(y)) ^ (y)-(x))>>31)
#define lesseq(x,y) ((((x)|~(y)) & ((x)^(y) | ~((y)-(x))))>>31)
#define largereq(x,y) ((((y)|~(x)) & ((y)^(x) | ~((x)-(y))))>>31)
/* 比较谓词:无符号整数 */
#define equalu(x,y) (~((x)-(y)|(y)-(x))>>31)
#define notequ(x,y) (((x)-(y)|(y)-(x))>>31)
#define lessu(x,y) ((~(x) & (y) | ~((x)^(y)) & (x)-(y))>>31)
#define largeru(x,y) ((~(y) & (x) | ~((y)^(x)) & (y)-(x))>>31)
#define lessequ(x,y) (((~(x)|(y)) & (((x)^(y)) | ~((y)-(x))))>>31)
#define largerequ(x,y) (((~(y)|(x)) & (((y)^(x)) | ~((x)-(y))))>>31)
/* 溢出检测:带符号运算 */
#define addovf(x,y) ((~((x)^(y))&(((x)+(y))^(x)))>>31)
#define subovf(x,y) ((((x)^(y))&(((x)-(y))^(x)))>>31)
#define mulovf(x,y) ((y)<0 && (x)==0×80000000 || (y)!=0 && (x)*(y)/(y)!=(x))
#define divovf(x,y) ((y)==0 || (x)==0×80000000 && (y)==-1)
/* 溢出检测:无符号运算 */
#define addovfu(x,y) (~(x)<(y)) /* 也可用less(~(x),y) */
#define subovfu(x,y) ((x)<(y)) /* 也可用less(x,y) */
#define mulovfu(x,y) ((y)!=0 && (x) > 0xffffffff/(y))
#define divovfu(x,y) ((y)==0)
/* 循环移位:带符号整数 */
/* 循环左移n位 */
#define rotlshift(x,n) ((x)<<(n) | (unsigned)(x)>>32-(n))
/* 循环右移n位 */
#define rotrshift(x,n) ((unsigned)(x)>>(n) | (x)<<32-(n))
/* 循环移位:无符号整数 */
#define rotlshiftu(x,n) ((x)<<(n) | (x)>>32-(n))
#define rotrshiftu(x,n) ((x)>>(n) | (x)<<32-(n))
/* 正差函数:x>=y时返回x-y,x<y时返回0。注意&优先级高于^,无需要括号 */
#define doz(x,y) ((x)-(y)&~((x)-(y)^((x)^(y))&((x)-(y)^(x)))>>31)
/* 大值函数 */
#define max(x,y) ((y)+doz(x,y))
/* 小值函数 */
#define min(x,y) ((x)-doz(x,y))
/* 下面是无符号版本 */
#define dozu(x,y) ((x)-(y)& arithrshiftu(((x)|~(y))&((x)^(y)|~((x)-(y))) ,31))
#define maxu(x,y) ((y)+dozu(x,y))
#define minu(x,y) ((x)-dozu(x,y))
/* 交换变量的值 */
#define swap(x,y) \
do { x=x^y; y=y^x; x=x^y; } while(0)
/* 根据掩码来交换变量的相应字段:
当m的第i位为1时,交换x,y的第i位;当m的第i位为0时,保留x,y的第i位不变 */
#define swapbits(x,y,m) \
do { x=x^y; y=y^(x&(m)); x=x^y; } while(0)
/* 2个常量的循环赋值:当x为a时赋值b,当x为b时赋值a */
#define rottwo(x,a,b) do{ x=(a)^(b)^x; }while(0)
/* 3个常量的循环赋值 */
#define rotthree(x,a,b,c) \
do{ x=(-(x==c)&(a-c))+(-(x==a)&(b-c))+c; }while(0)
#endif
本文来自CSDN博客,原文出处:http://blog.csdn.net/zhoudaxia/archive/2010/03/28/5425619.aspx#
收集于网络
位运算
位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到位串信息的结果。
位运算符有:
&(按位与)、|(按位或)、^(按位异或)、~ (按位取反)。
其中,按位取反运算符是单目运算符,其余均为双目运算符。
位运算符的优先级从高到低,依次为~、&、^、|,
其中~的结合方向自右至左,且优先级高于算术运算符,其余运算符的结合方向都是自左至右,且优先级低于关系运算符。
(1)按位与运算符(&)
按位与运算将两个运算分量的对应位按位遵照以下规则进行计算:
0 & 0 = 0, 0 & 1 = 0, 1 & 0 = 0, 1 & 1 = 1。
即同为 1 的位,结果为 1,否则结果为 0。
例如,设3的内部表示为
00000011
5的内部表示为
00000101
则3&5的结果为
00000001
按位与运算有两种典型用法,一是取一个位串信息的某几位,如以下代码截取x的最低7位:x & 0177。二是让某变量保留某几位,其余位置0,如以下代码让x只保留最低6位:x = x & 077。以上用法都先要设计好一个常数,该常数只有需要的位是1,不需要的位是0。用它与指定的位串信息按位与。
(2)按位或运算符(|)
按位或运算将两个运算分量的对应位按位遵照以下规则进行计算:
0 | 0 = 0, 0 | 1 = 1, 1 | 0 = 1, 1 | 1 = 1
即只要有1个是1的位,结果为1,否则为0。
例如,023 | 035 结果为037。
按位或运算的典型用法是将一个位串信息的某几位置成1。如将要获得最右4为1,其他位与变量j的其他位相同,可用逻辑或运算017|j。若要把这结果赋给变量j,可写成:
j = 017|j
(3)按位异或运算符(^)
按位异或运算将两个运算分量的对应位按位遵照以下规则进行计算:
0 ^ 0 = 0, 0 ^ 1 = 1, 1 ^ 0 = 1, 1 ^ 1 = 0
即相应位的值相同的,结果为 0,不相同的结果为 1。
例如,013^035结果为026。
异或运算的意思是求两个运算分量相应位值是否相异,相异的为1,相同的为0。按位异或运算的典型用法是求一个位串信息的某几位信息的反。如欲求整型变量j的最右4位信息的反,用逻辑异或运算017^j,就能求得j最右4位的信息的反,即原来为1的位,结果是0,原来为0的位,结果是1。
继续阅读
 圖三、乙太網路的 MAC 訊框
在這個 MAC 當中,最重要的就是那個 6 Bytes 的目的與來源位址了! 事實上,在所有的乙太網路卡當中都有一個獨一無二的網路卡卡號, 那就是上頭的『目的與來源位址』,這個位址是硬體位址( hardware address ), 共有 6 bytes ,分別由 00:00:00:00:00:00 到 FF:FF:FF:FF:FF:FF, 這 6 bytes 當中,前 3bytes 為廠商的代碼,後 3bytes 則是該廠商自行設定的裝置碼了。 在 Linux 當中,你可以使用 ifconfig 這個指令來查閱你的網路卡卡號喔! 不過,由於 MAC 主要是與網路卡卡號有關,所以我們也常常將 MAC 作為網路卡卡號的代稱。 特別注意,在這個 MAC 的傳送中,他僅在區域網路內生效, 如果跨過不同的網域 (這個後面 IP 的部分時會介紹),那麼來源與目的的位址就會跟著改變了。 這是因為變成不同網路卡之間的交流了嘛!所以卡號當然不同了!如下所示:

圖四、在不同主機間持續傳送相同資料的 MAC 訊框變化
例如上面的圖示,我的資料要由電腦 A 通過 B 後才送達 C ,而 B 電腦有兩塊網路卡, 其中 MAC-2 與 A 電腦的 MAC-1 互通,至於 MAC-3 則與 C 電腦的 MAC-4 互通。 但是 MAC-1 不能與 MAC-3 與 MAC-4 互通,為啥?因為 MAC-1 這塊網路卡並沒有與 MAC-3 及 MAC-4 使用同樣的 switch/hub 相接嘛!所以,資料的流通會變成:
- 先由 MAC-1 傳送到 MAC-2 ,此時來源是 MAC-1 而目的地是 MAC-2;
- B 電腦接收後,察看該訊框,發現目標其實是 C 電腦,而為了與 C 電腦溝通, 所以他會將訊框內的來源 MAC 改為 MAC-3 ,而目的改為 MAC-4 ,如此就可以直接傳送到 C 電腦了。
也就是說,只要透過 B (就是路由器) 才將封包送到另一個網域 (IP 部分會講) 去的時候, 那麼訊框內的硬體位址就會被改變,然後才能夠在同一個網域裡面直接進行 frame 的流通啊!
MAC包大小:旧为1900bytes,大为9000bytes
IP 封包的表頭
現在我們知道 IP 這個資料封包 (packet) 是需要放置在 MAC 訊框裡面的,所以當然不能比 MAC 所能容許的最大資料量還大!但是 IP 封包其實可以到 65535 bytes 那麼大的吶! 那麼 IP 封包除了資料之外,他的表頭資料 (head) 是長怎樣呢? 在 圖三的 MAC 訊框表頭裡面最重要的莫過於那個網路卡硬體位址, 那麼在 IP 表頭裡面當然就以來源與目標的 IP 位址為最重要囉! 除此之外, IP 表頭裡面還含有哪些重要資料呢?如底下所示:(下圖第一行為每個欄位的 bit 數)

圖八、IP 封包的表頭資料
在上面的圖示中有個地方要注意,那就是『 每一行所佔用的位元數為 32 bits』, 也就是說, IP 封包的表頭資料是 32 bits 的倍數喔!那各個表頭的內容分別介紹如下:
继续阅读
摘自网络,感谢原作者
摘要:
本文试图成为学习TCP/IP网络组播技术的入门材料。文中介绍了组播通信的概念及原理,以及用于组播应用编程的Linux API的详细资料。为了使读者更加完整的了解Linux 组播的整体概念,文中对实现该技术的核心函数也做了介绍。在文章的最后给出了一个简单的C语言套接字编程例子,说明如何创建组播应用程序。
一、导言
在网络中,主机间可以用三种不同的地址进行通信:
单播地址(unicast):即在子网中主机的唯一地址(接口)。如IP地址:192.168.100.9或MAC地址:80:C0:F6:A0:4A:B1。
广播地址:这种类型的地址用来向子网内的所有主机(接口)发送数据。如广播IP地址是192.168.100.255,MAC广播地址:FF:FF:FF:FF:FF。
组播地址:通过该地址向子网内的多个主机即主机群(接口)发送数据。
如果只是向子网内的部分主机发送报文,组播地址就很有用处了;在需要向多个主机发送多媒体信息(如实时音频、视频)的情况下,考虑到其所需的带宽,分别向每一客户端主机发送数据并不是个好办法,如果发送主机与某些接收端的客户主机不在子网之内,采用广播方式也不是一个好的解决方案。
继续阅读
连接两个局域网的方法除了路由外,比较简单的一个方法就是网络桥接了。这里将列出linux下创建网络桥接的一般步骤。
如下图的所示的网络环境中,中间的桥接计算机具有无线和有线网卡各一块,连接了两个局域网。在这个网络环境中两个局域网处于同一个网段,它可能是由桥接计算机上的DHCP自动分配的地址。这样做,最终产生的情况将是无线终端连接到了桥接计算机的无线网卡ath0(ath0工作在AP模式),有线网局域网通过交换机连接到了桥接计算机的eth0(有线网卡),连接在不同的两个物理网络上,通过桥接,使他们工作在同一个局域网中,同时,可以隔离两个物理网络,这是网络隔离中比较常见的手段。
linux下使用桥接功能必须确保已经安装了bridge-utils,桥接方法如下:
1.创建br0: brctl addbr br0
2.添加物理网口:brctl addif br0 eth0; brctl addif br0 ath0
3.配置br0 IP: ifconfig br0 192.168.1.100 netmask 255.255.255.0 up
4. 启用物理网络:ifconfig ath0 up; ifconfig eth0 up
5.修改DHCP配置,使之在br0网口上分配地址。
如需要,可以用iptables来隔离两个物理网络。
前几天重装了系统,可惜之前离职的同事为我配置的DNS服务器忘了备份,没有了,只能自己动手来。
DNS的基本理论知识还是知道一些,也知道bind组件,记得在装Linux的时候勾选了DNS,这里就省去了一步安装bind组件了。必须安装的组件应该是bind,bind-libs,bind-chroot,我猜的。其实系统中还装了bind-utils,这个工具集不知道是否必须,ypbind不知道是什么东东,不管它。
其实配置这些服务不算难,一般的帮助文档都能在/usr/share/doc/中能找到。bind也不例外,/usr/doc/bind*/下边就是所有的文档了。而且给了一个sample,这不是很方便么。
值得记下来的是bind-chroot组件,这个东东使得/var/named/chroot变成了bind所认为的根目录,记得好像在哪里见过说涉及安全还是权限问题。所以配置文件中提到的/etc/ /var/***都指的是/var/named/chroot/下的,而不是真正的系统根目录。这一点让我困惑了好一阵子。
sample给的还是很有用意的,稍微想一下就会发现,sample下的etc目录,其实就是指/var/named/chroot下的etc目录,换句话说,/var/named/chroot/etc/里边的东东应该长的和/usr/share/doc/bind*/sample/etc/里差不多。同理,sample下的var目录就对应了/var/named/chroot/var。
不要一股脑的复制sameple到chroot中,最好对比着named.conf中所需要的东西来复制,其实默认的named.conf有些貌似也用不到,在我这里,反而因为一项加密的东西ddns_key而导致bind无法启动,删掉后正常了。
在named.conf中应该添加一个自己的zone,仿照着其他例子来写就OK,有个named.rfc***.zones,可以参照。然后在/var/named/chroot/var/named中建立同名的zone文件,同样的仿照其他的zone文件来写。
下班时间到了,详细的就不记录了,很多东西不懂,照猫画虎的配置出来一个,先应付着。
转载自网络
在终端下使用vim进行编辑时,默认情况下,编辑的界面上是没有显示行号、语法高亮度显示、智能缩进等功能的。为了更好的在vim下进行工作,需要手动设置一个配置文件:.vimrc。
在启动vim时,当前用户根目录下的.vimrc文件会被自动读取,该文件可以包含一些设置甚至脚本,所以,一般情况下把.vimrc文件创建在当前用户的根目录下比较方便,即创建的命令为:
$vi ~/.vimrc
设置完后
$:x 或者 $wq
进行保存退出即可。
下面给出一个例子,其中列出了经常用到的设置,详细的设置信息请参照参考资料:
“双引号开始的行为注释行,下同
“去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限
set nocompatible
“显示行号
set nummber
“检测文件的类型
filetype on
“记录历史的行数
set history=1000
“背景使用黑色
set background=dark
“语法高亮度显示
syntax on
“下面两行在进行编写代码时,在格式对起上很有用;
“第一行,vim使用自动对起,也就是把当前行的对起格式应用到下一行;
“第二行,依据上面的对起格式,智能的选择对起方式,对于类似C语言编
“写上很有用
set autoindent
set smartindent
“第一行设置tab键为4个空格,第二行设置当行之间交错时使用4个空格
set tabstop=4
set shiftwidth=4
“设置匹配模式,类似当输入一个左括号时会匹配相应的那个右括号
set showmatch
“去除vim的GUI版本中的toolbar
set guioptions-=T
“当vim进行编辑时,如果命令错误,会发出一个响声,该设置去掉响声
set vb t_vb=
“在编辑过程中,在右下角显示光标位置的状态行
set ruler
“默认情况下,寻找匹配是高亮度显示的,该设置关闭高亮显示
set nohls
“查询时非常方便,如要查找book单词,当输入到/b时,会自动找到第一
“个b开头的单词,当输入到/bo时,会自动找到第一个bo开头的单词,依
“次类推,进行查找时,使用此设置会快速找到答案,当你找要匹配的单词
“时,别忘记回车
set incsearch
“修改一个文件后,自动进行备份,备份的文件名为原文件名加“~“后缀
if has(“vms”)
set nobackup
else
set backup
endif
如果去除注释后,一个完整的.vimrc配置信息如下所示:
继续阅读
普通家用的路由器可以称之为标准的linux嵌入式设备,所以拥有一台linux主机,也就可以具备路由器的全部功能。所需要的是可能你的linux主机需要至少两块网卡,或者还需要无线网卡。
提及一下简单的思路,具体的软件安装和配置方法可以分别从网上搜索。
编辑/etc/sysctl.conf文件中的net.ipv4.ip_forward值,将其修改为1,保存后再使用sysctl -p命令使配置即时生效。或者使用echo “1″ > /proc/sys/net/ipv4/ip_forward命令临时开启,重启后不生效的。这样就开启了Linux的路由转发功能。
再者安装DHCP,使你的linux主机成为一台DHCP服务器,DHCP的安装很简单,一般linux发行版都带有这个软件,如果默认没有安装使用安装光盘安装,或者从网上下载也可,只是版本众多,所以用光盘里的也是最省事的办法。配置文件为/etc/dhcpd.conf,具体的配置可以参考我的另一篇文章启用dhcp relay为不同子网分配IP, option domain-name-servers需要配置为本机的IP,也就是你DHCP服务器准备分配地址的网卡IP。
接下来就需要安装DNS服务器了,这里使用DNS并不是需要这台主机解析域名,仅仅是一个转发DNS请求的作用。所以安装后应该不需要配置什么。安装的组件应该是bind,bind-chroot等。 当然,如果DHCP的option domain-name-servers配置了一个可用的公网DNS,那么就不需要安装DNS了。
最后还需要iptables来开启NAT伪装,来做地址转换,开启的命令如下,iptables -t nat -A POSTROUNTING -o eth0 -j MASQUERADE ,具体网口地址就是你的外网口,视具体情况修改。可以将这条命令写入/etc/rc.d/rc.local或者用iptables-save > /root/iptables-saved来保存目前的iptables状态,再将iptables-restore /root/iptables-saved写入/etc/rc.d/rc.local,来使开机配置生效。
这样简单的就成了,工作的原理也很简单了,linux主机为客户端分配IP,分配网关、DNS,网关地址和DNS地址应该都是这台linux主机,这台linux主机的外网口接入了互联网,他的接入方式可能是局域网静态地址,也可能是动态地址,或者是PPPOE拨号接入的,这些都无所谓,我们的linux主机始终会将另一个内网口(dhcp分配地址所在的网卡)的数据转发至外网口上来,从而使客户端看起来在通过一台路由器上网了。
或者还可以安装NTP,PPPOE服务,甚至radius,如果有无线网卡,也许还应该有hostapd来配合无线网卡来加密SSID,总之就是随心所欲了。
所有的安装配置都写的很简单,旨在记录一种思路和方法,以备不时之需了。
具体的关系来历没有研究过,只知道kernel和madwifi在我的编程过程中给我提供了很大的帮助。
sysctl—configure kernel parameters at runtime.看看说明也能知道这个命令有多么强大了,通过sysctl -a 可以查看到可供配置的参数列表,怎能用一个”太多”来形容了,我只是用到了sysctl -w dev.wifi0.maxstation=n指定AP上所能连接的终端个数。(我们随时要养成尝试-h –help man来寻找命令帮助,这样我们就知道 -w是改变设置的意思了),怎么才能知道这一堆的列表都是什么意思,其实我也想知道。
iwpriv搞清是属于kernel还是madwifi,总之我可以用它来开启黑/白名单,相关的帮助的文档在madwifi的wiki http://madwifi-project.org/wiki/UserDocs/iwpriv,额,应该是属于madwifi了。这个wiki我们可以找到很多有帮助的东西了。
创建一个白名单的办法如下
iwpriv ath0 maccmd 3
iwpriv ath0 addmac 00:11:22:33:44:55
iwpriv ath0 addmac aa:aa:aa:aa:aa:aa
iwpriv ath0 maccmd 1
黑名单只需要将iwpriv ath0 maccmd 1改为2就好了,http://madwifi-project.org/wiki/UserDocs/iwpriv 这里表达的更专业一些。
另外,以下几个proc文件帮助了我
/proc/net/dev/(设备信息),/proc/net/madwifi/ath0(ath0的信息,associated_sta保存了连接到该设备的终端信息)
=============================================
对了,还有一个关于netlink的问题。
当一个终端连接到AP时,最终会被kernel知晓而发出了一个socket信息。hostapd则是监听到了这个socket以后才能对这个socket中包含的WPA密码信息处理。不知道哪位大侠已经帮我们从hostapd里抠出了这段代码,方便我们在自己的程序里来捕捉终端接入这个事件。网上可以下载到喽,传送门在这里(http://blog.chinaunix.net/u1/38994/showart_1353632.html)。 貌似我有些不厚道了,怎么能用抠这个字。
乱七八糟的笔记,但愿下回还能看懂。
|
|
COMMENTS