最近在論壇上的一些朋友問(wèn)腳本方面的問(wèn)題,比如用lr的winsock協(xié)議錄制的腳本遇回放過(guò)程中遇到如下錯(cuò)誤
Action.c(20): Error : callConnect - Can't assign requested address. Error code : 10049.
Action.c(20): Error : Timeout expired while trying to connect. Error code : 9017.
這里的10049是udp協(xié)議錯(cuò)誤,是腳本沒(méi)有和服務(wù)器同步,這說(shuō)明什么問(wèn)題呢。下邊我用一個(gè)協(xié)議進(jìn)行分析,來(lái)看看到底是什么問(wèn)題,
smtp協(xié)議分析:
1.SMTP工作方式有兩種情況:一是電子郵件從客戶(hù)機(jī)傳輸?shù)椒?wù)器;二是從某一個(gè)服務(wù)器傳輸?shù)搅硪粋€(gè)服務(wù)器.
2.SMTP是個(gè)請(qǐng)求/響應(yīng)協(xié)議,命令和響應(yīng)都是基于ASCII文本,并以CR和LF符結(jié)束。響應(yīng)包括一個(gè)表示返回狀態(tài)的三位數(shù)字代碼.
3.SMTP在TCP協(xié)議25號(hào)端口監(jiān)聽(tīng)連接請(qǐng)求
4.連接和發(fā)送過(guò)程:
a.建立TCP連接
b.客戶(hù)端發(fā)送HELO命令以標(biāo)識(shí)發(fā)件人自己的身份,然后客戶(hù)端發(fā)送MAIL命令
服務(wù)器端正希望以O(shè)K作為響應(yīng),表明準(zhǔn)備接收
c.客戶(hù)端發(fā)送RCPT命令,以標(biāo)識(shí)該電子郵件的計(jì)劃接收人,可以有多個(gè)RCPT行
服務(wù)器端則表示是否愿意為收件人接受郵件
d.協(xié)商結(jié)束,發(fā)送郵件,用命令DATA發(fā)送
e. 以.表示結(jié)束輸入內(nèi)容一起發(fā)送出去
f.結(jié)束此次發(fā)送,用QUIT命令退出。
5.另外兩個(gè)命令:
VRFY---用于驗(yàn)證給定的用戶(hù)郵箱是否存在,以及接收關(guān)于該用戶(hù)的詳細(xì)信息。
EXPN---用于擴(kuò)充郵件列表。
6.郵件路由過(guò)程:
SMTP服務(wù)器基于‘域名服務(wù)DNS中計(jì)劃收件人的域名來(lái)路由電子郵件。SMTP服務(wù)器基于DNS中的MX記錄來(lái)路由電子郵件,MX記錄注冊(cè)了域名和相關(guān)的SMTP中繼主機(jī),屬于該域的電子郵件都應(yīng)向該主機(jī)發(fā)送。
若SMTP服務(wù)器mail.withub.org收到一封信要發(fā)到pcl@withub.org
a.Sendmail請(qǐng)求DNS給出主機(jī)withub.org的CNAME記錄,如有,假若CNAME到mail.withub.org,則再次請(qǐng)求mail.withub.org的CNAME記錄,直到?jīng)]有為止.
b.假定被CNAME到mail.withub.org,然后sendmail請(qǐng)求@withub.org域的DNS給出mail.withub.org的MX記錄,
shmail MX 5 mail.withub.org
10 shmail2.withub.org
c. Sendmail最后請(qǐng)求DNS給出shmail.withub.org的A記錄,即IP地址,若返回值為1.2.3.4
d. Sendmail與1.2.3.4連接,傳送這封給pcl@withub.org的信到1.2.3.4這臺(tái)服務(wù)器的SMTP后臺(tái)程序
這里是協(xié)議的一個(gè)解析過(guò)程,我們要看看,利用lr錄制腳本后然后回放,錄制的過(guò)程中mail.withub.org返回客戶(hù)端服務(wù)器上有多少給用戶(hù)的郵件,lr把這個(gè)數(shù)字保存下來(lái),最為下次回放的時(shí)候?qū)Ρ取.?dāng)你第二次回放的時(shí)候,lr模擬客戶(hù)端發(fā)送請(qǐng)求,這時(shí)候服務(wù)器上沒(méi)有了新郵件,返回可能是0,lr把這個(gè)返回值和當(dāng)時(shí)錄制的腳本保存的返回值進(jìn)行對(duì)比(那個(gè)時(shí)候可能服務(wù)器上有3個(gè)新的郵件,服務(wù)器返回的值是3),明顯這個(gè)值是動(dòng)態(tài)變化的。你的腳本如果沒(méi)有經(jīng)過(guò)修改,肯定是回返不成功的。
那么上邊提到的錯(cuò)誤信息,同樣的道理,我們要分析一下到底是什么問(wèn)題,從協(xié)議上分析,從系統(tǒng)環(huán)境上分析。
解決方法,動(dòng)態(tài)關(guān)聯(lián)
1.用同樣的用戶(hù)操作同樣的步驟兩次,然后用lr工具wdiff進(jìn)行腳本對(duì)比,找出不同的地方!
2.用lr自動(dòng)關(guān)聯(lián)
3.手工關(guān)聯(lián),找到要替換的動(dòng)態(tài)數(shù)據(jù)進(jìn)行替換