To'g'ridan-to'g'ri mijozdan mijozga - Direct Client-to-Client

To'g'ridan-to'g'ri mijozdan mijozga (DCC) (dastlab Mijozlarni to'g'ridan-to'g'ri ulash[1][2][3]) an ARM - tegishli pastki protokolni yoqish tengdoshlar uchun IRC serveridan foydalanib o'zaro bog'lanish uchun qo'l siqish fayllarni almashish yoki uzatilmagan suhbatlarni amalga oshirish uchun. O'rnatilgandan so'ng odatdagi DCC sessiyasi IRC serveridan mustaqil ravishda ishlaydi. Dastlab foydalanish uchun mo'ljallangan ircII endi uni ko'pchilik qo'llab-quvvatlamoqda ARM mijozlari. Napster-protokol serverlarida ba'zi peer-to-peer mijozlari ham DCN yuborish / olish qobiliyatiga ega, jumladan TekNap, SunshineUN va Lopster. SDCC (Secure Direct Client-to-Client) deb nomlangan DCC protokolining o'zgarishi, shuningdek DCC SCHAT qo'llab-quvvatlaydi shifrlangan ulanishlar. An RFC spetsifikatsiyasi DCC-da foydalanish mavjud emas.

DCC ulanishlari ikki xil usulda boshlanishi mumkin:

  • Eng keng tarqalgan usul - foydalanish CTCP DCC sessiyasini boshlash uchun. CTCP bir foydalanuvchidan, IRC tarmog'i orqali, boshqa foydalanuvchiga yuboriladi.
  • DCC sessiyasini boshlashning yana bir usuli - bu mijoz DCC serveriga to'g'ridan-to'g'ri ulanishdir. Ushbu usuldan foydalanib, IRC tarmog'i bo'ylab hech qanday trafik bo'lmaydi (DCC ulanishini boshlash uchun aloqador tomonlar IRC tarmog'iga ulanishi shart emas).

Tarix

ircII CTCP va DCC protokollarini amalga oshirgan birinchi ARM mijozi bo'ldi.[4] CTCP protokoli 1990 yilda ircII 2.1 versiyasi uchun Maykl Sandrof tomonidan amalga oshirildi.[5] DCC protokoli Troy Rollo tomonidan 1991 yilda 2.1.2 versiyasi uchun amalga oshirilgan,[6] lekin hech qachon boshqa ARM mijozlari uchun ko'chma bo'lishni mo'ljallamagan.[7][8]

Umumiy DCC dasturlari

DCC CHAT

CHAT xizmati foydalanuvchilarga DCC ulanishi orqali bir-birlari bilan suhbatlashishga imkon beradi. Trafik IRC tarmog'i orqali emas, balki to'g'ridan-to'g'ri foydalanuvchilar o'rtasida bo'ladi. Odatda xabarlarni jo'natish bilan taqqoslaganda, bu IRC tarmog'ining yuklanishini kamaytiradi, toshqinlarni boshqarish vositasi yo'qligi sababli birdaniga katta miqdordagi matnlarni yuborishga imkon beradi va xabarni IRC serverlariga etkazmaslik orqali aloqani yanada xavfsiz qiladi (ammo xabar hali ham Oddiy matn ).

DCC CHAT odatda a yordamida boshlanadi CTCP qo'l siqish. Ulanishni o'rnatmoqchi bo'lgan foydalanuvchi maqsadga quyidagi CTCP-ni yuboradi:

DCC CHAT

va jo'natuvchiga tegishli bo'lib, ular butun son sifatida ifodalanadi. - bu standart DCC CHAT uchun "suhbat". Keyin qabul qiluvchi tomon berilgan port va manzilga ulanishi mumkin.

Ulanish o'rnatilgandan so'ng, DCC CHAT uchun ishlatiladigan protokol juda oddiy: foydalanuvchilar almashishadi CRLF - tugatilgan xabarlar. Dan boshlanadigan xabarlar ASCII 001 (boshqaruv-A, quyida ko'rsatilgan ^ A) va "ACTION" so'zi va boshqa ASCII 001 tomonidan bekor qilingan, emotsiyalar sifatida talqin etiladi:

^ AACTION vidolashmoqda^ A

DCC Whiteboard

Bu oddiy chizilgan buyruqlar va matn satrlarini yuborish imkonini beradigan DCC CHAT kengaytmasi. DCC Whiteboard DCC CHAT-ga o'xshash qo'l siqish bilan boshlanadi va "chat" protokoli "wboard" bilan almashtiriladi:

DCC CHAT taxtasi

Aloqa o'rnatilgandan so'ng, ikkita mijoz almashishadi CRLF - tugatilgan xabarlar. ASCII 001 bilan boshlanadigan (va ixtiyoriy ravishda tugaydigan) xabarlar maxsus buyruqlar sifatida talqin etiladi; ACTION buyrug'i emote-ni anglatadi, boshqalari esa foydalanuvchi doskasining yuzasida chiziqlar hosil bo'lishiga olib keladi yoki ikkita mijozga bir qator funktsiyalar bo'yicha muzokaralar olib borish imkoniyatini beradi.

DCC SEND

YUBORISH xizmati foydalanuvchilarga fayllarni bir-biriga yuborish imkoniyatini beradi. Qo'l siqish uchun asl spetsifikatsiya qabul qiluvchiga faylning umumiy hajmini bilishga va uzatishni davom ettirishga imkon bermadi. Bu mijozlarni qo'l uzatishda o'zlarining kengaytmalarini tanishtirishga majbur qildi, ularning aksariyati keng qo'llab-quvvatlandi.

Dastlabki qo'l siqish jo'natuvchining qabul qiluvchiga quyidagi CTCP yuborishini o'z ichiga olgan:

DCC SEND

DCC CHAT-da bo'lgani kabi, va - bu yuboruvchi mashina kiruvchi ulanishni tinglaydigan ip-manzil va port. Ba'zi mijozlar fayl nomlarini bo'sh joy bilan qo'shib qo'yishadi. Fayl hajmini so'nggi argument sifatida qo'shish odatiy holdir:

DCC SEND

Shu nuqtada, dastlabki spetsifikatsiya qabul qiluvchiga berilgan manzilga va portga ulanib, ma'lumotni kutib turishi yoki so'rovni e'tiborsiz qoldirishi kerak edi, ammo DCC RESUME kengaytmasini qo'llab-quvvatlovchi mijozlar uchun uchinchi alternativ - bu jo'natuvchidan bir qismini o'tkazib yuborishni so'rash. CTCP javobini yuborish orqali fayl:

DCC RESUME

Agar yuboruvchi mijoz DCC RESUME-ni qo'llab-quvvatlasa, u quyidagilarga javob beradi.

DCC QABUL QILADI

va qabul qilgich berilgan manzilga va portga ulanishi va allaqachon mavjud bo'lgan faylga qo'shilishi uchun ma'lumotlarni tinglashi mumkin.

Ma'lumotlar mijozga bloklarda yuboriladi, ularning har biri mijoz tomonidan qabul qilingan baytlarning umumiy sonini yuborish orqali tan olishi kerak 32-bit tarmoq baytlari tartibi tamsayı. Bu ulanishlarni sekinlashtiradi va shu sababli ortiqcha bo'ladi TCP. Yuborib yuborish kengaytmasi ushbu muammoni tasdiqlashlarni kutmaslik bilan biroz kamaytiradi, ammo qabul qiluvchi ularni har bir blok uchun yuborishi kerak bo'lganligi sababli, agar jo'natuvchi kutgan bo'lsa, u to'liq hal qilinmaydi.

Boshqa kengaytma, TDCC yoki turbo DCC, tasdiqlarni olib tashlaydi, lekin biroz o'zgartirilgan qo'l siqishni talab qiladi va keng qo'llab-quvvatlanmaydi. TDCC ning eski versiyalari qo'l siqishidagi SEND so'zini TSEND bilan almashtirgan; keyingi versiyalarda SEND so'zi ishlatiladi, ammo qo'l siqishganidan keyin "T" qo'shiladi, shu bilan TSEND versiyasi boshqa mijozlarga mos keladi (agar ular o'zgartirilgan qo'l siqishni ajratib olishlari mumkin bo'lsa).

DCC SEND ekspluatatsiyasi

DCC send ekspluatatsiyasi ikkita xatoga, bir variantga murojaat qilishi mumkin buferni to'ldirish xato mIRC 14 belgidan uzunroq fayl nomlari tomonidan ishga tushiriladi[9] va kirishni tekshirish xatosi tomonidan ishlab chiqarilgan ba'zi routerlarda Netgear, D-havola va Linksys, portdan foydalanish natijasida yuzaga keladi 0.[10][11] Router ekspluatatsiyasi, xususan, "DCC SEND'dan keyin kamida 6 ta belgi bo'sh joysiz yoki yangi satrlar mavjud emas TCP to'g'ridan-to'g'ri DCC SEND so'rovi qilinganida emas, balki 6667 portida oqim.

DCC XMIT

XMIT xizmati DCC SEND-ning o'zgartirilgan versiyasidir, bu fayllarni qayta tiklashga imkon beradi va ACK uzoq vaqtdan beri chiqadigan trafikni kamaytiradi. XMIT keng qo'llab-quvvatlanmaydi.

XMIT qo'l siqish SEND qo'l siqishidan biroz farq qiladi. Yuboruvchi a yuboradi CTCP qabul qiluvchiga faylni taklif qilish:

DCC XMIT [ [ []]]

Kvadrat qavslar ixtiyoriy qismlarni o'z ichiga oladi. bu protokol pul o'tkazish uchun foydalanish; hozirda faqat "aniq" ta'rif berilgan. Standart DCC SEND-dan farqli o'laroq, IPv4 uchun standart nuqta yozuvining qo'shimcha shaklida yoki IPv6 uchun o'n oltinchi yoki aralash yozuvning shaklida bo'lishi mumkin. Erta parametrni bo'sh qoldirish uchun, ammo baribir keyingisini taqdim etish uchun avvalgisini "-" deb belgilash mumkin. Agar qabul qilgich ishlatilgan protokolni bajarmasa, u quyidagi formatdagi CTCP javobini qaytarib yuboradi:

ERRMSG DCC CHAT mavjud emas

CHAT bu erda kengaytirilgan DCC CHAT tomonidan yuborilgan xato xabarlari bilan muvofiqlikni ta'minlash uchun ishlatiladi. Agar qabul qiluvchi o'tkazishni rad etsa, u quyidagi CTCP javobini yuboradi:

ERRMSG DCC CHAT rad etildi

Boshqa xatolar ham xuddi shu tarzda xabar qilinadi. Agar qabul qiluvchi faylni qabul qilishga tayyor va qodir bo'lsa, u berilgan manzil va portga ulanadi. Keyin nima bo'lishi ishlatilgan protokolga bog'liq.

"Tozalash" protokoli bo'lsa, XMIT-server ulanish olgandan so'ng 32-bit yuboradi vaqt t yilda tarmoq baytlari tartibi, faylni o'zgartirish vaqtini ifodalaydi. Ehtimol, mahalliy faylni o'zgartirish vaqtiga asoslanib, mijoz keyinchalik boshqa tarmoq bayt buyurtmasini yuboradi uzoq, faylni yuborishda server qidirishi kerak bo'lgan ofset. Agar butun fayl kerak bo'lsa, uni nolga, yoki agar mijoz avvalgi yuklab olishni davom ettirmoqchi bo'lsa, mahalliy fayl hajmiga o'rnatilishi kerak.

SEND-dan tezroq bo'lsa-da, XMIT bir xil cheklovlardan birini bajaradi, chunki uning hajmi ushbu faylda ko'rsatilmagan ekan, faylning kattaligini aniqlab bo'lmaydi. CTCP muzokara yoki oldindan ma'lum. Bundan tashqari, 32 gigabaytli ofset tufayli siz faylni ikki gigabayt belgisidan davom ettira olmaysiz.

Passiv DCC

Oddiy DCC ulanishida tashabbuskor sifatida ishlaydi server va maqsad mijoz. Keng tarqalganligi sababli xavfsizlik devori va shaffoflikning uchidan uchigacha pasayishi NAT, tashabbuskor server sifatida ishlay olmasligi mumkin. Maqsaddan server sifatida ishlashni so'rashning turli usullari ishlab chiqilgan:

DCC serveri

Oddiy DCC SEND va CHAT kengaytmasi IRC mijozi tomonidan kiritilgan mIRC. DCC Server o'rtacha qo'llab-quvvatlaydi, ammo barcha mijozlarda standart emas (qarang Internet Relay Chat mijozlarini taqqoslash ).

Bu IRC-serverga ehtiyoj sezmasdan, IP-manzil bo'yicha DCC ulanishini boshlashga imkon beradi. Buni qabul qiluvchi mijoz jo'natuvchidan qo'l siqish uchun tinglash (odatda 59-portda) server sifatida ishlaydi (shuning uchun uning nomi).

CHAT uchun tashabbuskor quyidagilarni yuboradi.

1000

Maqsad quyidagicha javob beradi:

1000

qolgan qismi esa DCC CHAT standart protokoliga muvofiq amalga oshiriladi.

YUBORISH uchun tashabbuskor quyidagilarni yuboradi:

1200

Maqsad quyidagilarga javob beradi:

1210

bu erda - bu boshlash kerak bo'lgan fayldagi ofset. Bu erdan pul o'tkazmasi odatdagi DCC SEND sifatida ishlaydi.

DCC Server mIRC uslubidagi fayl serverlarini va DCC GET-ni qo'llab-quvvatlaydi.

RDCC

DCC Server portni ishlatish uchun hech qanday ma'lumot bermaydi, shuning uchun buni qo'l bilan kelishish kerak, bu har doim ham mumkin emas, chunki tomonlardan biri odam bo'lmasligi mumkin. RDCC - bu DCC Server uchun qo'l siqish mexanizmi bo'lib, u portga qo'shimcha ravishda serverning IP-manzilini ham taqdim etadi, chunki mijoz xost maskalanishi sababli boshqacha topa olmasligi mumkin. Bu keng qo'llab-quvvatlanmaydi.

Tashabbuskor CTCP so'rovini yuborish orqali maqsad tinglayotgan portdan so'raydi:

RDCC

bu erda chat uchun 'c', yuborish uchun 's' va fayl serveri uchun 'f'.

Maqsad CTCP quyidagicha javob berishi mumkin:

RDCC 0

bu erda va oddiy DCC SEND va CHAT bilan bir xil ma'noga ega. Shundan so'ng tashabbuskor ip va portga ulanadi va DCC Server bilan qo'l siqish kuzatiladi.

DCC REVERSE

Qo'l siqish to'g'ridan-to'g'ri IP-ulanish orqali olib boriladigan DCC Serverdan farqli o'laroq, DCC REVERSE DCC SEND tomonidan ishlatiladigan oddiy CTCP qo'l siqishiga ega. Bu keng qo'llanilmagan. Yuboruvchi qabul qiluvchiga CTCP xabarini yuborish orqali faylni taqdim etadi:

DCC REVERSE

- bu 1 dan 50 gacha bo'lgan uzunlikdagi satr ASCII 33 dan 126 gacha bo'lgan belgilar va uzatish uchun identifikator vazifasini bajaradi.

Agar qabul qiluvchi qabul qilsa, u CTCP javobini yuboradi:

DCC REVERSE

Bu erda - jo'natishni boshlaydigan fayldagi pozitsiya, bu IP-manzil standart qabul qiluvchining nuqta belgisi uchun IPv4, yoki o'n oltinchi uchun yozuv IPv6. Keyin jo'natuvchi qabul qilgich tomonidan ko'rsatilgan ip-manzil va portga ulanadi va odatdagi DCC SEND yuboriladi. Yuboruvchi ham, qabul qiluvchi ham CTCP javobini yuborish orqali qo'l uzatishni bekor qilishi mumkin:

DCC REJECT REVERSE

DCC RSEND

Bu DCVI REVERSE-ga KVIrc mijozining alternativasi. Yuboruvchi CTCP-ni yuborish orqali faylni taklif qiladi:

DCC RSEND

Keyin qabul qiluvchi CTCP tomonidan quyidagi javob bilan qabul qilishi mumkin:

DCC RECV

va jo'natuvchi qabul qiluvchiga ulanadi va odatdagi DCC SEND paytida bo'lgani kabi jo'natadi.

Orqaga / xavfsizlik devori DCC

Ushbu passiv DCC mexanizmi hech bo'lmaganda qo'llab-quvvatlanadi mIRC, Vizual ARM, XChat, KVIrc, DMDirc, Klient, Suhbat va PhibianIRC. Yuboruvchi CTCP xabarini yuborish orqali faylni taklif qiladi:

DCC SEND 0

bu IP-manzil bitta bayt sifatida ko'rsatilgan tarmoq bayt tartibida yuboruvchining (standart DCC da bo'lgani kabi). Buning teskari DCC so'rovi ekanligiga ishora qiluvchi yaroqli port o'rniga 0 raqami yuboriladi. - bu noyob butun son; agar TSEND ishlatilayotgan bo'lsa (uni qo'llab-quvvatlovchi mijoz tomonidan), "T" harfi belgiga qo'shilib, qabul qiluvchiga bildirishnoma yuborishning hojati yo'qligini bildiradi.

Qabul qilgich faylni tinglash uyasini ochib, CTCP xabariga javoban qabul qilishi mumkin:

DCC SEND

Bu asl teskari DCC xabariga o'xshaydi, faqat va qabul qilgich tinglayotgan uyani aniqlashdan tashqari. asl so'rovda bo'lgani kabi, jo'natuvchiga qaysi so'rov qabul qilinayotganligini bildiradi. (Ushbu xabar odatdagi DCC yuborish so'rovi bilan bir xil formatga amal qilganligi sababli, DCC so'rovlarini filtrlaydigan ba'zi serverlar yuboruvchidan qabul qiluvchini "DCC ruxsat berish" ro'yxatiga qo'shishini talab qilishi mumkin.)

Keyin jo'natuvchi qabul qiluvchining rozetkasiga ulanadi, fayl tarkibini yuboradi va fayl tugagandan so'ng qabul qiluvchining rozetkani yopishini kutadi.

YUBORISH protokoliga RESUME kengaytmasi ishlatilganda, buyruqlar ketma-ketligi (">>" boshlang'ich tomonida chiquvchi xabarni ko'rsatib, tengdoshining "<<" javobi bilan) bo'ladi:

>> DCC SEND 0
<< DCC RESUME <filename> 0 <position> <token>
>> DCC QABUL QILADI 0
<< DCC SEND <filename> <peer-ip> <port> <filesize> <token>

Shundan so'ng protokol odatdagidek davom etadi (ya'ni jo'natuvchi qabul qiluvchining rozetkasiga ulanadi).

Fayl serverlari (FSERVs)

DCC xizmat qilishyoki fayl serveri foydalanuvchiga DCC serverida joylashgan fayllarni ko'rib chiqish, o'qish va yuklab olish imkonini beradi.

Odatda, bu DCC CHAT sessiyasi (foydalanuvchiga buyruq irodasini taqdim etadigan) yoki maxsus bilan amalga oshiriladi CTCP faylni so'rash uchun buyruqlar. Fayllar DCC SEND yoki DCC XMIT orqali yuboriladi. DCC fayl serverlarining ko'plab dasturlari mavjud, ular orasida mashhur bo'lgan FSERV buyrug'i mavjud mIRC mijoz.

Shuningdek qarang

  • CTCP (Mijozdan mijozga protokoli)
  • XDCC (eXtended DCC)

Adabiyotlar

  1. ^ https://www.troy.rollo.name/opensource.html
  2. ^ http://www.kvirc.net/doc/doc_dcc_connection.html
  3. ^ http://www.irchelp.org/protocol/ctcpspec.html
  4. ^ Pikkard, Pol; Brayan Baskin; Jorj Spillman; Markus Saks (2005 yil 1-may). "ARM tarmoqlari va xavfsizligi". Korxona uchun IM va P2P dasturlarini xavfsizligini ta'minlash (1-nashr). Sinxronizatsiya. p. 386. ISBN  1-59749-017-2. Dastlab IRCII dasturiy ta'minot to'plami mualliflari IRC orqali fayllarni uzatishni boshladilar.
  5. ^ "NOTES" va "source / ctcp.c" fayllariga qarang ircii-2.1.4e.tar.gz[doimiy o'lik havola ]
  6. ^ 'UPDATES' va 'source / dcc.c' fayllariga qarang ircii-2.1.4e.tar.gz[doimiy o'lik havola ]
  7. ^ Troy Rollo (1993 yil 20-yanvar). "/ dcc". Yangiliklar guruhialt.irc. Usenet:  1993 yil [email protected]. Olingan 10-noyabr, 2010.
  8. ^ Rollo, Troy. "DCC protokolining tavsifi". irchelp.org. Olingan 10-noyabr, 2010. Men qilishim kerak bo'lgan birinchi sharh shuki, DCC protokoli hech qachon IRCII-dan boshqa mijozlar uchun ko'chma bo'lishi uchun ishlab chiqilmagan. Shu sababli men boshqa mijozlar uchun amalga oshirish qiyin bo'lganligi uchun javobgarlikni o'z zimmamga olaman.
  9. ^ "SecurityFocus ekspluatatsiya ma'lumotlari".
  10. ^ "'Netgear routerlarida DCC Send "zaifligi".
  11. ^ "'DCC Send "Linksys routerlaridagi zaiflik".

Tashqi havolalar