Pcap

**Pcap**(**p**acket **cap**ture) нь сүлжээн дээгүүр явж байгаа өгөгдлийг барьж авдаг хэрэглээний программын хэрэгсэл API(application program interface) юм. Үйлдлийн системйн хувьд Юникс төст үйлдлийн системүүд Libpcap library, Виндовс үйлдлийн систем нь Winpcap хэрэглэдэг.
## Pcap-н тухай
Үйлдлийн системйн хувьд Юникс төст үйлдлийн системүүд Libpcap library, Виндовс үйлдлийн систем нь Winpcap хэрэглэдэг.Pcap сан нь өндөр түвшний пакет барьж авах системээр хангадаг. Сүлжээнд явж буй бүх пакет буюу тухайн хост-д хаяглагдаагүй ч байсан түүгээр л дамжиж байгаа бол энэхүү механизмийг дамжиж гардаг. Энэ нь мөн дамжиж буй пакетуудыг “savefile”-хадгалж авах болон “savefile”-аас буцааж унших болохоор байдаг.
## Pcap-н түүх
Сүлжээний удирдлагын хяналтанд Pcap(packet capture) нь сүлжээн дээгүүр явж байгаа өгөдлийг барьж авдаг хэрэглээний программын хэрэгсэл (API) юм. Юникс линукс төст үйлдлийн системүүд дээр пакет шижлэхэд ашиглагдах сан болох libpcap санг Сүлжээний судалгааны групп дахь (Network Research Group) tcpdump Баг Лоуренс Берклийн лабораторт анх хөгжүүлсэн. Winpcap буюу Windows үйлдлийн системүүд дээрх санг Турин хотын политехникийн их сургуулийн (Polytechnic University of Turin) программистууд бичсэн бөгөөд CACE technologies хөгжүүлж байсан ба 2010 оны 10 сараас эхлэн Riverbed technology хөгжүүлж байна.
## Pcap-г ашигладаг анализ программууд
### Tcpdump
TCP програм нь сүлжээгээр дамжин өнгөрч байгаа пакетуудыг хянах буюу илрүүлэх зорилготой нээлттэй эхтэй коммандын горимд ажилладаг програм юм. Анх 1987 онд Ван Жакобсон, Крейг Лерес болон Стевен Маккейн нар Лаурейнсийн лабораторийн сүлжээний судалгааны групп-д ажиллаж байхдаа анх бичиж эхэлжээ. Үүнээс хойш 1999 он хүртэл тасратгүй шинчлэгдсээр олон үйлдлийн систем дэмжиж ажилдаг болсон. TCPDUMP программыг remote холболт ашиглан зайнаас ашиглах боломжтой байдаг ба telnet болон HTTP холболтын үед дамжих пакет дээрээс хэрэглэгчдийн нэр болон нууц үгийг мэдэх боломжтой байдаг. Мөн Tcpdump программыг ерөнхий сүлжээг хянах зориулалтаар буюу сүлжээнд явагдаж байгаа чиглүүлэлт, өгөдлийн урсгал зэргийг хянах зориулалтаар буюу сүлжээнд явагдаж байгаа чиглүүлэлт, өгөдлийн урсгал хянахад түлхүү ашигладаг. Ажиллагааны явцдаа пакетуудын толгой, төрөл, IP хаяг гэх мэт мэдээллүүдийг гаргадаг. Tcpdump багжийн хэрэглэхдээ ямар комманд бичиж өгснөөс хамаарч өөр өөр үр дүнг гаргаж өгдөг. Юникс линукс төст үйлдлийн системүүд дээр tcpdump нь libpcap санг ашигладаг бол windows үйлдлийн систем дээр windump хэмээг санг ашигладаг.

### Вайршарк (Wireshark)
Вайршарк (Wireshark) нь сүлжээний пакет (packet)-д дүн шинжилгээ хийх зориулалт бүхий програм юм. Сүлжээний пакет (packet)-д дүн шинжилгээ хийхдээ энэхүү програм нь сүлжээн дээгүүр дамжигдаж буй пакет(packet)-уудыг чагнаж, цуглуулаад тэдгээр пакет өгөдөл(packet data)-ийг боломжит хамгийн дэлгэрэгүй байдлаад задлан харуулдаг. Сүлжээний пакет анализар (packet analyzer) нь сүлжээний кабел дээгүүр дамжиждаж буй дээд түвшинд харуулах, хэмжиж зориулалттай багаж юм. Вайршарк (wireshark) нь сүлжээний пакет анализар (packet analyzer) програмуудын дундаас шилдэг програмуудынх нь нэгд зүй ёсоор багтдаг юм. 
:**Вайршарк (wireshark) програмын зарим түгээмэл хэрэглээ**
::*Сүлжээнд үүссэн асуудлыг оношлох, тодруулахад	
::*Сүлжээний аюулгүй байдалтай холбоотой асуудлыг хянах, илрүүлэхэд	
::*Хөгжүүлэгчид шинэ протокол хөгжүүлэх, хэрэгжүүлэх явцдаа шалгах зориулалтаар	
::*Компьютерийн сүлжээг хэрхэн ажилладаг талаар суралцаж буй хүмүүс сургалтын зориулалтаар гэх мэт. 
:**Вайршарк (wireshark)-ын ажиллагааны онцлог**
::*Windows болон Unix үйлдлийн системүүд дээр ажиллана. 
::*Сүлжээний интерфэйс картууд (Network Interface Card - NIC) дээгүүр дамжигдаж буй packet өгөгдлийг чагнана (capture), цуглуулж авна.
::*Вайршарк (Wireshark) програмтай ижил үйлдэл хийдэг tcpdump/WinDump гэх мэт сүлжээний өгөгдөлд анализ хийх програмуудын цуглуулсан packet өгөгдлүүдийг нээнэ, анализ хийнэ.
::*Пакет (Packet) өгөгдлийн 16тын тооллын системээр илэрхийлэгдсэн (hex) файлаас вайршарк (wireshark) програм руу импорт хийнэ. 
::*Пакет (Packet) өгөгдлийг ашиглагдаж буй протоколоор нь дэлгэрэнгүйгээр харуулна.
::*Цуглуулж авсан пакет (packet) өгөгдлийг хадгална. 
::*Цуглуулсан пакет (packet) өгөгдлөө хэсэгчлэн эсвэл бүтнээр нь олон төрлийн файлын төрлийн (file format) сонголттойгоор экспорт хийнэ.
::*Олон төрлийн шалгуур үзүүлэлт, параметр ашиглан пакет (packet) өгөгдлөөс шүүлт (filter) хийнэ.
::*Олон төрлийн шалгуур үзүүлэлт, параметр ашиглан пакщт (packet) өгөгдлөөс хайлт хийнэ.
::*Шүүлтүүр (filter) хийсэн пакет (packet) өгөгдлийн үр дүнг өнгөөр ялгаж харуулна.
::*Төрөл бүрийн статистик үзүүлэлтүүдийг автоматаар үүсгэнэ гэх мэт олон үйлдлүүдийг нэг дороос хийх боломжтой. 
### Kismet
:Kismet нь 802.11 утасгүй сүлжээгээр урсах пакетуудыг барих болон халдлага илрүүлэх систем юм. Мөн Kismet нь raw monitoring mode дэмждэг бүх л wireless сүлжээний картууд дээр ажиллах боломжтой бөгөөд, 802.11a/b/g/n гэх бүх төрлийн сүлжээний өгөгдлийг барих чадвартай. Kismet-ийн бусад утасгүй сүлжээний илрүүлэгчдээс ялгарах гол онцлог нь идэвхийгүй байдлаар ажилладагт оршино. Энэ нь ямар нэгэн log хийгдэх пакет илгээлгүйгээр Wireless Access Point болон түүнд холбоотой байгаа клиентүүдийг илрүүлэх боломжтой. Мөн kismet нь wirelss IDS(Instrusion Detection System)-ийн үндсэн шинжүүдийг агуулсан байдаг. Kismet-д үндсэн 3 хэсэг байдаг. Drone-нь пакет цуглуулахад ашиглагдах бөгөөд дараа нь тэдгээр пакетаа Сервер лүүгээ илгээдэг. Харин Клиент нь цуглуулж, дараа нь серверээр боловсруулагдсан бүх пакетуудыг дэлгэцэнд харуулах үүрэгтэй. 

### Snort
:Snort бол signature-based NIDS учраас халдагчийн дамжуулж буй пакетуудын шинж чанар дээр нь тулгуурлан халдлагыг тодорхойлдог. Халдлага мөн гэдгийг болон төрлийг нь тодорхойлохдоо Rule-үүдийн цуглуулгыг ашигладаг.Snort нь дотроо packet sniffer, packet логger, Network-based Interusion Detection System гэсэн үндсэн гурван функцыг агуулсан орчин үеийн хамгаалалтын application юм. Snort нь logfiles-ийг удирдах бичих олон арга замуудыг дэмждэг, Snort ажиллаж байх үед багцуудыг барих, хөнөөлтэй traffic илэрсэн бол системийн админд мэдэгдэх маш өргөн боломжтой програмуудаар өргөжүүлэх боломжтой. Snort-ийг маш олон төрлийн бүтцээр зохион байгуулах боломжтой байдаг учраас тухайн байгууллагад зориулсан бүтцийг гаргахад хялбар байдаг. Snort нь зөвхөн TCP/IP протокол дээр шинжилгээ хийхээс гадна бусад маш олон сүлжээний протокол дээр шинжилгээ хийх боломжтой. Тухайлбал Novell-ийн IPX протокол дээр шинжилгээ хийх боломжтой.Snort нь мөн маш олон төрлийн үйлдлийн систем дээр суулгах боломжтой нээлттэй эх бүхий програм хангамж юм. Тухайлбал Linux, FreeBSD, NetBSD, OpenBSD, Windows, Solaris, MacOS X, MkLinux, PA-RISC HP-UX зэрэгүйлдлийн системүүд дээр ажиллах боломжтой.
### Nmap
:Nmap-г 1997 онд Gordon "Floyd Lyon" анх гаргасан бөгөөд хүмүүсийн хамгийн сайн мэдэх сүлжээний сканнер програм болсон. Порт скан хийх, үйлчилгээ болон хувилбарыг тодорхойлох, үйдлийн систем тодорхойлох гэх мэт олон төрлийн онцлогтой хуучны бөгөөд хамгийн их ашиглагдаж байгаа програм юм. Энэ нь TCP/Transmission Control Protocol/ connect скан, UDP/User Datagram Protocol/ скан, TCP NULL, FIN, Xmas скан гэх мэт олон төрлийн скан хийх аргуудыг ашигладаг.
### Scapy
:Scapy гэдэг нь Philippe Biondi-н Python хэл дээр бичсэн компьютерийн сүлжээний пакет өөрчилөг хэрэгсэл юм. Энэ нь пакет угсрах болон тайлах чадвартай мөн тэднийг дамжуулах, барьж авах, хүсэлт тавих болон хариу дамжуулах гэсэн үйлдлүүдийг хийх боломжтой. Энэ нь мөн Scan, Traceroute, Prob, Unit test, Халдлага болон Сүлжээ илрүүлэх зэрэг ажлыг хийх боломжтой.

:Scapy нь libpcap(Windows дээр WinPCAP)-г Python интерфейсээс хангадаг бөгөөд энэ нь Wireshark-н GUI ашиглан пакет харж барьж авдагтай төстэй. Энэ нь мөн бусад олон програмтай хамт ажиллан харагдах үзэгдэх хэлбэрт оруулж болдог жишээлбэл Wireshark-аар пакет тайлах, GnuPlot ашиглан График үзүүлэх, graphviz эсвэл VPython ашиглан харагдах байдлыг өөрчлөх гэх мэт. 
## Capture handle-г унших
:Пакет шууд барьж авхын тулд тухайн барьж авах сүлжээний нэр эсвэл интерфэйсийн нэрийг Handle-д зааж өгснөөр нээдэг. Pcap_create() гэсэн функцыг дуудан Handle-д шаардлагатай тохируулгыг хийх бөгөөд pcap_activate() гэж дуудан үүнийгээ ажиллуулна.

:Шууд барьж авах боломжтой төхөөрөмжүүдийн жагсаалтыг авхын тулд pcap_findalldevs() гэсэн функцыг дуудна. Жагсаалтыг шинэчлэх бол pcap_freealldevs() гэсэн функц ашиглана. pcap_lookupdev гэсэн функц нь таны Loopback интерфэйсээс өөр хамгийн эхэнд гарж ирж буй интерфэйсийг буцаана. 

:Хадгалах файлаас мэдээлэл унших Handle нээхийн тулд “savefile” гэсэн замыг зааж өгөн pcap_open_offline() гэсэн функц дуудаж өгнө.Үүнийг хийхийн өмнө *File зааж өгсөн байх шаардлагатай бөгөөд уншихаар нээсэн байна. pcap_create(), pcap_open_offline(), pcap_fopen_offline(), болон pcap_open_dead() гэсэн функцууд нь pcap_t -д заагч утга буцаана. Энэ нь мэдээлэл дамжуулж байхад мөн хадгалсан файлаас пакетын мэдээллийг уншихад ашиглагдана. Энэхүү уншиж буй Hangle-г хаахын тулд pcap_close() функц ашиглана.
## Мэдээлэл барьж авдаг Handle-д дараах сонголтууд ашиглаж болно
### Snapshot length
:Хэрэв сүлжээний урсгал дээрээс мэдээлэл барьж авбал пакетын бүрэн бүтнээр нь барьж авдаг. Ингэснээр CPU-ны ачаалал ихэсдэг бөгөөд мөн түүнтэй адил хугацаа шаардах бөгөөд энэ нь мэдээллээ хуулах мөн сүлжээний зурвасын өргөн зэргээс хамаарч пакетаа хадгалах санах ой ч гэсэн шаардлагатай болдог. Хэрэв пакетын бүх мэдээлэл шаардлагагүй бол жишээлбэл: Хэрэв барьж авж байгаа пакетын зөвхөн TCP header-г барьж авах шаардлагатай бол “snapshot length”-г шаардлагатай хэмжээгээр нь тааруулан барьж авж болно.
### Promiscuous mode
:Broadcast lan буюу Ethernet сүлжээнд хэрэв сүлжээ Switch ашиглаагүй эсвэл адаптер нь  свичын mirror портруу холбогдсон буюу тэрхүү свич дээгүүр явж байгаа бүх пакет тухайн интерфэйсээр дамжих бөгөөд энэ нь unicast multicast пакетүүд байх боломжтой байдаг. Жирийн нөхцөлд адаптер тэдгээр пакетыг хаядаг ч гэсэн олон сүлжээний адаптер Promiscuous гормийг дэмждэг. Энэ нь хэрэв тухайн пакет тухайн сүлжээний адаптерт хаяглагдаагүй ч байсан түүнийг унших боломжтой байдаг. Энэ нь олон хостуудаас ирж буй мэдээллийг уншихад хэрэгцээтэй юм.

:Хэрэв аппликэйшн Promiscuous горим тохируулаагүй байсан ч, адаптер өөрөө тухайн горимд орсон байж болно. Promiscuous mode-г pcap\_set\_promisc() функцээр удирдана.
### Monitor mode
:IEEE 802.11 буюу утасгүй сүлжээний горимд хичнээн promiscuous горимд орсон байсан ч гэсэн зөвхөн тухайн хостод хаяглагдсан пакетуудыг л хүлээж авдаг. Мөн энэ нь data frame monitor, control гэсэн фрэймүүдийг уншдаг. Иймээс 802.11 header, эсвэл радио мэдээлэл мөн псевдо Header зэргийг уншиж болдоггүй.

:Monitor горим буюу rfmon горим нь адаптерыг 802.11-д хамааралтай бүх пакетыг барьж авах боломжтой болгодог мөн псевдо header болон радио дохионы талаар мэдээллийг хүргэдэг. Гэхдээ монитор горимд орсон бол ямар нэгэн сүлжээнд холбогдож болохгүй буюу та сүлжээнд холбогдож болохгүй гэсэн үг. Ингэснээр сүлжээнд байгаа сервер болон сүлжээний хаяг, хостын нэр зэргийг олж ашиглахаас сэргийлж байгаа юм. Хэрэв та монитор горимд байгаа бол сүлжээнд холбогдохын тулд өөр адаптер ашиглах шаардлагатай гэсэн үг. 
:Монитор горим нь pcap\_set\_rfmon(), болон pcap\_can\_set\_rfmon() гэсэн функцүүдээр тухайн адаптерыг монитор горимд оруулах эсэхийг шийдэж болно.
## Pcap-н функцууд
### Pcap_loockupdev
:Энэ нь пакет барьж авах гол төхөөрөмжөө олж авахад шаардлагатай. гэсэн маягаар бичигддэг. pcap_lookupdev() гэсэн функц нь заагц утга буцаах бөгөөд мөн тухайн сүлжээний төхөөрөмжийн нэрийг String байдлаар гаргадаг. Үүний дараагаар Pcap_create() болон Pcap_activate эсвэл Pcap_open_live() болон Pcap_lookupnet() гэсэн функцуудийг ашиглах боломжтой болно. Хэрэв алдаа гарсан бол NULL гэсэн утга буцаагдаж errbuf нь алдааны мессежээр дүүрнэ. 
### Pcap_open_live
:Энэ нь шууд барьж авах боломжтой Handle үүсгэдэг.
### Pcap_compile
:Энэ нь string хэлбэртэй байсан файлыг compile хийж шүүлтүүрийн програм үүсгэнэ. Pcap_filter гэсэн функцээс string-н syntax харж болно. Програм нь Bpf_program гэсэн бүтэцэд заагч утга болж pcap_compile-аар дүүргэгдэнэ. Optimze гэсэн нь тухайн код өөрчлөгдөх эсэхийг шийднэ. Netmask гэдэг нь Ipv4 -н сүлжээний хаяг байх бөгөөд энэхүү сүлжээнээс пакет филтер хийнэ. Энэ нь зөвхөн Ipv4-н броадкаст хаягууд пакетад илэрсэн тохиолдолд л хэрэглэгдэнэ. Хэрэв ямар сүлжээнээс пакет барьк авж байгаа нь тодорхойгүй эсвэл линукс орчинд олон төрлийн сүлжээнээс пакет барьж авж байгаа бол PCAP_NETMASK_UNKNOWN гэсэн аргумент ашиглана. Ингэснээр ipv4-н броадкаст хаягууд дээр алдаа гарах ч гэсэн филтер хийх програм нь зүгээр ажиллаж байх болно.
### Pcap_lookupnet
:Pcap_lookupnet() гэсэн функц нь IPv4 сүлжээний дугаар болон маск нь тухайн сүлжээний төхөөрөмжтэй нийцэж байгаа эсэхийг шийддэг. Үүнд хэрэглэгддэг Maskp, netp болон bpf_u_int32 нь бүгд заагч утгууд байна. Энэхүү функц нь амжилттай болсон үед 0 харин алдаа гарсан үед -1-г буцаадаг бөгөөд алдаа гарсан үед errbuf нь алдааны мессежээр дүүрдэг.
### Pcap_setfilter
:Энэхүү функц нь шүүлтүүр хийж байгаа програмыг тодорхойлж өгдөг. Fp гэдэг нь bpf_program бүтцийн заагч утга юм. Ихэвчлэн pcap_compile() функцын үр дүнг дуудах зорилгоор ашиглана. Энэ нь амжилттай болсон үед 0 харин алдаа гарсан үед -1 гэсэн утга буцаана.
### Pcap_Loop
:Энэ нь барьж авж байгаа пакет эсвэл файлд хадгалагдсан байгаа пакетыг боловсруулахад хэрэглэгддэг.Энэ нь барьж авж буй пакет эсвэл тухайн уншиж буй хадгалсан файлаас боловсруулалт хийх бөгөөд энэ нь cnt пакет гарж ирэх хүртэл үргэлжилнэ. Мөн ямар нэгэн алдаа гарвал Pcap_breakloop() гэсэн функц дуудагдана. Хэрэв алдаа гарвал ямар нэгэн утга буцаахгүй бөгөөд шууд пакет шүүж байгаа учраас пакет боловсруулалтыг дуусгах өөр нэгэн функц ажилтал боловсруулагдсаар л байна.
## Холбоос
::*tcpdump
::*Wireshark
::*Libpcap
::*snort
::*nmap
::*scapy

Ангилал:Драйвер (программ хангамж)
Ангилал:Чөлөөт аюулгүй байдлын программ
Ангилал:Чөлөөт системийн программ хангамж
Ангилал:Тагнуулын программ