Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 58, средняя оценка - 4.90
AnonymC
1163 / 445 / 23
Регистрация: 23.06.2009
Сообщений: 6,283
Завершенные тесты: 1
#1

что то вроде программки,которая проверяет Hosts и лечит - C++

29.10.2009, 19:14. Просмотров 7221. Ответов 99
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void main (){
 
int c=0;
FILE *f=fopen("C:\WINDOWS\system32\drivers\etc\hosts", "a");
 
while((c=getc(f))!=EOF){
 
    if(c!="127.0.0.1 localhost"){
        cout<<"File hosts is infected";
f = fopen("C:\WINDOWS\system32\drivers\etc\hosts", "w");
fputs("127.0.0.1 localhost", f);
    }
}
 
fclose(f);
 
}
это мой код,вот на этом месте
if(c!="127.0.0.1 localhost")
я на этом месте не знаю как поступить
надо написать код,ктороый если находит другие строки кроме заводских строк-должен удалять их...как сделать?

Добавлено через 4 минуты
вопрос некорректно задал
в файле есть некий текст,определить,если кроме этого текста есть и другие слова,то удалить весь текст и добавить
127.0.0.1 loaclhost
это мой алгоритмн
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.10.2009, 19:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос что то вроде программки,которая проверяет Hosts и лечит (C++):

Напишите функцию, которая проверяет, отсортирован ли массив - C++
Напишите функцию, которая проверяет, отсортирован ли массив вещественных чисел по невозрастанию. Она возвращает true, если отсортирован, и...

Написать программу, которая проверяет удачливость билета - C++
Близняшки Вера,Надежда и любовь пользуются общественным транспортом,чтобы добраться до школы.Когда они расплачиваются за проезд,они...

Составить программу, которая проверяет число на четность - C++
Суть самой программы: нужно составить программу, проверяющую, что введенное число является четным или нечетным. Проблема: всегда...

Написать программу, которая проверяет, является ли год високосным - C++
Написать программу, которая проверяет, является ли год високосным. Помогите пожалуйста

Написать функцию которая проверяет на уникальность каждый номер - C++
Решите пожалуйста Добавлено через 4 минуты Написать функцию которая проверяет табельный номер студента

Нужна программа которая проверяет, является ли число простым - C++
Нужна программа которая проверяет, является ли число простым. Вводится одно число n. Формат выходных данных: Необходимо вывести ...

99
AnonymC
1163 / 445 / 23
Регистрация: 23.06.2009
Сообщений: 6,283
Завершенные тесты: 1
30.10.2009, 09:55  [ТС] #16
Цитата Сообщение от #pragma Посмотреть сообщение
free(str_in_file);
free(str_in_etalon);
Цитата Сообщение от #pragma Посмотреть сообщение
(char *)malloc
в эти штучки мне не знакмоыПрокомментируй
0
inter
9703 / 2457 / 47
Регистрация: 06.03.2009
Сообщений: 8,503
30.10.2009, 09:59 #17
ну по аналогии то хотя бы? стринг понятно?
стринг в файле, стринг в эталоне(в образце)?
ну а чар и маллок в хелпе описаны?
0
#pragma
Временно недоступен
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
30.10.2009, 11:20 #18
Цитата Сообщение от МедведЪ Посмотреть сообщение
в эти штучки мне не знакмоыПрокомментируй
C
1
2
   char *str_in_file = (char *)malloc(MAX_STRING_SIZE);
   char *str_in_etalon = (char *)malloc(MAX_STRING_SIZE);
Здесь мы выделяем память под строку размером MAX_STRING_SIZE с помощью функции malloc.Функция возвращает указатель на область памяти,ей выделенную,сама функция имеет тип void* ,поэтому мы её насильно приводим к типу char*.
C
1
2
   free(str_in_file);
   free(str_in_etalon);
А тут память освобождается.Сейчас пригляделся,оказывается malloc может возвращать NULL при неудаче,я этого не знал.Лучше мне,наверное,ничего не советовать,а то насоветую всякую чушь.
В-общем,нужно и для malloc делать проверки на NULL.
0
AnonymC
1163 / 445 / 23
Регистрация: 23.06.2009
Сообщений: 6,283
Завершенные тесты: 1
30.10.2009, 14:28  [ТС] #19
#pragma, большое спасибо
0
AnonymC
1163 / 445 / 23
Регистрация: 23.06.2009
Сообщений: 6,283
Завершенные тесты: 1
30.10.2009, 20:27  [ТС] #20
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
int main()
{
   FILE * pFile;
   char mystring [100];
 
   pFile = fopen ("myfile.txt" , "r");
   if (pFile == NULL) perror ("Error opening file");
   else {
     fgets (mystring , 100 , pFile);
     puts (mystring);
     fclose (pFile);
   }
   return 0;
}
я этот код не понял,mystring Это типа сожеражние фалйа да,ну типа сравнивает?
я этот момент не понял
fgets (mystring , 100 , pFile);

Добавлено через 33 минуты
вот переделал код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void main (){
 
FILE * f;
int c=0;
   char mystring [1000]; 
   f = fopen ("D:\\ALEX RESERF\\ALEX\\111.txt" , "r");
 
   if (f == NULL) perror ("Cant open file");
   else {
 
       while((c=getc(f))!=EOF){
 
     fgets (mystring , 1000 , f);
     puts (mystring);
     }
 
   }
 
fclose (f);
 
system("pause");
 
}
теперь выводит весь текст выводит...но все таки я не понял до конца...как сдела если прога увидит лишние строки то сообщать об этом и удалить их?какая функция?

Добавлено через 9 минут
вот мой новый
код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <windows.h>
#include <string.h>
#include <string>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream> 
using namespace std;
 
void main (){
 
FILE * f;
int c=0;
   char mystring [1000]; 
   f = fopen ("D:\\ALEX RESERF\\ALEX\\111.txt" , "r");
 
   if (f == NULL) perror ("Cant open file");
   else {
 
       while((c=getc(f))!=EOF){
 
     fgets (mystring , 200 , f);
     puts (mystring);
     }
 
   }
   cout<<"\nMy\n"<<mystring;
 
fclose (f);
 
system("pause");
 
}
код
вот в этом месте cout<<"\nMy\n"<<mystring; выводит только последнюю строку,как сделать что последние 2?3?
0
M128K145
Эксперт С++
8289 / 3509 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
30.10.2009, 23:16 #21
Код
# (C) Корпорация Майкрософт (Microsoft Corp.), 1993-1999
#
# Это образец файла HOSTS, используемый Microsoft TCP/IP для Windows.
#
# Этот файл содержит сопоставления IP-адресов именам узлов.
# Каждый элемент должен располагаться в отдельной строке. IP-адрес должен
# находиться в первом столбце, за ним должно следовать соответствующее имя.
# IP-адрес и имя узла должны разделяться хотя бы одним пробелом.
#
# Кроме того, в некоторых строках могут быть вставлены комментарии 
# (такие, как эта строка), они должны следовать за именем узла и отделяться
# от него символом '#'.
#
# Например:
#
#      102.54.94.97     rhino.acme.com          # исходный сервер
#       38.25.63.10     x.acme.com              # узел клиента x

127.0.0.1       localhost
Вот нормальный текст, в С не силен, но если делать на С++, то считываешь все в string и сравниваешь текст с каким-нибудь эталоном string hosts = "тексту чистого хостса". Если они не совпадают, то выдаешь соответствующее сообщение и перезаписываешь файл
0
AnonymC
1163 / 445 / 23
Регистрация: 23.06.2009
Сообщений: 6,283
Завершенные тесты: 1
30.10.2009, 23:19  [ТС] #22
M128K145, дык вроде мой код это и делает?...или нет...я просто код не понял до конца..

Добавлено через 40 секунд
>>>
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <windows.h>
#include <string.h>
#include <string>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream> 
using namespace std;
 
void main (){
 
FILE * f;
int c=0;
   char mystring [1000]; 
   f = fopen ("D:\\ALEX RESERF\\ALEX\\111.txt" , "r");
 
   if (f == NULL) perror ("Cant open file");
   else {
 
           while((c=getc(f))!=EOF){
 
     fgets (mystring , 200 , f);
     puts (mystring);
         }
 
   }
   cout<<"\nMy\n"<<mystring;
 
fclose (f);
 
system("pause");
 
}
вот этот код
0
Даемоник
42 / 42 / 3
Регистрация: 22.05.2009
Сообщений: 97
30.10.2009, 23:44 #23
Ну фактически программа делает только открытие и вывод файла, но проверки-то нет!

Получается надо создать файл идентичный чистому хосту прочитать его, открыть и прочитать файл хоста, который используется системой( или чем там, я не до конца уловил) и проверить, или жесделать как предложил
M128K145, т.е. добавить проверку на эталон чистого хоста.
0
M128K145
Эксперт С++
8289 / 3509 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
31.10.2009, 00:07 #24
МедведЪ,
вот
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <string>
#include <iostream> 
#include <fstream>
int main()
{
    setlocale (LC_ALL, "Russian");
    std::string bufStr, curHosts = "", iHosts = "# (C) Корпорация Майкрософт (Microsoft Corp.), 1993-1999\n\
#\n\
# Это образец файла HOSTS, используемый Microsoft TCP/IP для Windows.\n\
#\n\
# Этот файл содержит сопоставления IP-адресов именам узлов.\n\
# Каждый элемент должен располагаться в отдельной строке. IP-адрес должен\n\
# находиться в первом столбце, за ним должно следовать соответствующее имя.\n\
# IP-адрес и имя узла должны разделяться хотя бы одним пробелом.\n\
#\n\
# Кроме того, в некоторых строках могут быть вставлены комментарии \n\
# (такие, как эта строка), они должны следовать за именем узла и отделяться\n\
# от него символом '#'.\n\
#\n\
# Например:\n\
#\n\
#      102.54.94.97     rhino.acme.com          # исходный сервер\n\
#       38.25.63.10     x.acme.com              # узел клиента x\n\
\n\
127.0.0.1       localhost";
    std::ifstream inp("C:\\WINDOWS\\system32\\drivers\\etc\\hosts", std::ios::in);
    
    inp.seekg(0);
    if(!inp)
    {
        std::cout<<"Файла нет\n";
        system("pause");
        return 0;
    }
    while(!inp.eof())
    {
        getline(inp, bufStr, '\n');
        curHosts += bufStr + '\n';
    }   
    inp.close();
    std::cout<<curHosts.replace(0, iHosts.length(), "");
    std::ofstream out("C:\\WINDOWS\\system32\\drivers\\etc\\hosts", std::ios::out);
    out<<iHosts;
    system("pause");
    return 0;
}
то что я говорил, только на C++
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
31.10.2009, 02:50 #25
А что мешает просто без всяких проверок заменить файл hosts на эталонный?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <windows.h>
#include <iostream>
#include <locale>
 
int main()
{
  // Устанавливаем русскую кодовую страницу
  setlocale(LC_ALL, "Russian");
 
  // Путь к эталонному файлу hosts
  char hosts_standart_path[MAX_PATH];
 
  // Записываем в hosts_standart_path путь к текущей папке 
  GetCurrentDirectory(MAX_PATH, hosts_standart_path);
 
  // Добавляем к hosts_standart_path имя эталонного файла
  strcat_s(hosts_standart_path, MAX_PATH, "\\hosts_standart");
 
  // Структура для поиска файлов
  WIN32_FIND_DATA wfd;
 
  // Проверяем присутсвует ли эталонный файл в текущей папке, если нет - завершаем программу
  if(FindFirstFile(hosts_standart_path, &wfd) == INVALID_HANDLE_VALUE){
    std::cout << "Эталонный файл hosts не найден. Выполнение программы прекращено." << std::endl;
    
    system("pause");
 
    return 0;
  }
 
  // Путь к файлу hosts
  char hosts_path[MAX_PATH];
 
  // Записываем в hosts_path путь к папке Windows
  GetWindowsDirectory(hosts_path, MAX_PATH);
 
  // Добавляем к hosts_path путь к файлу hosts
  strcat_s(hosts_path, MAX_PATH, "\\System32\\drivers\\etc\\hosts");
 
  // Путь к резервной копии файла hosts
  char hosts_reserve_path[MAX_PATH];
 
  // Записываем в hosts_reserve_path путь к папке Windows
  GetWindowsDirectory(hosts_reserve_path, MAX_PATH);
 
  // Добавляем к hosts_reserve_path путь к резервному файлу hosts
  strcat_s(hosts_reserve_path, MAX_PATH, "\\System32\\drivers\\etc\\hosts_reserve");
 
  // Создаем резервную копию
  CopyFile(hosts_path, hosts_reserve_path, FALSE);
 
  // Заменяем файл hosts на эталонный
  CopyFile(hosts_standart_path, hosts_path, FALSE);
 
  std::cout << "Замена файла hosts успешна произведена." << std::endl
    << "Путь к резервной копии: " << hosts_reserve_path << std::endl;
 
  system("pause");
 
  return 0;
};
Ложим эталонный файл в папку с exe-ником под именем hosts_standart и все работает.

Описание использованных функций (MSDN):
GetCurrentDirectory Function
GetSystemDirectory Function
FindFirstFile Function
strcat, wcscat, _mbscat
0
M128K145
Эксперт С++
8289 / 3509 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
31.10.2009, 08:45 #26
CyBOSSeR, а тебе никогда не было интересно было ли дописано там что-нибудь или нет?
0
AnonymC
1163 / 445 / 23
Регистрация: 23.06.2009
Сообщений: 6,283
Завершенные тесты: 1
31.10.2009, 10:02  [ТС] #27
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
А что мешает просто без всяких проверок заменить файл hosts на эталонный?
дело не в замене,я это уже решил надо просто ПРОВЕРИТЬ!
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
31.10.2009, 14:36 #28
Цитата Сообщение от M128K145 Посмотреть сообщение
CyBOSSeR, а тебе никогда не было интересно было ли дописано там что-нибудь или нет?
Опытный пользователь сам откроет и посмотрит, что там изменилось.
А вот обычному пользователю, который этот hosts ни разу не видел и не знает зачем он нужен, скорее всего, будет не важно были ли внесены изменения или нет, главное чтобы там было только то, что нужно (изначально).
0
AnonymC
1163 / 445 / 23
Регистрация: 23.06.2009
Сообщений: 6,283
Завершенные тесты: 1
31.10.2009, 15:08  [ТС] #29
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
А вот обычному пользователю, который этот hosts ни разу не видел и не знает зачем он нужен, скорее всего, будет не важно были ли внесены изменения или нет, главное чтобы там было только то, что нужно (изначально).
не знаю к кому адрессовано это,сам я разбираюсь в этом файле,
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
31.10.2009, 16:00 #30
Я же не о тебе говорю, а о потенциальных пользователях программы.
Я так вообще можно проверять не по строкам и по символам.
1. Открываем эталонный файл.
2. Открываем hosts.
3. Пока не достигнем конца первого или второго файла считываем следующий символ из обоих файлов и сравниваем. Если достигнут конец одного из файлов переходим к пункту 6.
4. Если символы идентичны - возвращаемся к пункту 3. Если нет переходим к следующему пункту.
5. Говорим, что hosts инфицирован и заменяем hosts на эталонный файл. Завершаем программу.
6. Поздравляем пользователя - его файл не инфицирован. Завершаем программу.
Вот тебе готовый алгоритм.

Добавлено через 10 минут
Предыдущий мой вариант, но еще и с проверкой:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <windows.h>
#include <iostream>
#include <fstream>
#include <locale>
#include <algorithm>
 
int main()
{
  // Устанавливаем русскую кодовую страницу
  setlocale(LC_ALL, "Russian");
 
  // Путь к эталонному файлу hosts
  char hosts_standart_path[MAX_PATH];
 
  // Записываем в hosts_standart_path путь к текущей папке 
  GetCurrentDirectory(MAX_PATH, hosts_standart_path);
 
  // Добавляем к hosts_standart_path имя эталонного файла
  strcat_s(hosts_standart_path, MAX_PATH, "\\hosts_standart");
 
  std::ifstream hosts_standart(hosts_standart_path);
 
  // Проверяем удалось ли открыть эталонный файл, если нет - завершаем программу
  if(!hosts_standart){
    std::cout << "Эталонный файл hosts не найден. Выполнение программы завершено." << std::endl;
    
    system("pause");
 
    return 0;
  }
 
  // Путь к файлу hosts
  char hosts_path[MAX_PATH];
 
  // Записываем в hosts_path путь к папке Windows
  GetWindowsDirectory(hosts_path, MAX_PATH);
 
  // Добавляем к hosts_path путь к файлу hosts
  strcat_s(hosts_path, MAX_PATH, "\\System32\\drivers\\etc\\hosts");
 
  // Файл hosts
  std::ifstream hosts(hosts_path);
 
  // Если не удалось открыть hosts - завершаем программу
  if(!hosts){
    std::cout << "Файл hosts не найден. Выполнение программы завершено." << std::endl;
 
    system("pause");
 
    return 0;
  }
 
  // Сравниваем содержание файлов, если эквивалентны - завершаем программу
  if(std::equal(std::istream_iterator<char>(hosts_standart), 
    std::istream_iterator<char>(), 
    std::istream_iterator<char>(hosts)))
  {
    std::cout << "Файл hosts не модифицирован. Выполнение прораммы завершено." << std::endl;
    
    system("pause");
 
    return 0;
  }
  else
    std::cout << "Файл hosts модифицирован. Будет произведена замена на эталонный с сохранением резервной копии." << std::endl;
 
 
  // Путь к резервной копии файла hosts
  char hosts_reserve_path[MAX_PATH];
 
  // Записываем в hosts_reserve_path путь к папке Windows
  GetWindowsDirectory(hosts_reserve_path, MAX_PATH);
 
  // Добавляем к hosts_reserve_path путь к резервному файлу hosts
  strcat_s(hosts_reserve_path, MAX_PATH, "\\System32\\drivers\\etc\\hosts_reserve");
 
  // Создаем резервную копию
  CopyFile(hosts_path, hosts_reserve_path, FALSE);
 
  // Заменяем файл hosts на эталонный
  CopyFile(hosts_standart_path, hosts_path, FALSE);
 
  std::cout << "Замена файла hosts успешна произведена." << std::endl
    << "Путь к резервной копии: " << hosts_reserve_path << std::endl;
 
  system("pause");
 
  return 0;
};
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.10.2009, 16:00
Привет! Вот еще темы с ответами:

Написать программу которая по заданному n проверяет число на палиндром - C++
Привет! Поступил учиться на дистанционное высшее образование, получил по предмету основы программирования домашнюю работу! Вот описание: ...

Написать функцию которая проверяет кратность двух чисел - C++
Написать функцию, которая принимает два целых числа N и M, и возвращает результат истина, если N кратно M, результат ложь, если N не...

написать программу которая проверяет , находится ли конкретный символ в строке ? - C++
Если честно -не совсем понимаю, как это делать Если можно - пример программы

Написать функцию, которая проверяет, является ли переданное ей число простым? - C++
Написать функцию, которая проверяет, является ли переданное ей число простым? Число называется простым, если оно делится без остатка только...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Yandex
Объявления
31.10.2009, 16:00
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru