New FAMILUG

The PyMiers

Wednesday 30 January 2013

Kết nối wifi bằng dòng lệnh

UPDATED: lỗi format bài viết (phần nội dung file wpa)

NOTE1: bài viết này thực hiện trên ubuntu 12.04 LTS, các phiên bản khác chưa test. Nếu bạn thực hiện thành công trên các phiên bản khác, vui lòng gõ lệnh `lsb_release -a` paste và comment là đã thành công. Cám ơn!
NOTE: bài viết này đòi hỏi có hiểu biết cơ bản về interface, route.

Một trong những câu lệnh rất ít người biết cách dùng đó là lệnh để config mạng wifi, bởi Ubuntu luôn đi kèm với NetworkManager.

Trước hết cần phân biệt loại key mà mạng wireless đó đang sử dụng.
Nếu là WEP: có thể dùng iwconfig
Nếu là WPA: phải dùng wpa_supplicant

hvn@lappy: ~ () $ sudo iwlist wlan0 scan | egrep -i 'ssid|WPA|WEP'
                    ESSID:"Home"
                    IE: WPA Version 1
                    ESSID:"familug"
                    IE: WPA Version 1

                    ESSID:"TP-LINK207"
                    IE: IEEE 802.11i/WPA2 Version 1
                    ESSID:"NGUYENKHOA"
                    IE: IEEE 802.11i/WPA2 Version 1
                    IE: WPA Version 1
                    ESSID:"Tuan Phuong"
                    IE: WPA Version 1
                    IE: IEEE 802.11i/WPA2 Version 1
                    ESSID:"NgaHome"
                    IE: IEEE 802.11i/WPA2 Version 1
                    IE: WPA Version 1
                    ESSID:"Quyen"
                    IE: IEEE 802.11i/WPA2 Version 1
                    IE: WPA Version 1


Mạng nhà tớ dùng chuẩn WPA nên tớ sẽ lấy làm ví dụ luôn:

Đầu tiên phải tạo 1 file chứa tên (ssid) và mật khẩu (passkey) của mạng nhà mình:

tớ đặt file đấy là familug.wpa:

root@lappy: ~/Documents () # cat familug.wpa
network={
    ssid="familug"
    psk="xxxxxxxx"

}

#CHÚ Ý: dấu } không cùng dòng với psk
Sau đó chạy lệnh wpa_supplicant để kết nối mạng:

root@lappy: ~/Documents () # wpa_supplicant -c familug.wpa -i wlan0 -B
ioctl[SIOCSIWENCODEEXT]: Invalid argument
ioctl[SIOCSIWENCODEEXT]: Invalid argument


Giải thích:
-c : config - đường dẫn đến file chứa tên và pass của mạng
-i : interface, ở đây là wlan0
-B : chạy ở chế độ background, sẽ không in ra gì kả
-d : nếu thay -B bằng option này, câu lệnh sẽ in ra terminal các thông số mà nó thu thập / xử lý

Trong /var/log/syslog sẽ có vài dòng như sau:

Jan 30 21:00:13 lappy wpa_supplicant[13910]: Trying to authenticate with c8:3a:35:0e:93:40 (SSID='familug' freq=2412 MHz)
Jan 30 21:00:13 lappy kernel: [ 2444.696805] wlan0: authenticate with c8:3a:35:0e:93:40 (try 1)
Jan 30 21:00:13 lappy wpa_supplicant[13910]: Trying to associate with c8:3a:35:0e:93:40 (SSID='familug' freq=2412 MHz)
Jan 30 21:00:13 lappy kernel: [ 2444.698860] wlan0: authenticated
Jan 30 21:00:13 lappy kernel: [ 2444.699092] wlan0: associate with c8:3a:35:0e:93:40 (try 1)
Jan 30 21:00:13 lappy kernel: [ 2444.702560] wlan0: RX AssocResp from c8:3a:35:0e:93:40 (capab=0x411 status=0 aid=4)
Jan 30 21:00:13 lappy kernel: [ 2444.702569] wlan0: associated
Jan 30 21:00:13 lappy wpa_supplicant[13910]: Associated with c8:3a:35:0e:93:40
Jan 30 21:00:13 lappy kernel: [ 2444.710144] ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
Jan 30 21:00:13 lappy wpa_supplicant[13910]: WPA: Key negotiation completed with c8:3a:35:0e:93:40 [PTK=CCMP GTK=CCMP]
Jan 30 21:00:13 lappy wpa_supplicant[13910]: CTRL-EVENT-CONNECTED - Connection to c8:3a:35:0e:93:40 completed (auth) [id=0 id_str=]


NOTE: chú ý là máy của bạn chỉ nên chạy 1 process wpa_suplicant thôi. Vậy nên trước khi chạy lệnh này, hãy `sudo killall wpa_supplicant`

Sau khi "kết nối" vào mạng rồi, bạn vẫn chưa thể vào internet, bởi còn phải route đường đi cho các gói tin. Mọi thứ có vẻ rắc rối hơn việc dùng giao diện để kết nối, thế nhưng những thứ này chính là những gì mà "giao diện" thực hiện.

root@lappy: ~ () # ip ro add default via 192.168.0.1
root@lappy: ~ () # ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_req=1 ttl=128 time=90.7 ms
^C
--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 90.734/90.734/90.734/0.000 ms

root@lappy: ~ () # ip ro
default via 192.168.0.1 dev wlan0
192.168.0.0/24 dev wlan0  proto kernel  scope link  src 192.168.0.103


Chỗ nào cần giải đáp cứ hỏi :D


PS:
Ví dụ để kết nối mạng WEP có trong `man iwconfig`
iwlist wlan0 scan
iwconfig wlan0 essid NETWORK_ID key WIRELESS_KEY
 
 

8 comments:

  1. hi ban, ( sorry vi chua cai unikey )

    minh dang test cai nay trong Ubuntu 12.10 nhung ban dau minh tao file familug.wpa giong ban, sau lenh wpa_supplicant -c familug.wpa -i eth1 -d dang co feedback nhung minh lam moi thanh file tamquynh.wpa nhung wpa_supplicant -c tamquynh.wpa -i eth1 -d thi no bao:

    root@voikoi-Vostro1310:/# wpa_supplicant -c /tamquynh.wpa -i eth1 -d
    wpa_supplicant v1.0
    random: Trying to read entropy from /dev/random
    Initializing interface 'eth1' conf '/tamquynh.wpa' driver 'default' ctrl_interface 'N/A' bridge 'N/A'
    Configuration file '/tamquynh.wpa' -> '/tamquynh.wpa'
    Reading configuration file '/tamquynh.wpa'
    Line 3: network block was not terminated properly.
    Line 3: failed to parse network block.
    Failed to read or parse configuration '/tamquynh.wpa'.
    Failed to add interface eth1
    : Cancelling scan request
    : Cancelling authentication timeout

    ban co the giup do minh duoc ko ^^

    ReplyDelete
    Replies
    1. bạn gõ `ip li` xem lại interface wifi có phải là eth1 không?
      nếu có thể , vui lòng post kết quả các câu lệnh sau lên pastebin.com rồi paste vào đây:

      ip ad
      wpa_supplicant -c familug.wpa -i eth1 -d
      cat tamquynh.wpa (bạn có thể đổi passkey đi )

      Delete
    2. This comment has been removed by the author.

      Delete
  2. link http://pastebin.com/0kEJj1iF

    ma minh xoa familug.wpa roi chi con tamquynh.wpa thoy

    ReplyDelete
    Replies
    1. bạn thử xuống dòng sau passkey, trước dấu } xem.
      Chắc đây là lỗi format bài viết của mình.

      Delete
    2. no' da chay nhung feedback qa' troi` dong` lenh nhung ko giong nhu cua ban, them nua rot' mang lun, minh phai restart may' moi' vao` mang lai duoc, file syslog cua minh qua' troi` dong` lun

      Mong ban giup do ,hihi

      Delete
    3. 1. paste log nó phun vào syslog lên pastebin rồi paste vào đây.
      2. bạn nên tắt NetworkManager đi, ko nên dùng 2 cái cùng lúc.

      Delete
  3. Khi minh` go lenh :
    wpa_supplicant -c familug.wpa -i eth1 -B

    no khong xuat hien :
    ioctl[SIOCSIWENCODEEXT]: Invalid argument
    ioctl[SIOCSIWENCODEEXT]: Invalid argument

    nhu ban lam`. Vi` sao nhi ?

    ReplyDelete