← man/network
chat — man chat — 80×24
ugur@toprak:~/man/network$man chat
Bölüm 8

chat

Modem ile otomatik etkileşimli betik

Synopsis

       chat [ seçenekler ] betik

Description

chat programı, bilgisayar ile modem arasında etkileşimli bir iletişimi tanımlar. Temel amacı, Point-to-Point Protokolü Arka Plan Programı (pppd) ile karşı tarafın pppd süreci arasında bağlantı kurmaktır.

Options

-f Chat betiğini belirtilen chat dosyasından okur. Bu seçeneğin kullanımı, chat betiği parametreleri ile karşılıklı olarak birbirini dışlar. Kullanıcının dosyaya okuma erişimi olmalıdır. Dosyada birden fazla satıra izin verilir. Dizgileri ayırmak için boşluk veya yatay sekme (tab) karakterleri kullanılmalıdır.

-t Beklenen dizginin alınması için zaman aşımı süresini ayarlar. Eğer dizgi süre sınırı içinde alınmazsa, yanıt dizgisi gönderilmez. Alternatif bir yanıt gönderilebilir veya alternatif bir yanıt dizgisi yoksa betik başarısız olur. Başarısız bir betik, chat programının sıfır olmayan bir hata koduyla sonlanmasına neden olur.

-r Rapor dizgilerinin çıktısı için dosyayı ayarlar. REPORT anahtar kelimesini kullanırsanız, ortaya çıkan dizgiler bu dosyaya yazılır. Bu seçenek kullanılmazsa ve yine de REPORT anahtar kelimelerini kullanırsanız, rapor dizgileri için stderr dosyası kullanılır.

  • -e: Echo seçeneği açık olarak başlar. Echoing (yankılama) işlemi, chat betiğindeki belirli noktalarda ECHO anahtar kelimesi kullanılarak da açılabilir veya kapatılabilir. Echoing etkinleştirildiğinde, modemden gelen tüm çıktılar stderr'e yankılanır.

  • -E: Standart $xxx sözdizimini kullanarak chat betikleri içinde ortam değişkeni ikamesini etkinleştirir.

  • -v: Chat betiğinin ayrıntılı (verbose) modda yürütülmesini talep eder. Chat programı daha sonra chat betiğinin yürütülme durumunu, modemden alınan tüm metinleri ve modeme gönderilen çıktı dizgilerini günlüğe (log) kaydeder. Varsayılan davranış SYSLOG aracılığıyla günlüğe kaydetmektir; günlüğe kaydetme yöntemi -S ve -s bayraklarıyla değiştirilebilir.

  • -V: Chat betiğinin stderr ayrıntılı modunda yürütülmesini talep eder. Chat programı daha sonra modemden alınan tüm metinleri ve modeme gönderilen çıktı dizgilerini stderr aygıtına kaydeder. Bu aygıt genellikle chat veya pppd programını çalıştıran istasyondaki yerel konsoldur.

  • -s: stderr kullanır. '-v'den gelen tüm günlük mesajları ve tüm hata mesajları stderr'e gönderilir.

  • -S: Do not use the SYSLOG. By default, error messages are sent to the SYSLOG. The use of -S will prevent both log messages from '-v' and error messages from being sent to the SYSLOG.

-T Bir gönderim dizgisindeki \T ikame belirtecinin yerine konulacak keyfi bir dizgiyi (genellikle bir telefon numarası) aktarır.

-U <phone number 2> Bir gönderim dizgisindeki \U ikame belirtecinin yerine konulacak ikinci bir dizgiyi (genellikle bir telefon numarası) aktarır. Bu, iki numara gerektiren bir ISDN terminal adaptörünü ararken kullanışlıdır.

script Eğer betik -f seçeneği ile bir dosyada belirtilmemişse, betik chat programına parametre olarak dahil edilir.

Chat Script

Chat betiği iletişimleri tanımlar.

Bir betik, aşağıdaki örnekte olduğu gibi, boşluklarla ayrılmış bir veya daha fazla "bekle-gönder" (expect-send) dizgi çiftinden ve bir tire ile ayrılmış isteğe bağlı bir "alt bekle-alt gönder" (subexpect-subsend) dizgi çiftinden oluşur:

ogin:-BREAK-ogin: ppp ssword: hello2u2

Bu satır, chat programının "ogin:" dizgisini beklemesi gerektiğini belirtir. Ayrılan süre içinde bir oturum açma (login) istemi alamazsa, karşı tarafa bir kesme (break) dizisi gönderecek ve ardından tekrar "ogin:" dizgisini bekleyecektir. İlk "ogin:" alınırsa kesme dizisi üretilmez.

Oturum açma istemini aldıktan sonra chat programı ppp dizgisini gönderecek ve ardından "ssword:" istemini bekleyecektir. Parola istemini aldığında hello2u2 parolasını gönderecektir.

Yazdırılan yanıt dizgisinin ardından normalde bir satır başı (carriage return) gönderilir. \r karakter dizisi kullanılarak özellikle talep edilmedikçe, bunun "bekle" (expect) dizgisinde olması beklenmez.

Bekleme dizisi (expect sequence) yalnızca dizgiyi tanımlamak için gerekenleri içermelidir. Normalde bir disk dosyasında saklandığından değişken bilgiler içermebelidir. Bekleme dizgesi olarak zaman dizgilerine, ağ tanımlama dizgilerine veya diğer değişken veri parçalarına bakmak genellikle kabul edilemez.

İlk dizi sırasında bozulabilecek karakterleri düzeltmeye yardımcı olmak için, "login:" yerine "ogin:" dizgisini arayın. Baştaki "l" karakterinin hatalı alınmış olması ve sistem tarafından gönderilmiş olsa bile dizgiyi asla bulamamanız olasıdır. Bu nedenle betikler "login:" yerine "ogin:" ve "password:" yerine "ssword:" aramaktadır.

Çok basit bir betik şöyle görünebilir:

ogin: ppp ssword: hello2u2

Başka bir deyişle, ogin: bekle, ppp gönder, ssword: bekle, hello2u2 gönder.

Pratikte basit betiklere nadiren rastlanır. En azından, orijinal dizginin alınamaması durumuna karşı alt bekleme (sub-expect) dizileri eklemelisiniz. Örneğin, aşağıdaki betiği ele alalım:

ogin:--ogin: ppp ssword: hello2u2

Bu, daha önce kullanılan basit betikten daha iyi bir betik olacaktır. Bu da aynı login: istemini arayacaktır; ancak bir adet alınmazsa, tek bir satır başı dizisi gönderilir ve ardından tekrar login: aranır. Hat gürültüsü ilk login istemini anlaşılmaz kılarsa, boş satır gönderilmesi genellikle tekrar bir login istemi üretecektir.

Comments

Chat betiğine yorumlar yerleştirilebilir. Bir yorum, 1. sütunda # (diyez) karakteri ile başlayan bir satırdır. Bu tür yorum satırları chat programı tarafından doğrudan göz ardı edilir. Eğer bekleme dizisinin ilk karakteri olarak bir '#' karakteri bekleniyorsa, bekleme dizgesini tırnak içine almalısınız. # (diyez) karakteri ile başlayan bir istemi beklemek istiyorsanız, şöyle bir şey yazmanız gerekir:

Şimdi istemi bekle ve çıkış dizgisini gönder

´# ' logout

Sending Data From A File

Gönderilecek dizgi bir et işareti (@) ile başlıyorsa, dizginin geri kalanı gönderilecek dizgiyi almak üzere okunacak bir dosyanın adı olarak kabul edilir. Okunan verinin son karakteri bir yeni satır (newline) karakteri ise kaldırılır. Dosya, düzenli bir dosya yerine isimlendirilmiş bir boru hattı (named pipe veya fifo) olabilir. Bu, chat'in başka bir programla iletişim kurması için bir yol sağlar, örneğin kullanıcıya soru sorup yazılan parolayı alan bir programla.

Abort Strings

Birçok modem aramanın durumunu bir dizgi olarak rapor eder. Bu dizgiler CONNECTED, NO CARRIER veya BUSY olabilir. Modemin karşı tarafa bağlanamaması durumunda betiği sonlandırmak genellikle arzu edilen bir durumdur. Zorluk, bir betiğin modemden tam olarak hangi dizgiyi alacağını bilemeyecek olmasıdır. Bir denemede BUSY alabilirken, bir sonraki seferde NO CARRIER alabilir.

Bu "iptal" (abort) dizgileri, betik içinde ABORT dizisi kullanılarak belirtilebilir. Betikte aşağıdaki örnekte olduğu gibi yazılır:

ABORT BUSY ABORT 'NO CARRIER' '' ATZ OK ATDT5551212 CONNECT

Bu dizi hiçbir şey beklemeyecek; ve ardından ATZ dizgisini gönderecektir. Buna beklenen yanıt OK dizgisidir. OK aldığında, telefon numarasını çevirmek için ATDT5551212 dizgisini gönderir. Beklenen dizgi CONNECT'tir. CONNECT dizgisi alınırsa betiğin geri kalanı yürütülür. Ancak modem meşgul bir telefon bulursa BUSY dizgisini gönderir. Bu, dizginin iptal karakter dizisiyle eşleşmesine neden olur. Betik daha sonra başarısız olacaktır çünkü iptal dizgisiyle bir eşleşme bulmuştur. NO CARRIER dizgisini alsaydı aynı nedenden dolayı iptal edilecekti. İki dizgi de alınabilir. Her iki dizgi de chat betiğini sonlandıracaktır.

Clr_Abort Strings

Bu dizi, önceden ayarlanmış ABORT dizgilerinin temizlenmesini sağlar. ABORT dizgileri (derleme zamanında) önceden belirlenmiş boyutta bir dizide tutulur; CLR_ABORT, yeni dizgilerin bu alanı kullanabilmesi için temizlenen girişlerin alanını geri kazanacaktır.

Say Strings

SAY yönergesi, betiğin terminaldeki kullanıcıya standart hata aracılığıyla dizgiler göndermesini sağlar. Eğer chat, pppd tarafından çalıştırılıyorsa ve pppd bir arka plan programı (daemon) olarak çalışıyorsa (denetim terminalinden ayrılmış olarak), standart hata normalde /etc/ppp/connect-errors dosyasına yönlendirilecektir.

SAY dizgileri tek veya çift tırnak içine alınmalıdır. Çıktı olarak verilecek dizgide satır başı ve satır besleme (line feed) gerekiyorsa, bunları dizginize açıkça eklemelisiniz.

SAY dizgileri, betiğin 'ECHO OFF' yapmak istediğiniz bölümlerinde ilerleme mesajları vermek ve yine de kullanıcının ne olup bittiğini bilmesini sağlamak için kullanılabilir. Bir örnek şöyledir:

ABORT BUSY ECHO OFF SAY "ISP'niz aranıyor...\n" ´' ATDT5551212 TIMEOUT 120 SAY "Bağlantı için en fazla 2 dakika bekleniyor ... " CONNECT '' SAY "Bağlandı, şimdi oturum açılıyor ...0 ogin: account ssword: pass $ SAY "Oturum başarıyla açıldı ...0 vb ...

Bu dizi kullanıcıya yalnızca SAY dizgilerini sunacak ve betiğin tüm ayrıntıları gizli kalacaktır. Örneğin, yukarıdaki betik çalışırsa, kullanıcı şunu görecektir:

ISP'niz aranıyor... Bağlantı için en fazla 2 dakika bekleniyor ... Bağlandı, şimdi oturum açılıyor ... Oturum başarıyla açıldı ...

Report Strings

Bir rapor dizgisi (report string), ABORT dizgisine benzer. Aradaki fark, dizgilerin ve satır başı gibi bir sonraki kontrol karakterine kadar olan tüm karakterlerin rapor dosyasına yazılmasıdır.

Rapor dizgileri, modemin bağlantı dizgisinin iletim hızını yalıtmak ve değeri chat kullanıcısına geri döndürmek için kullanılabilir. Rapor dizgisi mantığının analizi, bekleme dizgisini aramak gibi diğer dizgi işlemlerle birlikte gerçekleşir. Bir rapor ve iptal dizisi için aynı dizginin kullanılması muhtemelen pek kullanışlı değildir, ancak mümkündür.

Rapor dizgileri programın tamamlanma kodunu değiştirmez.

Bu "rapor" dizgileri, betik içinde REPORT dizisi kullanılarak belirtilebilir. Betikte aşağıdaki örnekte olduğu gibi yazılır:

REPORT CONNECT ABORT BUSY '' ATDT5551212 CONNECT '' ogin: account

Bu dizi hiçbir şey beklemeyecek; ve ardından telefonu aramak için ATDT5551212 dizgisini gönderecektir. Beklenen dizgi CONNECT'tir. CONNECT dizgisi alınırsa betiğin geri kalanı yürütülür. Ek olarak program, bekleme dosyasına "CONNECT" dizgisini ve ardından gelen bağlantı hızı gibi karakterleri yazacaktır.

Clr_Report Strings

Bu dizi, önceden ayarlanmış REPORT dizgilerinin temizlenmesini sağlar. REPORT dizgileri (derleme zamanında) önceden belirlenmiş boyutta bir dizide tutulur; CLR_REPORT, yeni dizgilerin bu alanı kullanabilmesi için temizlenen girişlerin alanını geri kazanacaktır.

Echo

Echo seçenekleri, modemden gelen çıktının stderr'e yankılanıp yankılanmayacağını kontrol eder. Bu seçenek -e seçeneğiyle ayarlanabilir, ancak ECHO anahtar kelimesiyle de kontrol edilebilir. "bekle-gönder" çifti olan ECHO ON yankılamayı etkinleştirir ve ECHO OFF devre dışı bırakır. Bu anahtar kelime ile görüşmenin hangi bölümlerinin görünür olması gerektiğini seçebilirsiniz. Örneğin, aşağıdaki betikte:

ABORT 'BUSY' ABORT 'NO CARRIER' OK\r\n ATD1234567 \r\n \c ECHO ON CONNECT \c ogin: account

modem yapılandırmasından ve aramadan kaynaklanan hiçbir çıktı görünmez, ancak CONNECT (veya BUSY) mesajından başlayarak her şey yankılanacaktır.

Hangup

HANGUP seçenekleri, bir modem kapatmasının (hangup) bir hata olarak kabul edilip edilmeyeceğini kontrol eder. Bu seçenek, telefon kapatıp sisteminizi geri arayacak sistemleri arayan betiklerde kullanışlıdır. HANGUP seçenekleri ON veya OFF olabilir. HANGUP değeri OFF olarak ayarlandığında ve modem kapandığında (örneğin, bir geri arama sistemine oturum açmanın ilk aşamasından sonra), chat betiği çalıştırmaya devam edecektir (örneğin, gelen aramayı ve ikinci aşama oturum açma istemini bekleyecektir). Gelen arama bağlanır bağlanmaz, normal kapatma sinyali davranışını yeniden yüklemek için HANGUP ON yönergesini kullanmalısınız. İşte (basit) bir örnek betik:

ABORT 'BUSY' OK\r\n ATD1234567 \r\n \c CONNECT \c ´Callback login:' call_back_ID HANGUP OFF ABORT "Bad Login" ´Callback Password:' Call_back_password TIMEOUT 120 CONNECT \c HANGUP ON ABORT "NO CARRIER" ogin:--BREAK--ogin: real_account vb ...

Timeout

Başlangıç zaman aşımı değeri 45 saniyedir. Bu değer -t parametresi kullanılarak değiştirilebilir.

Bir sonraki bekleme dizgisinin zaman aşımı değerini değiştirmek için aşağıdaki örnek kullanılabilir:

ATZ OK ATDT5551212 CONNECT TIMEOUT 10 ogin:--ogin: TIMEOUT 5 assword: hello2u2

Bu, login: istemini beklerken zaman aşımını 10 saniyeye değiştirecektir. Parola istemini ararken ise zaman aşımı 5 saniyeye değiştirilir.

Zaman aşımı, bir kez değiştirildiğinde, tekrar değiştirilene kadar yürürlükte kalır.

Sending Eot

Özel EOT yanıt dizgisi, chat programının karşı tarafa bir EOT karakteri göndermesi gerektiğini belirtir. Bu normalde Dosya Sonu (End-of-file) karakter dizisidir. EOT'yi takiben bir satır başı karakteri gönderilmez. EOT dizisi, ^D dizisi kullanılarak gönderim dizgisinin içine gömülebilir.

Generating Break

Özel BREAK yanıt dizgisi, bir kesme (break) koşulunun gönderilmesine neden olur. Kesme, verici üzerindeki özel bir sinyaldir. Alıcı üzerindeki normal işlem iletim hızını değiştirmektir. Geçerli bir login istemi alana kadar karşı taraftaki mevcut iletim hızları arasında geçiş yapmak için kullanılabilir. Kesme dizisi, \K dizisi kullanılarak gönderim dizgisine gömülebilir.

Escape Sequences

Bekleme ve yanıt dizgileri kaçış dizileri (escape sequences) içerebilir. Dizilerin tamamı yanıt dizgisinde geçerlidir. Birçoğu bekleme dizisinde de geçerlidir. Bekleme dizisinde geçerli olmayanlar ayrıca belirtilmiştir.

'' Boş (null) bir dizgi bekler veya gönderir. Boş bir dizgi gönderirseniz, yine de satır başı karakterini gönderecektir. Bu dizi bir çift tek tırnak veya çift tırnak karakteri olabilir.

\b bir geri silme (backspace) karakterini temsil eder.

\c Yanıt dizgisinin sonundaki yeni satır karakterini bastırır. Bu, sonunda satır başı karakteri olmadan bir dizgi göndermenin tek yöntemidir. Gönderim dizgisinin sonunda olmalıdır. Örneğin, hello\c dizisi sadece h, e, l, l, o karakterlerini gönderecektir. (beklemede geçerli değildir.)

\d Bir saniye geciktirir. Program, maksimum bir saniye geciktirecek olan sleep(1) fonksiyonunu kullanır. (beklemede geçerli değildir.)

\K Bir BREAK ekler (beklemede geçerli değildir.)

\n Bir yeni satır (newline) veya satır besleme (linefeed) karakteri gönderir.

\N Boş (null) bir karakter gönderir. Aynı dizi \0 ile de temsil edilebilir. (beklemede geçerli değildir.)

\p Saniyenin bir kısmı kadar duraklar. Gecikme saniyenin 1/10'u kadardır. (beklemede geçerli değildir.)

\q Dizginin SYSLOG dosyasına yazılmasını bastırır. Bunun yerine günlüğe ?????? dizgisi yazılır. (beklemede geçerli değildir.)

\r Bir satır başı (carriage return) gönderir veya bekler.

\s Dizgi içindeki bir boşluk karakterini temsil eder. Bu, boşluk içeren dizgileri tırnak içine almanın istenmediği durumlarda kullanılabilir. 'HI TIM' ve HI\sTIM dizileri aynıdır.

\t Bir sekme (tab) karakteri gönderir veya bekler.

\T -T seçeneği ile belirtilen telefon numarası dizgisini gönderir (beklemede geçerli değildir.)

\U -U seçeneği ile belirtilen telefon numarası 2 dizgisini gönderir (beklemede geçerli değildir.)

\ Bir ters eğik çizgi (backslash) karakteri gönderir veya bekler.

\ddd Sekizlik (octal) basamakları (ddd) tek bir ASCII karakterine indirger ve o karakteri gönderir. (bazı karakterler beklemede geçerli değildir.)

^C Diziyi C ile temsil edilen kontrol karakteriyle değiştirir. Örneğin, DC1 (17) karakteri ^Q olarak gösterilir. (bazı karakterler beklemede geçerli değildir.)

Environment Variables

Komut satırında -E seçeneği belirtilmişse, chat betikleri içinde ortam değişkenleri kullanılabilir. İkame edilecek ortam değişkeninin adını tanıtmak için $ metakarakteri kullanılır. İstenen ortam değişkeni ayarlanmadığı için ikame başarısız olursa, değişken için hiçbir şey değiştirilmez.

Termination Codes

Chat programı aşağıdaki tamamlanma kodlarıyla sonlanacaktır.

0 Programın normal sonlanması. Bu, betiğin hata olmadan normal sonuca kadar yürütüldüğünü gösterir.

1 Parametrelerden biri veya daha fazı geçersiz veya bir bekleme dizgesi dahili tamponlar için çok büyüktü. Bu, programın düzgün şekilde yürütülmediğini gösterir.

2 Programın yürütülmesi sırasında bir hata oluştu. Bu, herhangi bir nedenden dolayı bir okuma veya yazma işleminin başarısız olmasından veya chat'in SIGINT gibi bir sinyal almasından kaynaklanabilir.

3 Bir "-subsend" dizgisi olmadan bir bekleme dizgesi varken bir zaman aşımı olayı meydana geldi. Bu, betiği koşul için doğru şekilde programlamadığınız veya beklenmeyen bir olayın meydana geldiği ve beklenen dizginin bulunamadığı anlamına gelebilir.

4 ABORT koşulu olarak işaretlenen ilk dizgi gerçekleşti.

5 ABORT koşulu olarak işaretlenen ikinci dizgi gerçekleşti.

6 ABORT koşulu olarak işaretlenen üçüncü dizgi gerçekleşti.

7 ABORT koşulu olarak işaretlenen dördüncü dizgi gerçekleşti.

... Diğer sonlanma kodları da ABORT koşulu olarak işaretlenen dizgilerdir.

Sonlanma kodunu kullanarak betiği hangi olayın sonlandırdığını belirlemek mümkündür. Modemden "NO DIAL TONE" yerine "BUSY" dizgisinin alınıp alınmadığına karar vermek mümkündür. İlk olay yeniden denenebilirken, ikincisinin yeniden deneme sırasında başarılı olma şansı muhtemelen çok düşük olacaktır.

See Also

Chat betikleri hakkında ek bilgiler UUCP belgelerinde bulunabilir. Chat betiği, uucico programı tarafından kullanılan betiklerin önerdiği fikirlerden alınmıştır.

uucico(1), uucp(1)

Chat programı kamu malıdır (public domain). Bu, GNU genel kamu lisansı değildir. Bozulursa iki parçasını da saklayabilirsiniz.

Chat Sürümü 1.22 22 Mayıs 1999 CHAT(8)