pppd撥號指令碼配置

2021-06-03 19:55:01 字數 4697 閱讀 1344

ppp撥號指令碼配置

摘要

本文主要介紹了嵌入式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 

30abort 

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仍然停留在後台等待下次資料傳送

int debug = 0; 

int kdebugflag = 0; 

int default_device = 1; 

char devnam[maxpathlen]; 

bool nodetach = 0; 

bool updetach = 0; 

int maxconnect = 0; 

char user[maxnamelen]; 

char passwd[maxsecretlen]; 

bool persist = 0; 

char our_name[maxnamelen]; 

bool demand = 0; 

char *ipparam = null; 

int idle_time_limit = 0; 

int holdoff = 30; 

bool holdoff_specified; 

int log_to_fd = 1; 

bool log_default = 1; 

int maxfail = 10; 

char linkname[maxpathlen]; 

bool tune_kernel; 

int connect_delay = 1000; 

int req_unit = -1; 

bool multilink = 0; 

char *bundle_name = null; 

bool dump_options; 

bool dryrun; 

char *domain; 

int child_wait = 5; 

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連線。

四.效果評價

五.推廣建議

對手機或接入盒的ppp 網路連線具有一定的參考價值。

參考資料

1. ppp-howto

2. ppp 2.4.4

PPPD撥號返回結果碼

00 pppd已經斷開,或者已經成功建立連線後請求方又中 斷了。01 發成了乙個嚴重錯誤,例如系統呼叫失敗或者訪問非法記憶體。02 處理給定操作是檢測到錯誤,例如使用兩個互斥的操作。03 呼叫pppd的使用者沒有許可權 必須是超級使用者 04 核心不支援ppp,例如ppp驅動沒有載入或者核心編譯沒有...

ppp撥號指令碼配置

摘要 本文主要介紹了嵌入式linux系統下使用pppd 2.4.4來進行ppp撥號需要使用的指令碼是如何配置的,配置項的含義,同時也說明了如何來配置引數,實現ppp撥號上網。一 問題提出 嵌入式linux作業系統下,如果要進行ppp連線,就需要配置撥號要使用的連線指令碼。這些指令碼引數就決定了ppp...

撥號類網路鏈結監控windows指令碼

echo off ping dns保持連線 並且 檢測是否掉線 自動重新連線程式 by suxiaojack at 2007.11 init setdown 0 goto start 檢測需要重新連線否 checkredial 自行確定rasdial輸出 是否是 已連線 可能是英文等等 rasdia...