Linux下pppd撥號指令碼配置
轉載地址:https://blog.csdn.net/qq_695538007/article/details/9627621
摘要
本文主要介紹了嵌入式Linux系統下使用pppd 2.4.4來進行PPP撥號需要使用的指令碼是如何配置的,配置項的含義,同時也說明了如何來配置引數,實現ppp撥號上網。
一.問題提出
嵌入式Linux作業系統下,如果要進行PPP連線,就需要配置撥號要使用的連線指令碼。這些指令碼引數就決定了PPPD的行為,會對PPP連線產生很大的影響。所以需要對這些指令碼的引數以及具體含義有所瞭解。
二.解決思路
和PPP連線關係密切的有兩個指令碼是chat和options兩個指令碼。其中,chat指令碼是用來進行AT呼叫和控制的指令碼,而options指令碼就影響PPP連線的。
1. CHAT指令碼
一個簡單的chat指令碼有下面的結構:
"" AT
OK ATDT dialnumber
CONNECT ""
一個chat指令碼都是由字串對來組成的。前面的字串都是期望獲取的串,緊跟的是傳送的字串。這個指令碼每一項的具體含義是這樣的:
1) MODEM期望空字串。這句話的意思直接理解就是MODEM不管收到什麼字串,先發出字串AT;
2) 期望收到“OK”字串,然後傳送字串“ATDT dialnumber”
3) 如果收到“CONNECT”,就不再傳送,認為資料鏈路已建立連線。
這樣的chat指令碼是最簡單的,如果需要進行超時控制,就可以加入如下欄位:
TIMEOUT 10
如果要增加對特殊情況的處理,就加入下面欄位:
ABORT BUSY
ABORT NO ANSWER
ABORT RINGING
這三行語句的意思是:如果收到字串“BUSY”、“NO ANSWER”、“RINGING”就退出執行。
所以在考慮到各種特殊情況下,配置一個PPP連線的CHAT指令碼就可以像下面這樣:
TIMEOUT 30
ABORT BUSY
ABORT NO ANSWER
ABORT RINGING
"" AT
OK ATDT dialnumber
CONNECT ""
2.OPTIONS指令碼
OPTIONS指令碼的內容,為PPP連線指定了連線使用的裝置、使用的控制字元傳輸速率、指定了硬體加速、溢位控制等。
例如下面的options指令碼:
ttyS0 ---- 指定連線使用的裝置,例如:ttyS0、ttyS1等
57600 ---- 設定連線使用的控制字元傳輸速率,可以設定為57600、115200等
debug ---- 如果需要加入除錯資訊,就加入引數debug
logfile /var/ ppplog ---- 將連線過程中的資訊輸入到某個檔案中
mtu 1500
-detach
noipdefault ---- 不使用預設IP就可以加入引數noipdefault
defaultroute
usepeerdns ---- 使用伺服器端協商的DNS就可以設定引數usepeerdns
lcp-echo-failure 4 ---- 當連續4次沒有收到發出的LCP回聲請求時,就認為伺服器端已不再響應,就退出執行。這裡的失敗次數可以靈活來決定。
-ccp ---- 不使用壓縮控制協議
-vj ---- 關掉式IP頭壓縮
-chap ---- 不使用chap鑑權
-mschap-v2 ---- 不使用mschap鑑權
user
hide-password
connect "/usr/bin/chat -v -t6 -f /var/ chat" ---- 制定了要使用的chat指令碼的位置。加上引數-v 告訴 chat命令將其所有的輸出/入拷貝到系統記錄裡(通常是 /var/log/messages)。-t 6 指定了執行chat該命令的時間為6s。chat指令碼的位置可以位於/etc/目錄下,也可以位於/var下,這個可以更加需要靈活設定。
persist --- 永久連結(自動重撥)
crtscts --- 告訴ppp使用modem的硬體流量控制
modem --- 使ppp使用DCD訊號來判斷連線是否正常,有無掉線現象
deflate --- 使pppd使用defalte壓縮方式
idle --- 設定了一個時間限制,當在300秒的時間內沒有資料傳送,就斷開連線
lock --- 則建立一個鎖定檔案,其他程式在發現存在這個檔案後,就能得知相應的串列埠已經被使用。
demond --- 引數告訴pppd停留在後臺,監視網路資料,一旦有要求就立即進行連網,超時後就斷開連線,但pppd仍然停留在後臺等待下次資料傳送
其他的引數具體含義可以參照參考PPPD2.4.4 中options.c中註釋:
/*
* Option variables and default values.
*/
int debug = 0; /* Debug flag */
int kdebugflag = 0; /* Tell kernel to print debug messages */
int default_device = 1; /* Using /dev/tty or equivalent */
char devnam[MAXPATHLEN]; /* Device name */
bool nodetach = 0; /* Don't detach from controlling tty */
bool updetach = 0; /* Detach once link is up */
int maxconnect = 0; /* Maximum connect time */
char user[MAXNAMELEN]; /* Username for PAP */
char passwd[MAXSECRETLEN]; /* Password for PAP */
bool persist = 0; /* Reopen link after it goes down */
char our_name[MAXNAMELEN]; /* Our name for authentication purposes */
bool demand = 0; /* do dial-on-demand */
char *ipparam = NULL; /* Extra parameter for ip up/down scripts */
int idle_time_limit = 0; /* Disconnect if idle for this many seconds */
int holdoff = 30; /* # seconds to pause before reconnecting */
bool holdoff_specified; /* true if a holdoff value has been given */
int log_to_fd = 1; /* send log messages to this fd too */
bool log_default = 1; /* log_to_fd is default (stdout) */
int maxfail = 10; /* max # of unsuccessful connection attempts */
char linkname[MAXPATHLEN]; /* logical name for link */
bool tune_kernel; /* may alter kernel settings */
int connect_delay = 1000; /* wait this many ms after connect script */
int req_unit = -1; /* requested interface unit */
bool multilink = 0; /* Enable multilink operation */
char *bundle_name = NULL; /* bundle name for multilink */
bool dump_options; /* print out option values */
bool dryrun; /* print out option values and exit */
char *domain; /* domain name set by domain option */
int child_wait = 5; /* # seconds to wait for children at exit */
3. 鑑權指令碼
一般情況下,PPP連線是需要進行身份認證的。籤權方式有兩種,一種是PAP鑑權,另一種是CHAP鑑權。鑑權需要的使用者名稱和密碼是存放在PAP-secrets和chap-secrets指令碼中,以如下方式存放:
Username * password
需要進行鑑權時,通過在options指令碼中指定鑑權方式為PAP或CHAP,PPP模組就會從PAP-secrets和chap-secrets指令碼中讀出使用者名稱和密碼,附加到PPP的鑑權包中,傳送到伺服器端進行身份認證。
4. PPP撥號過程與指令碼之間的關係
指令碼設定成功以後,怎麼和pppd2.4.4一起工作呢?這個需要從pppd程式的主函式入手。
這個過程是這樣的:
Pppd程式啟動以後,就會按照pathname.h中所指定的文家位置去尋找options指令碼檔案。這個可以按照需要指定檔案的位置,確保pppd能夠準確找到該檔案。
Pppd找到options檔案後,按順序讀入引數行。在這裡,就可以獲取系統要使用的是哪個裝置來進行聯網、裝置的速率是多少。
Pppd 將配置的引數解析為程式當中的全域性變數識別符號,進行pppd連線控制。
三.實踐情況
下面是FT282 上的PPP連線使用的OPTIONS、 CHAT和PAP-SECRETS指令碼。
OPTIONS:
connect "/usr/bin/chat -v -t6 -f /var/ppp/td-scdma_chat"
ttyUSB0
115200
debug
logfile /var/log/ppplog
mtu 1500
-detach
noauth
noipdefault
defaultroute
usepeerdns
crtscts
lock
lcp-echo-failure 4
-ccp
-vj
-chap
-mschap-v2
user
hide-password
CHAT:
"" AT
OK ATDT*98*1#
CONNECT ""
PAP-SECRETS:
wap *wap
經過在FT282上進行測試,發現能夠順利進行PPP連線。
相關文章
- Linux系統下使用pppd撥號上網Linux
- Linux 使用pppd和ppp程式進行3G/4G撥號Linux
- 在Linux下使用ISDN撥號上網 (轉)Linux
- 在ARM+LINUX上使用pppd拔號上網(GPRS)流程Linux
- ubuntu kylin下寬頻撥號Ubuntu
- linux 下RMAN備份shell指令碼Linux指令碼
- Linux 下oracle自啟動指令碼LinuxOracle指令碼
- Linux下如何執行Shell指令碼Linux指令碼
- linux下oracle熱備份指令碼LinuxOracle指令碼
- 實用的linux下指令碼!(轉)Linux指令碼
- linux下rman增量備份指令碼以及指令碼自動執行Linux指令碼
- android 撥號Android
- LINUX 自動執行指令碼的命令配置Linux指令碼
- 【詳細、開箱即用】.NET企業微信回撥配置(資料回撥URL和指令回撥URL驗證)
- Linux下 MYSQL 定時備分指令碼LinuxMySql指令碼
- linux下新增oracle自啟動指令碼LinuxOracle指令碼
- Linux下JPEG庫安裝指令碼(轉)Linux指令碼
- linux系統指令碼中trap訊號都有哪些?Linux運維Linux指令碼運維
- Oracle for Linux 安裝前環境配置指令碼(轉)OracleLinux指令碼
- Linux主機安全配置的幾個指令碼(轉)Linux指令碼
- 【NFS】Linux配置NFS共享常用SQL指令碼目錄NFSLinuxSQL指令碼
- <Linux下echo指令>Linux
- ADSL撥號中出現的錯誤程式碼
- Linux下重置MySQL的Root帳號密碼LinuxMySql密碼
- Linux/Unix下檢視WWN號碼的方法Linux
- linux gprs模組 sim800a 晶片 ppp撥號上網Linux晶片
- 手寫linux下oracle的dbstart和dbshut指令碼LinuxOracle指令碼
- Linux下XWindow系統啟動指令碼分析(轉)Linux指令碼
- RedHat Linux下Oracle啟動指令碼的建立(轉)RedhatLinuxOracle指令碼
- Linux配置SSH免密碼登入(非root賬號)Linux密碼
- HTML input tel 撥號域HTML
- 撥號上網程式 (轉)
- Linux Shell指令碼Linux指令碼
- Linux shell 指令碼Linux指令碼
- Linux指令碼分享Linux指令碼
- 撥號vps,遠端連線撥號vps的方法及其步驟
- JS指令碼載入後執行相應回撥函式JS指令碼函式
- Linux系統配置檔案簡易shell備份指令碼Linux指令碼