Tái thiết lập kết nối adsl bằng python script.

Lâu lắm rồi mới có thời gian ngồi nghịch cái gì đó, hôm nay rảnh rỗi gửi bài này lên cho blog đỡ quạnh🙂.
Hôm rồi có đọc một bài viết của một bạn bên ubuntu-vn tại đây nói về việc viết script điều khiển modem tự động làm mới kết nối tới ISP. Cái này là một khả năng sẵn có của trình hỗ trợ tải tệp tin qua internet jdownloader để có thể tải tại một số free hosts bắt người dùng phải chờ đợi một khoảng thời gian giữa hai lần tải, tuy vậy không phải bất kỳ một modem nào cũng được jdownloader hỗ trợ😉.
Là một người hiếu kỳ thì tớ cũng muốn biết cách nào để tự động hóa chuyện đó nhưng đọc tiếp các bài sau không thấy tác giả đả động tới việc làm như thế nào (giấu nghề chăng?) nên tớ liền tự thân vận động, phụt google chrome lên hỏi cụ google về chuyện này. Hmm, sau một hồi tìm kiếm (phải một hồi vì tớ không giỏi google + tiếng Tây lắm nên không thể tìm được tổ hợp từ khóa thích hợp ngay lập tức🙂 ) thì tớ tìm được bài viết này, đọc sơ qua bài viết với sự hỗ trợ của google translate tớ mang máng hiểu được các công đoạn cần làm để có thể đi tới đích:
1. Thử tìm hiểu coi modem được sử dụng có hỗ trợ telnet/ssh … không? (thường sẽ là telnet)
2. Khi telnet/ssh đến modem thì nhập tài khoản và mật mã có đặc điểm gì?
3. Sử dụng lệnh gì để làm mới kết nối adsl tới ISP?
4. Viết script tự động hóa tất cả các công đoạn trên🙂.

Bắt đầu:

Một:

Tớ phóng anh terminal lên và gõ :

tuantub@tuantub-desktop:~$ telnet 192.168.1.1

(ở đây 192.168.1.1 là địa chỉ của modem nhà tớ trong nội mạng)

Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.

User name: admin

Password: ************

ras>

hmm, gõ gì tiếp ta? Gõ đại vậy🙂

ras> help
Valid commands are:
sys             exit            ether           wan
ip              bridge          certificates    bm
lan             fxs             slic            voice
isdn            autoSec

hmm, cái wan là cái đáng chú ý, gõ tiếp:

ras> wan
atm             node            hwsar           callsch
adsl            zeroCfg

adsl cũng đáng chú ý😉, gõ tiếp:

ras> wan adsl
chandata        opmode          linedata        perfdata
rateadap        reset           status          open
opencmd         close           coinfo          targetnoise
version         errorsecond     driver          DiagnosticsInfo
statistics      config

voilà ! có thêm lệnh reset🙂 vậy thử gõ :

ras> wan adsl reset

và quay sang dòm chú modem –> đèn internet tắt, nhấp nháy liên hồi, như vậy là câu lệnh trên có tác dụng làm mới kết nối ! Công nhận mình rùa thiệt🙂.

Xong công đoạn 1… 2,3 một cách may mắn🙂 tớ quay trở lại với bài viết được link ở phần trên và tìm cách bắt trước script trong bài đó.

…Bốn:
Để ý các công đoạn login ở phần trên thì những điểm cần chú ý là:
a. Khi hiện dòng ‘User name: ‘ thì sẽ nhập tên đăng nhập (thường sẽ là admin).
b. Khi hiện dòng ‘Password: ‘ thì sẽ nhập mật khẩu (ở đây tớ dùng YoullNeverSeeMyPassword )
c. Khi hiện ‘ras> ‘ thì có thể gửi lệnh
(Chú ý :mỗi modem sẽ có những bước tương tự nhưng có thể có ký hiệu khác nhau😉 )

Tớ sửa đổi script của tác giả một chút thành:

#!/usr/bin/env python

import pexpect

p = pexpect.spawn('telnet 192.168.1.1')
p.expect('User name: ')
p.sendline('admin')    # Sending Username.
p.expect('Password: ')
p.sendline('YoullNeverSeeMyPassword')    # Sending Password.
p.expect('ras> ')
p.sendline('wan adsl reset')    # Sending command to the shell.

(Chú ý: để chạy script trên phải cài thêm gói python-pexpect)
và chạy thử nhưng không có tác dụng, hmm sao vậy ta? Thử chạy trong python shell thì cũng không thấy kết quả gì, thử gõ thêm một số lệnh:

>>> p = pexpect.spawn('telnet 192.168.1.1')
>>> p.expect('User name: ')
0
>>> p.sendline('admin')    # Sending Username.
6
>>> p.expect('Password: ')
0
>>> p.sendline('YoullNeverSeeMyPassword')    # Sending Password.
13
>>> p.expect('ras> ')
0
>>> p.sendline('wan adsl reset')    # Sending command to the shell.
15
>>> p.before
'************\r\n\r\n'
>>> p.readline()
'\x1b7wan adsl reset\x1b7\x1b7\x1b7\x1b7\x1b7\x1b7\x1b7\x1b7\x1b7\x1b7\x1b7\x1b7\x1b7\x1b7\r\n'

thì thấy kết nối được tái thiết lập, như vậy có vẻ như là do cái modem của mình nó liên tục gửi dòng trắng về nên bắt buộc phải đọc cái dòng trắng đó rồi mới gửi lệnh được? Không sao, cần thì thêm vào thôi😉.
Cuối cùng cái script sẽ rất đơn giản là:

#!/usr/bin/env python

import pexpect

p = pexpect.spawn('telnet 192.168.1.1')
p.expect('User name: ')
p.sendline('admin')    # Sending Username.
p.expect('Password: ')
p.sendline('YoullNeverSeeMyPassword')    # Sending Password.
p.expect('ras> ')
p.sendline('wan adsl reset')    # Sending command to the shell.
p.readline()
p.sendline('exit') #logout modem

Chạy thử script vài lần để kiểm tra thì thấy cái modem cũng mệt nên cho nó nghỉ🙂.
Tóm lại, với một số công đoạn đơn giản trên thì tớ nghĩ bất kỳ ai cũng có thể tạo ra một script cho riêng mình để tiện sử dụng tại gia🙂.

Chú ý:

– Chỉ nên sử dụng thử nghiệm trên modem của mình, không nên sử dụng trên modem dùng chung với người khác.

– Tớ không chịu trách nhiệm cho việc sử dụng các kiến thức trong bài viết này vào việc phá hoại.

– Tất cả các câu lệnh và mã được chạy và thử nghiệm trên Ubuntu 9.10.

References:
http://chinmaykamat.wordpress.com/2008/11/07/script-to-restart-adsl-modem-automatically/

2 phản hồi to “Tái thiết lập kết nối adsl bằng python script.”

  1. baongoc124 Says:

    Nếu modem ko được JDownloader hỗ trợ thì có thể vào Settings –> Modules –> Reconnection –> Create reconnection script để tạo script reset modem.
    Sau khi tạo xong thì điền thêm User, pw, router ip vào 3 ô bên cạnh là ok.
    Tất nhiên viết script cũng là một cách hay để nghịch🙂

    • tuantub Says:

      Ờ nhề,😛 thế mà mình hổng biết :))


Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

%d bloggers like this: