Bagian situs
Pilihan Editor:
- Sistem suara terdistribusi
- Tata cara pelunasan pembayaran yang dijanjikan MTS
- Cara menutup profil di Odnoklassniki
- Meningkatkan kinerja ponsel cerdas
- Bagaimana cara melacak (memeriksa) surat terdaftar (Pos Rusia)?
- "Robokassa": opini pengguna
- Jenis frasa kunci: cara membuat iklan untuk frasa tersebut di Yandex
- Menonton televisi IP di TV Iptv set-top box untuk TV cara kerjanya
- Cara menghapus nomor kartu dari Aliexpress Cara melepas pin kartu dari Aliexpress
- Berapa banyak anggaran yang dapat dilakukan oleh karyawan Xiaomi
Periklanan
Sniffer untuk jaringan lokal dengan pembangun. Menulis sniffer sederhana untuk Windows |
Pada artikel ini kita akan melihat cara membuat sniffer sederhana untuk OS Windows. PerkenalanTarget: tulis program yang akan menangkap lalu lintas jaringan (Ethernet, WiFi) yang dikirimkan melalui protokol IP. Saya harap ini menarik bagi Anda. Teori (membaca tidak wajib, tetapi disarankan)DI DALAM saat ini sebagian besar modern jaringan informasi didasarkan pada fondasi tumpukan protokol TCP/IP. Tumpukan protokol TCP/IP (Transmission Control Protocol/Internet Protocol) adalah nama kolektif untuk protokol jaringan dengan tingkat berbeda yang digunakan dalam jaringan. Pada artikel ini kita terutama akan tertarik pada protokol IP - dirutekan protokol jaringan, digunakan untuk pengiriman data tanpa jaminan yang dibagi menjadi apa yang disebut paket (istilah yang lebih tepat adalah datagram) dari satu node jaringan ke node lainnya. Latihan (percakapan substantif)Saat ini sudah cukup banyak yang tercipta perangkat lunak untuk mendengarkan lalu lintas. Yang paling terkenal adalah Wireshark. Tentu saja, tujuannya bukan untuk meraih kemenangan - kami tertarik pada tugas mencegat lalu lintas hanya dengan "mendengarkan" antarmuka jaringan. Penting untuk dipahami bahwa kami tidak akan meretas dan mencegat lebih aneh lalu lintas. Kita hanya perlu melihat dan menganalisis lalu lintas yang melewati host kita. Mengapa hal ini mungkin diperlukan:
Tidak seperti Wireshark, yang didasarkan pada perpustakaan libpcap/WinPcap, penganalisis kami tidak akan menggunakan driver ini. Terlebih lagi, kami tidak akan memiliki driver sama sekali, dan kami tidak akan menulis NDIS kami sendiri (oh ngeri!). Anda dapat membaca tentang ini di topik ini. Dia hanya akan menjadi pengamat pasif, menggunakan hanya Perpustakaan WinSock. Menggunakan driver dalam hal ini adalah mubazir. Bagaimana bisa? Sangat sederhana. Dimulai dengan Windows 2000 (NT 5.0), menjadi sangat mudah untuk membuat program untuk mendengarkan segmen jaringan, karena dia pengemudi jaringan memungkinkan Anda untuk mengalihkan soket ke mode menerima semua paket. Mengaktifkan Mode Promiscuousbendera panjang = 1; soket soket; #define SIO_RCVALL 0x98000001 ioctlsocket(soket, SIO_RCVALL, &RS_Flag);Program kami beroperasi pada paket IP dan menggunakan perpustakaan Windows Sockets versi 2.2 dan soket mentah. Untuk mendapatkan akses langsung ke paket IP, soket harus dibuat sebagai berikut: Membuat soket mentahs = soket(AF_INET, SOCK_RAW, IPPROTO_IP);Di sini, bukannya konstanta SOCK_STREAM(protokol TCP) atau SOCK_DGRAM(Protokol UDP), kami menggunakan nilai SOCK_RAW. Secara umum, bekerja dengan soket mentah menarik tidak hanya dari sudut pandang penangkapan lalu lintas. Faktanya, kami mendapatkan kendali penuh atas pembentukan paket. Atau lebih tepatnya, kami membentuknya secara manual, yang memungkinkan, misalnya, mengirim paket ICMP tertentu... Mari kita lanjutkan. Diketahui bahwa paket IP terdiri dari header, informasi layanan, dan sebenarnya data. Saya menyarankan Anda untuk melihat di sini untuk menyegarkan pengetahuan Anda. Mari kita gambarkan header IP dalam bentuk struktur (berkat artikel bagus tentang RSDN): Deskripsi struktur paket IPtypedef struct _IPHeader ( unsigned char ver_len; // versi header dan panjangnya unsigned char tos; // tipe layanan unsigned short length; // panjang keseluruhan paket unsigned short id; // Id unsigned short flgs_offset; // flags dan offset unsigned char ttl ; // protokol char yang tidak ditandatangani seumur hidup; // protokol xsum pendek yang tidak ditandatangani; checksum src panjang yang tidak ditandatangani; // Alamat IP pengirim unsigned long dest; // Alamat IP tujuan unsigned short *params; // parameter (hingga 320 bit) unsigned char *data; // data (hingga 65535 oktet)IPHeader;Fungsi utama dari algoritma mendengarkan akan terlihat seperti ini: Fungsi penangkapan paket tunggalIPHeader* RS_Sniff() ( IPHeader *hdr; int hitungan = 0; hitungan = recv(RS_SSocket, (char*)&RS_Buffer, sizeof(RS_Buffer), 0); if (hitungan >= sizeof(IPHeader)) ( hdr = (LPIPHeader )malloc(MAX_PACKET_SIZE); memcpy(hdr, RS_Buffer, MAX_PACKET_SIZE); RS_UpdateNetStat(hitungan, hdr) jika tidak, kembalikan 0;Semuanya sederhana di sini: kami menerima sepotong data menggunakan fungsi soket standar penerimaan, lalu salin ke dalam struktur seperti IPHeader. Mari kita tangkap semua paket yang mencapai antarmuka jaringan kitawhile (true) ( IPHeader* hdr = RS_Sniff(); // memproses paket IP if (hdr) ( // mencetak header di konsol) )Agak di luar topikDi sini dan di bawah, penulis telah membuat awalan RS_ (dari Raw Sockets) untuk beberapa fungsi dan variabel penting. Saya mengerjakan proyek ini 3-4 tahun yang lalu, dan saya memiliki ide gila untuk menulis perpustakaan lengkap untuk bekerja dengan soket mentah. Seperti yang sering terjadi, setelah memperoleh beberapa hasil yang signifikan (bagi penulis), semangatnya memudar, dan persoalannya tidak lebih dari sekedar contoh pelatihan. Pada prinsipnya, Anda dapat melangkah lebih jauh dan menjelaskan header dari semua protokol berikutnya yang terletak di atas. Untuk melakukan ini, Anda perlu menganalisis lapangan protokol dalam struktur IPHeader. Lihatlah contoh kodenya (ya, harusnya ada saklar, sial!), di mana headernya diwarnai tergantung pada protokol apa yang paketnya enkapsulasi dalam IP: /* * Menyorot paket dengan warna */ void ColorPacket(const IPHeader *h, const u_long haddr, const u_long whost = 0) ( if (h->xsum) SetConsoleTextColor(0x17); // jika paket tidak kosong yang lain SetConsoleTextColor(0x07) ; // paket kosong if (haddr == h->src) ( SetConsoleTextColor(BACKGROUND_BLUE | /*BACKGROUND_INTENSITY |*/ FOREGROUND_RED | FOREGROUND_INTENSITY); // paket "asli" untuk pengembalian ) else if (haddr == h->dest ) ( SetConsoleTextColor(BACKGROUND_BLUE | /*BACKGROUND_INTENSITY |*/ FOREGROUND_GREEN | FOREGROUND_INTENSITY); // "asli" menerima paket ) if (h->protocol == PROT_ICMP || h->protocol == PROT_IGMP) ( SetConsoleTextColor (0x70) ; // paket ICMP ) else if(h->protokol == PROT_IP || h->protokol == 115) ( SetConsoleTextColor(0x4F); // paket IP-dalam-IP, L2TP ) else if(h - >protokol == 53 ||.h->protokol == 56) ( SetConsoleTextColor(0x4C); // TLS, IP dengan Enkripsi ) if(whost == h->dest || whost == h->src) ( SetConsoleTextColor (0x0A); Namun, hal ini jauh di luar cakupan artikel ini. Untuk contoh pelatihan kami, cukup dengan melihat alamat IP host dari mana dan ke mana lalu lintas datang, dan menghitung jumlahnya per unit waktu (program yang sudah selesai ada di arsip di akhir artikel) . Untuk menampilkan data header IP, Anda harus mengimplementasikan fungsi untuk mengubah header (tetapi bukan data) datagram menjadi string. Sebagai contoh implementasi, kami dapat menawarkan opsi berikut: Mengubah header IP menjadi stringsebaris char* iph2str(IPHeader *iph) ( const int BUF_SIZE = 1024; char *r = (char*)malloc(BUF_SIZE); memset((void*)r, 0, BUF_SIZE); sprintf(r, "ver=% d hlen=%d tos=%d len=%d id=%d flags=0x%X offset=%d ttl=%dms prot=%d crc=0x%X src=%s dest=%s", BYTE_H (iph->ver_len), BYTE_L(iph->ver_len)*4, iph->tos, ntohs(iph->panjang), ntohs(iph->id), IP_FLAGS(ntohs(iph->flgs_offset)), IP_OFFSET (ntohs(iph->flgs_offset)), iph->ttl, iph->protokol, ntohs(iph->xsum), nethost2str(iph->src), nethost2str(iph->dest));Berdasarkan informasi dasar di atas, kita mendapatkan program kecil ini (nama menyeramkan ss, kependekan dari simple sniffer), yang mengimplementasikan mendengarkan lalu lintas IP secara lokal. Antarmukanya ditunjukkan di bawah pada gambar. Sumber dan kode biner Saya menyediakannya apa adanya, seperti beberapa tahun yang lalu. Sekarang saya takut untuk melihatnya, namun cukup mudah dibaca (tentu saja, Anda tidak bisa terlalu percaya diri). Bahkan Visual Studio Express 2005 sudah cukup untuk kompilasi. Apa yang kami dapatkan pada akhirnya:
Terima kasih atas perhatian Anda, saya mengucapkan Selamat Natal kepada Anda dan semuanya! Pada artikel ini kita akan melihat cara membuat sniffer sederhana untuk OS Windows. PerkenalanTarget: tulis program yang akan menangkap lalu lintas jaringan (Ethernet, WiFi) yang dikirimkan melalui protokol IP.Cara: Visual Studio 2005 atau lebih tinggi. Pendekatan yang dijelaskan di sini bukan milik penulis secara pribadi dan berhasil digunakan di banyak program komersial dan gratis (halo, GPL). Pekerjaan ini ditujukan terutama bagi pemula dalam pemrograman jaringan, yang setidaknya memiliki pengetahuan dasar di bidang soket pada umumnya, dan soket Windows pada khususnya. Disini saya akan sering menulis hal-hal yang terkenal, karena subjeknya spesifik, jika saya melewatkan sesuatu, kepala saya akan kacau. Saya harap ini menarik bagi Anda. Teori (membaca tidak wajib, tetapi disarankan)Saat ini, sebagian besar jaringan informasi modern didasarkan pada tumpukan protokol TCP/IP. Tumpukan protokol TCP/IP (Transmission Control Protocol/Internet Protocol) adalah nama kolektif untuk protokol jaringan dengan tingkat berbeda yang digunakan dalam jaringan. Pada artikel ini, kita terutama akan tertarik pada protokol IP - protokol jaringan yang dirutekan yang digunakan untuk pengiriman data tanpa jaminan yang dibagi menjadi apa yang disebut paket (istilah yang lebih tepat adalah datagram) dari satu node jaringan ke node jaringan lainnya.Yang menarik bagi kami adalah paket IP yang dirancang untuk mengirimkan informasi. Ini adalah model data jaringan OSI tingkat tinggi, ketika Anda dapat mengisolasi diri dari perangkat dan media transmisi data, hanya beroperasi dengan representasi logis. Sangat logis bahwa cepat atau lambat alat untuk mencegat, memantau, menghitung, dan menganalisis lalu lintas jaringan akan muncul. Alat seperti ini biasa disebut traffic analisa, packet analisa atau sniffer (dari bahasa Inggris sniff – sniff). Ini adalah penganalisis lalu lintas jaringan, sebuah program atau perangkat keras-perangkat lunak yang dirancang untuk mencegat dan selanjutnya menganalisis, atau hanya menganalisis, lalu lintas jaringan yang ditujukan untuk node lain. Latihan (percakapan substantif)Saat ini sudah cukup banyak software yang diciptakan untuk mendengarkan lalu lintas. Yang paling terkenal adalah Wireshark. Tentu saja, tujuannya bukan untuk meraih kemenangan - kami tertarik pada tugas mencegat lalu lintas hanya dengan "mendengarkan" antarmuka jaringan. Penting untuk dipahami bahwa kami tidak akan meretas dan mencegat lebih aneh lalu lintas. Kita hanya perlu melihat dan menganalisis lalu lintas yang melewati host kita.Mengapa hal ini mungkin diperlukan:
Bagaimana bisa? Sangat sederhana. Dimulai dengan Windows 2000 (NT 5.0), menjadi sangat mudah untuk membuat program untuk mendengarkan segmen jaringan, karena driver jaringannya memungkinkan Anda mengatur soket untuk menerima semua paket. Mengaktifkan Mode Promiscuousbendera panjang = 1; soket soket; #define SIO_RCVALL 0x98000001 ioctlsocket(soket, SIO_RCVALL, &RS_Flag);Program kami beroperasi pada paket IP dan menggunakan perpustakaan Windows Sockets versi 2.2 dan soket mentah. Untuk mendapatkan akses langsung ke paket IP, soket harus dibuat sebagai berikut: Membuat soket mentahs = soket(AF_INET, SOCK_RAW, IPPROTO_IP);Di sini, bukannya konstanta SOCK_STREAM(protokol TCP) atau SOCK_DGRAM(Protokol UDP), kami menggunakan nilai SOCK_RAW. Secara umum, bekerja dengan soket mentah menarik tidak hanya dari sudut pandang penangkapan lalu lintas. Faktanya, kami mendapatkan kendali penuh atas pembentukan paket. Atau lebih tepatnya, kami membentuknya secara manual, yang memungkinkan, misalnya, mengirim paket ICMP tertentu... Mari kita lanjutkan. Diketahui bahwa paket IP terdiri dari header, informasi layanan, dan sebenarnya data. Saya menyarankan Anda untuk melihat di sini untuk menyegarkan pengetahuan Anda. Mari kita gambarkan header IP dalam bentuk struktur (berkat artikel bagus tentang RSDN): Deskripsi struktur paket IPtypedef struct _IPHeader ( unsigned char ver_len; // versi header dan panjangnya unsigned char tos; // tipe layanan unsigned short length; // panjang keseluruhan paket unsigned short id; // Id unsigned short flgs_offset; // flags dan offset unsigned char ttl ; // protokol unsigned char seumur hidup; // protokol unsigned long src; // alamat IP pengirim unsigned long dest; // alamat IP tujuan unsigned short *params; 65535 oktet) )IPHeader;Fungsi utama dari algoritma mendengarkan akan terlihat seperti ini: Fungsi penangkapan paket tunggalIPHeader* RS_Sniff() ( IPHeader *hdr; int hitungan = 0; hitungan = recv(RS_SSocket, (char*)&RS_Buffer, sizeof(RS_Buffer), 0); if (hitungan >= sizeof(IPHeader)) ( hdr = (LPIPHeader )malloc(MAX_PACKET_SIZE); memcpy(hdr, RS_Buffer, MAX_PACKET_SIZE); RS_UpdateNetStat(hitungan, hdr) jika tidak, kembalikan 0;Semuanya sederhana di sini: kami menerima sepotong data menggunakan fungsi soket standar penerimaan, lalu salin ke dalam struktur seperti IPHeader. Dan akhirnya, kita memulai loop pengambilan paket tanpa akhir: Mari kita tangkap semua paket yang mencapai antarmuka jaringan kitawhile (true) ( IPHeader* hdr = RS_Sniff(); // memproses paket IP if (hdr) ( // mencetak header di konsol) )Agak di luar topikDi sini dan di bawah, penulis telah membuat awalan RS_ (dari Raw Sockets) untuk beberapa fungsi dan variabel penting. Saya mengerjakan proyek ini 3-4 tahun yang lalu, dan saya memiliki ide gila untuk menulis perpustakaan lengkap untuk bekerja dengan soket mentah. Seperti yang sering terjadi, setelah memperoleh beberapa hasil yang signifikan (bagi penulis), semangatnya memudar, dan persoalannya tidak lebih dari sekedar contoh pelatihan.Pada prinsipnya, Anda dapat melangkah lebih jauh dan menjelaskan header dari semua protokol berikutnya yang terletak di atas. Untuk melakukan ini, Anda perlu menganalisis lapangan protokol dalam struktur IPHeader. Lihatlah contoh kodenya (ya, harusnya ada saklar, sial!), di mana headernya diwarnai tergantung pada protokol apa yang paketnya enkapsulasi dalam IP: /* * Menyorot paket dengan warna */ void ColorPacket(const IPHeader *h, const u_long haddr, const u_long whost = 0) ( if (h->xsum) SetConsoleTextColor(0x17); // jika paket tidak kosong yang lain SetConsoleTextColor(0x07) ; // paket kosong if (haddr == h->src) ( SetConsoleTextColor(BACKGROUND_BLUE | /*BACKGROUND_INTENSITY |*/ FOREGROUND_RED | FOREGROUND_INTENSITY); // paket "asli" untuk pengembalian ) else if (haddr == h->dest ) ( SetConsoleTextColor(BACKGROUND_BLUE | /*BACKGROUND_INTENSITY |*/ FOREGROUND_GREEN | FOREGROUND_INTENSITY); // "asli" menerima paket ) if (h->protocol == PROT_ICMP || h->protocol == PROT_IGMP) ( SetConsoleTextColor (0x70) ; // paket ICMP ) else if(h->protocol == PROT_IP || h->protocol == 115) ( SetConsoleTextColor(0x4F); // paket IP-in-IP, L2TP ) else if(h - >protokol == 53 ||.h->protokol == 56) ( SetConsoleTextColor(0x4C); // TLS, IP dengan Enkripsi ) if(whost == h->dest || whost == h->src) ( SetConsoleTextColor (0x0A); Namun, hal ini jauh di luar cakupan artikel ini. Untuk contoh pelatihan kami, cukup dengan melihat alamat IP host dari mana dan ke mana lalu lintas datang, dan menghitung jumlahnya per unit waktu (program yang sudah selesai ada di arsip di akhir artikel) . Untuk menampilkan data header IP, Anda harus mengimplementasikan fungsi untuk mengubah header (tetapi bukan data) datagram menjadi string. Sebagai contoh implementasi, kami dapat menawarkan opsi berikut: Mengubah header IP menjadi stringsebaris char* iph2str(IPHeader *iph) ( const int BUF_SIZE = 1024; char *r = (char*)malloc(BUF_SIZE); memset((void*)r, 0, BUF_SIZE); sprintf(r, "ver=% d hlen=%d tos=%d len=%d id=%d flags=0x%X offset=%d ttl=%dms prot=%d crc=0x%X src=%s dest=%s", BYTE_H (iph->ver_len), BYTE_L(iph->ver_len)*4, iph->tos, ntohs(iph->panjang), ntohs(iph->id), IP_FLAGS(ntohs(iph->flgs_offset)), IP_OFFSET (ntohs(iph->flgs_offset)), iph->ttl, iph->protokol, ntohs(iph->xsum), nethost2str(iph->src), nethost2str(iph->dest));Berdasarkan informasi dasar yang diberikan di atas, kita mendapatkan program kecil ini (nama menyeramkan ss, kependekan dari simple sniffer), yang mengimplementasikan mendengarkan lalu lintas IP secara lokal. Antarmukanya ditunjukkan di bawah pada gambar. Saya memberikan sumber dan kode biner apa adanya, seperti beberapa tahun yang lalu. Sekarang saya takut untuk melihatnya, namun cukup mudah dibaca (tentu saja, Anda tidak bisa begitu percaya diri). Bahkan Visual Studio Express 2005 sudah cukup untuk kompilasi. Apa yang kami dapatkan pada akhirnya:
Selamat siang Entah bagaimana masalah muncul di tempat kerja - ada perangkat yang bekerja melalui I2C dan protokolnya perlu dipahami. Oleh karena itu, kita memerlukan sniffer untuk antarmuka I2C, yang akan menampilkan segala sesuatu yang datang dan pergi melalui I2C ke port UART dan kemudian melalui konverter ke port COM komputer. AwalSaya hanya memiliki beberapa Atmeg8 dan saya memutuskan mengapa tidak menggunakannya. Selanjutnya, pertanyaan tentang rangkaian sniffer muncul.Ada 2 pilihan - nyalakan sniffer secara paralel, atau di sirkuit terbuka. Jelas sekali, opsi pertama terlihat jauh lebih sederhana, yang pada kenyataannya ternyata sepenuhnya salah. Tapi hal pertama yang pertama. Secara singkat tentang antarmuka itu sendiri. I2C (TWI di Atmel) menggunakan dua kabel - SCL dan SDA. Yang pertama bertanggung jawab untuk mencatat waktu sinyal, yang kedua bertanggung jawab untuk mengirimkan informasi secara langsung. Antarmuka juga memiliki status START dan STOP. Jadi, pikiran pertama saya adalah mengambil probe dan menghubungkannya ke kaki saya di satu sisi interupsi eksternal di atmega8 di sisi lain ke jalur SDA dan menangkap ujung depan, dan menentukan 0 atau 1 dari waktu yang telah berlalu. Jelas, ini seharusnya bekerja dengan sangat buruk, karena sinyal STOP tidak diproses dengan benar. Pikiran kedua adalah melakukan hal yang sama, tetapi menangkap interupsi pada jalur SCL, dan membaca jalur SDA yang terhubung ke kaki digital biasa menggunakan interupsi tersebut. Di sini semuanya tampak lebih layak, kecuali untuk status STOP yang sama, tetapi saya memutuskan untuk mencoba merakitnya di papan tempat memotong roti dan melihat apa yang terjadi. Saya mohon maaf sebelumnya jika Anda menemukan kesalahan yang jelas dalam kode di bawah ini, karena saya sedang merekonstruksi versi kode yang ditolak dari memori sambil berlutut. Kode pengendali interupsi terlihat seperti ini: ISR(INT0_vect) ( cli(); if (bitIsHigh(PINB, 0)) uart_send_char("1"); else uart_send_char("0"); sei(); ) Data uint8_t statis = 0; statis uint8_t idx = 7; ISR(INT0_vect) ( cli(); data |= bitIsHigh(PINB, 0)<< (idx--);
if (!idx)
{
uart_send_char(data);
data = 0;
idx = 7;
}
sei();
}
Di jalur yang benarTidak peduli seberapa keras saya mencoba mengimplementasikan sniffer menggunakan rangkaian paralel, tidak ada hasil. Berdasarkan hal ini, hanya ada satu pilihan yang tersisa - mikrokontroler harus dimasukkan ke dalam celah, yaitu, mikrokontroler harus menjadi master untuk perangkat respons dan budak untuk master asli. Mungkin terdengar membingungkan, namun kenyataannya tidak seperti itu.Karena atmega8 hanya memiliki satu perangkat keras I2C, jelas bahwa agar dapat berfungsi, Anda perlu menulis dukungan perangkat lunak untuk protokol tersebut. Hasilnya adalah kode berikut: ISR (TWI_VECT) (CLI(); UINT8_T StATUS = TWSR; UINT8_T B; Char S; S = 0; _DLAY_MS (1); STATUS & I2C_STATUS_MASK) (KASUS I2C_STATUS_SR_RX_ADR_AC:/* KASUS I2C_ST Atus_sr_rx_adr_nack:*/ uart_send_str ("- AW :"); uart_send_int(TWDR); i2csoft_start(); i2csoft_open_write(I2C_ADDRESS); break; case I2C_STATUS_SR_RX_DATA_ACK:/* case I2C_STATUS_SR_RX_DATA_NACK:*/ b = TWDR; sprintf(s, " %.2X", b); uart_send_str( s ); i2csoft_write_byte(b); kasus I2C_STATUS_SR_RX_STOP_RESTART: uart_send_str("E\n"); kasus I2C_STATUS_BUS_ERROR: uart_send_str("B\n"); baca_byte (); uart_send_str(s); istirahat; kasus TW_ST_DATA_ACK: b = i2csoft_read_byte(); b = i2csoft_read_byte(salah);< merusak; bawaan: uart_send_char("U"); |
Populer:
Baru
- Tata cara pelunasan pembayaran yang dijanjikan MTS
- Cara menutup profil di Odnoklassniki
- Meningkatkan kinerja ponsel cerdas
- Bagaimana cara melacak (memeriksa) surat terdaftar (Rusia Post)?
- "Robokassa": opini pengguna
- Jenis frasa kunci: cara membuat iklan untuk frasa tersebut di Yandex
- Menonton televisi IP di TV Iptv set-top box untuk TV cara kerjanya
- Cara menghapus nomor kartu dari Aliexpress Cara melepas pin kartu dari Aliexpress
- Berapa banyak anggaran yang dapat dilakukan oleh karyawan Xiaomi
- Salah satu yang asing: memulihkan data dari FAT, NTFS dan UFS tanpa meninggalkan Linux Bagaimana memulihkan sistem file FAT32