wpa 移植到ubuntu上

1 下载源代码:

 下载wpa_supplicant-0.7.3.tar.gz (openssl用到0.7.3提供的补丁)

      http://hostap.epitest.fi/wpa_supplicant/

下载www.openssl.org/source/openssl-0.9.8e.tar.gz



linux wifi拨号软件移植wpa_supplicant、openssl

因为现在的无线wifi网络大多是wpa加密。所以需要移植wpa_supplicant工具。

一、下载源码

        下载wpa_supplicant-0.7.3.tar.gz (openssl用到0.7.3提供的补丁)
                #tar xvfz wpa_supplicant-0.7.3.tar.gz
        下载 www.openssl.org/source/openssl-0.9.8e.tar.gz
                #tar zxvf openssl-0.9.8e.tar.gz

二、编译openssl库
将wpa_supplicant中的补丁拷贝到openssl中 
        # cp wpa_supplicant-0.7.3/patches/openssl-0.9.8e-tls-extensions.patch openssl-0.9.8e/
        #cd openssl-0.9.8e
        #mkdir /usr/local/ssl
        #vim Makefile
                CC= arm-linux-gnu-gcc
                AR= arm-linux-gnu-ar $(ARFLAGS) r
                RANLIB= arm-linux-gnu-ranlib
                INSTALLTOP=/usr/local/ssl
                OPENSSLDIR=/usr/local/ssl
        #make 
        #make install

在/usr/local/ssl目录下安装了ssl库
 #ls /usr/local/ssl
 #bin  certs  include  lib  man  misc  openssl.cnf  private

后面编译wpa_supplicant要依赖openssl中的lib和include


碰到问题:NUMPRIMES没有定义
原因:bn_prime.h 内容为空
解决办法:进入crypto/bn目录运行:perl crypto/bn/bn_prime.pl >bn_prime.h

三、编译wpa_supplicant 
进入wpa_supplicant-0.7.3.tar.gz解压生成的wpa_supplicant-0.7.3/wpa_supplicant目录中:
        #cp defconfig        .config
        #vim .config
                CC=arm-linux-gcc  -L/usr/local/ssl/lib/
          #CC=/opt/brcm/hndtools-mipsel-uclibc/bin/mipsel-uclibc-gcc
CFLAGS += -I/usr/local/ssl/include
#CPPFLAGS += -I../src/include -I../../src/router/openssl/include
LIBS += -L/usr/local/ssl/lib
        #make

        经过编译后的wpa_supplicant源程序可以看到两个主要的可执行工具:wpa_supplicant和wpa_cli。wpa_supplicant是核心程序,它和wpa_cli的关系就是服务和客户端的关系:后台运行wpa_supplicant,使用wpa_cli来搜索、设置、和连接网络。

碰到问题: cannot find -lcrypto

Makefile增加LIBS_p += -L/usr/local/ssl/lib


编译生成wpa_supplicant、wpa_passphrase,将这两个文件拷贝到目标板的/bin/目录下。


在目标板中创建/etc/wpa_supplicant.conf文件,文件内容如下:

ctrl_interface=/var/run/wpa_supplicant


network={
                ssid="max"     //填写无线网络的的用户名
                key_mgmt=WPA-PSK
                proto=WPA
                pairwise=TKIP
                group=TKIP
                psk="1234567890" //填写密码
}


还有一种说法,说需要使用wpa_passphrase ssid名 密码 >> /etc/wpa_supplicant.conf来给密码加密,但我实际使用过程中发现并不需要这个,所以有朋友遇到拨号不上,可以使用这个加密一下密码试试,方法如下:

之后wpa_supplicant.conf中会添加以下内容,然后把最后面的经过加密的密码修改到上面去,再把下面的内容删掉!

network={
      ssid="max"
      #psk="1234567890"
      psk=4b2bc7cbb3710e9ea43f09e8d57e8bdb3b2a2127af44960d73216c3612f6baba
}

如:

network={

                ssid="max"     //填写无线网络的的用户名
                key_mgmt=WPA-PSK
                proto=WPA
                pairwise=TKIP
                group=TKIP

                psk=4b2bc7cbb3710e9ea43f09e8d57e8bdb3b2a2127af44960d73216c3612f6baba               

                #psk="1234567890" //填写密码
}


运行:wpa_supplicant -iwlan0 -c/etc/wpa_supplicant.conf 

然后再:ifconfig wlan0 192.168.1.99 netmask 255.255.255.0

运行ping网关。



再然后,编辑/etc/network/interfaces:

pre-up wpa_supplicant -Bw -Dwext -i eth1 -c/etc/wpa_supplicant.conf 

post-down killall -q wpa_supplicant 


sudo  /etc/init.d/networking restart


1,备份一下/etc/network/interfaces

cp /etc/network/interfaces /etc/network/interfaces_bak  

2,下面是我的interfaces文件内容

  1. #auto eth0  
  2. #iface eth0 inet static  
  3. #address 192.168.1.118  
  4. #gateway 192.168.1.1  
  5. #netmask 255.255.255.0  
  6.   
  7. auto wlan0  
  8. iface wlan0 inet static  
  9. address 192.168.1.139  
  10. gateway 192.168.1.1  
  11. netmask 255.255.255.0  
  12. wpa-ssid TP-LINK_196958     //用户名  
  13. wpa-psk ×××××                 //无线密码  

sudo vi /etc/network/interfaces

auto mlan0

iface mlan0 inet static

   address 192.168.1.114

   gateway 192.168.1.1

   netmask 255.255.255.0

   

echo "nameserver 211.98.1.28">> /etc/resolv.conf

ifconfig eth0 192.168.22.23

route add default gw 192.168.22.1

ifconfig eth59 192.168.22.47 netmask 255.255.255.0 up
nameserver 202.106.0.20


route add default gw 192.168.22.1



      Ubuntu操作系统安装完成后网络管理默认是用DHCP自动获取IP地址的,之前在自己住宿就一两台机使用反正也没啥差就懒得改为静态固定IP,但是最近在公司使用vm虚拟机下安装了台Ubuntu8.10玩一玩,有时基本使用SecureCRT软件SSH远程登陆使用,但是由于公司使用都是内部动态 IP地址,而且机器较多所以导致IP地址经常性更换,有点烦所以自己决定试图修改成使用静态IP,可是那个可恶的NetworkManager总是在重启后又变成默认的DHCP自动获取IP。。。故决定删除彻底NetworkManager

1 sudo apt-get –purge remove network-manager
2 sudo apt-get –purge remove network-manager-gnome

        手动设置静态IP地址:编辑修改网络接口配置文件/etc/network/interfaces

1 sudo vim /etc/network/interfaces
2 auto lo
3 iface lo inet loopback
4 auto eth0
5 iface eth0 inet static
6         address 172.17.4.170
7         netmask 255.255.255.0
8         network  172.17.4.1
9         gateway 172.17.4.3

        修改设置DNS服务器配置文件/etc/resolv.conf

1 sudo vim /etc/resolv.conf
2 nameserver 202.101.103.54
3 nameserver 202.101.103.55
4 nameserver 172.17.4.1

        最后重启网络服务

1 sudo /etc/init.d/networking restart

        这样上网基本就没什么问题啦/// 如果你之前没有删除NetworkManager网络管理的话,重启后/etc/resolv.conf里面的配置文件又会被修改为

1 # Generated by NetworkManager

        导致又是使用DHCP动态分配IP地址的。

Linux 手动无线网卡 WiFi 配置

操作环境: ArchLinux Linux myhost 2.6.36-ARCH 
硬件: USB 无线网卡 TL-WN821N
1. 安装 wireless_tools 和 madwifi
pacman -S wireless_tools madwifi
2. 查看网卡状态
lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 002: ID 093a:2510 Pixart Imaging, Inc. Optical Mouse
Bus 001 Device 003: ID 0cf3:7015 Atheros Communications, Inc. 
在USB接口001/003上检测到网卡。

iwconfig
lo        no wireless extensions.

eth0      no wireless extensions.

wlan0     IEEE 802.11bgn  ESSID:off/any  
          Mode:Managed  Access Point: Not-Associated   Tx-Power=0 dBm   
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
无线网卡为 wlan0
3. 激活网卡
ifconfig wlan0 up
因为我的网卡必需要先激活才能扫描,否则下一步scan会出现错误:wlan0 Interface doesn't support scanning.
4. 扫描网络
iwlist wlan0 scan
wlan0     Scan completed :
          Cell 01 - Address: 54:E6:FC:22:E1:D2
                    Channel:1
                    Frequency:2.412 GHz (Channel 1)
                    Quality=53/70  Signal level=-57 dBm  
                    Encryption key:on
                    ESSID:"TP-LINK_22E1D2"
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s
                              9 Mb/s; 12 Mb/s; 18 Mb/s
                    Bit Rates:24 Mb/s; 36 Mb/s; 48 Mb/s; 54 Mb/s
                    Mode:Master
                    Extra:tsf=000000292a41bd80
                    Extra: Last beacon: 960ms ago
                    IE: Unknown: 000E54502D4C494E4B5F323245314432
                    IE: Unknown: 010882848B960C121824
                    IE: Unknown: 030101
                    IE: IEEE 802.11i/WPA2 Version 1
                        Group Cipher : CCMP
                        Pairwise Ciphers (1) : CCMP
                        Authentication Suites (1) : PSK
                    IE: WPA Version 1
                        Group Cipher : CCMP
                        Pairwise Ciphers (1) : CCMP
                        Authentication Suites (1) : PSK
发现WPA2-PSK/WPA-PSK 加密网络 TP-LINK_22E1D2

因为加密方式为 WPA-PSK 所以得用 wpa_supplicant 而不能使用 iwconfig wlan0 key xxx 形式,iwconfig key方式适用于WEP。
5. 配置 wpa_supplicant
新建文件 /etc/my_wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
network={
	ssid="TP-LINK_22E1D2"
	psk="密码"
}
因为全部使用默认配置,所以配置文件非常简单。
6. 连接wlan0到网络,并以daemon方式运行
wpa_supplicant -B -i wlan0 -c /etc/my_wpa_supplicant.conf 

-B Background 在后台以daemon 运行
-i interface 
-c 配置文件
7. 设置IP地址
ifconfig wlan0 192.168.1.131

ifconfig 查看状态
wlan0     Link encap:Ethernet  HWaddr 54:E6:FC:03:0D:6B  
          inet addr:192.168.1.131  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:95 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:32434 (31.6 Kb)  TX bytes:576 (576.0 b)
8. 加入网关到路由
我的网关的是192.168.1.1
添加通过wlan0访问的网关
route add default gw 192.168.1.1 dev wlan0

route 查看route状态
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     *               255.255.255.0   U     0      0        0 wlan0
default         192.168.1.1     0.0.0.0         UG    0      0        0 wlan0
9. 设置完毕。
以后上线只需运行
wpa_supplicant -B -i wlan0 -c /etc/my_wpa_supplicant.conf 
ifconfig wlan0 192.168.1.131
route add default gw 192.168.1.1 dev wlan0
即可
10. 相关命令
关闭连接
wpa_cli terminate
连接状态
wpa_cli status
题外话:无线网卡的自动配置
无线网卡的自动配置,可通过netcfg2,具体参见 ArchLinux Wiki Netcfg 一文,非常详细。
共1条Pingback
共11条评论
  1. feiyu @ 2011-03-05 11:18:29 回复

    请问我的无线网络没有密码的话,第4步以后该如何做?
    直接在/etc/network/interfaces加入3行
    auto wlan0
    iface wlan0 inet dhcp
    wireless-essid my_essid
    就可以了么?
    会自动启用11N的模式么?
    madwifi跟ndiswrapper两种方式,哪种更加稳定、节约资源呢?

    • JiangMiao @ 2011-03-05 16:18:43

      如果手动的话 无密码为 5,6步并为
      iwconfig wlan0 essid ESSID 比如 我的是 iwconfig wlan0 essid TP-LINK_22E1D2
      如果有WEP密码则再加入 iwconfig wlan0 key PASSWORD
      余下的从7步设置ip和route即可。

      看你的interfaces配置应该是没问题的。可能再需要添加route的相关配置。比如
      up route del default
      up route add default gw 192.168.1.1 dev wlan0

      ndiswrapper 没用过,不好说,

  2. feiyu @ 2011-03-07 21:09:45 回复

    好不容易找到驱动了,TL-WN821N V3版的芯片是AR9271,之前一直以为是7010的,看到芯片信息0cf3 :7015,又看到有别人说是7010,就先入为主了,绕了弯路。这下既不用ndiswrapper,也不用madwifi了,用的是compat- wireless编译安装的Firmware。应该是最稳定的方案了吧,试用一段时间再看看。。。
    参考了2篇文章:http://linuxwireless.org/en/users/Drivers/ath9k_htc
    http://blog.sina.com.cn/s/blog_593c5b070100mcap.html

    • felonwan @ 2011-04-19 11:23:38

      你好,我在Ubuntu下使用下,在用TL-WN821N,看到的芯片信息也是0cf3:7015。

      不知道你现在用的情况怎么样?最后Firmware是用的7010还是9270?能不能把具体过程再详细点介绍一下?谢谢。

    • JiangMiao @ 2011-04-19 14:31:20

      请问哪步的结果和文章中显示的不一样?

  3. felonwan @ 2011-04-19 20:40:06 回复

    呵呵,搞定了。
    我是用了一个图形工具装了ath92_htc,里面带了ar9271和ar7010的firmware。
    可以很方便地用网络管理器管理无线连接。

  4. 请问一下,有试过一台设备有两个网络设备通讯问题嘛? @ 2012-02-17 00:03:28 回复

    你好!有没有试过一台设备有两个网络设备,一个是wifi ,一个是eth0(有线设备),并且它们都是处于同一个局域网内的,如何保证wifi和ethO不相互影响,比如说,当eth0异常时,我们仍然可以ping得wifi地址?

    • JiangMiao @ 2012-02-19 13:31:11

      没有很好的答案。思路是eth down时触发wlan up。

  5. 蒋カイセキ @ 2012-06-13 21:55:51 回复

    樓上的意思是想wlan0和eth0不同IP是能夠使用的,
    如果你想要使用同一個IP的話可以寫個腳本獲取eth0的連接狀態,如果掉線後就開啓wlan0,並且設置IP,不過當切換時會有個間隔

    • JiangMiao @ 2012-06-27 15:58:48

      这个方法好。

发表评论

电子邮件地址不会被公开。 必填项已被标记为 *

 *

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值