Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.63/48: Рейтинг темы: голосов - 48, средняя оценка - 4.63
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390

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

29.10.2009, 19:14. Показов 12095. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.10.2009, 19:14
Ответы с готовыми решениями:

Напишите программу, которая проверяет что строка состоит из чисел и букв вперемешку, используя только эти две команды
На вход какая-то строка, гарантируется что она содержит только буквы и/или цифры (без всяких &quot;-&quot;, &quot;+&quot; и т.д.) На...

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

Защитник видновс вечно что то лечит. Диск очень греется (до 100Мб/с) 100% загрузка
Вот такое уже 7 дней._. Диск буквально горит Что он ищет? Что там он так удаляет долго, что он делает? Если что то хочу...

99
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
04.11.2009, 21:23
Студворк — интернет-сервис помощи студентам
Подсказка
C++
1
2
3
4
5
6
7
8
9
10
int n = 0;
 
while((ch = getc(file) != EOF){
  if(str[n] != ch){
    std::cout << "We all die!" << std::endl;
    goto DEATH;
  }
 
  ++n;
}
0
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
04.11.2009, 21:27  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 a=strlen(str);
  while((ch = getc(hosts)) != EOF){
 
      a++;
      if(ch==str[a]){
 
std::cout<<"OK\n";
 
break;
}
      else if(ch!=str[a]) {std::cout<<"no\n";
      break;
      }
 
 
  }
что не так?Снова NO!!!!

Добавлено через 1 минуту
CyBOSSeR, goto?это что то вроде break....оооо гото выводит прогу из всех циклов,а break только из полседнего?или наоборот?и что за death

Добавлено через 1 минуту
CyBOSSeR, Error 2 error C2094: label 'DEATH' was undefined c:\documents and settings\ag\my documents\visual studio 2008\projects\hosts reader\hosts reader\code.cpp 61 Hosts reader
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
04.11.2009, 21:33
C++
1
a=strlen(str);
Это не верно! Изначально а должно ровняться 0.

Насчет goto DEATH - это шутка, не запаривайся. Перепишу свой код без шуток.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
char ch;
int n = 0;
 
while((ch = getc(file) != EOF){
  if(ch == str[n]){
    std::cout << "Hosts infected" << std::endl;
    // здесь перезаписываем файл
    return 0;
  }
 
  n = n + 1;
}
 
std::cout << "Hosts not infected" << std::endl;
return 0;
1
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
04.11.2009, 21:44  [ТС]
CyBOSSeR, тоже самое.....

Добавлено через 3 минуты
я написал в ИФ-е break теперь один раз выводится...а когда ввел твой код много раз выводилось....еще дописал else

Добавлено через 1 минуту
CyBOSSeR, и еще убрал return-ы потому что system("pause") не работал

Добавлено через 1 минуту
кстати вот значение чара
C++
1
 char* str = "# (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\n127.0.0.1       localhost";
может тут ошибки какие то?
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
04.11.2009, 21:48
Дай твой код, я проверю.
0
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
04.11.2009, 22:20  [ТС]
код
#include <windows.h>
#include <string.h>
#include <string>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include<locale.h>
#include<stdio.h>

int main()
{
setlocale(LC_ALL, "Russian");

char str[800] = "# (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\n127.0.0.1 localhost";
FILE* hosts = fopen("C:\\Windows\\System32\\drivers\\e tc\\hosts", "r");

if(!hosts){
perror("Не удалось открыть файл hosts");
return 0;
}

char ch;

int n = 0;
int a=0;



while((ch = getc(hosts)) != EOF){
if(ch == str[n]){
std::cout << "Hosts infected" << std::endl;
// здесь перезаписываем файл
break;
}

n = n + 1;
}

std::cout << "Hosts not infected" << std::endl;












fclose(hosts);
system("pause");
return 0;
}


Добавлено через 14 минут
CyBOSSeR, ну что?..совсем нет что ли вариантов?
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
04.11.2009, 22:37
Молодец, ты добился своего!
Исходник (чуть поправленный твой):
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
#include <locale>
#include<stdio.h>
 
int main()
{
  setlocale(LC_ALL, "Russian");
 
  char str[] = "# (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\n127.0.0.1       localhost";
  FILE* hosts = fopen("C:\\Windows\\System32\\drivers\\etc\\hosts" , "r");
 
  if(!hosts){
    printf("Не удалось открыть файл hosts\n");
    system("pause");
    return 0;
  }
 
  int ch;
 
  int n = 0;
 
  while((ch = getc(hosts)) != EOF){
    if((char)ch != str[n]){
      printf("Hosts инфицирован\n");
      
      // здесь перезаписываем файл
 
      system("pause");
      fclose(hosts);
      return 0;
    }
 
    ++n;
  }
 
  printf("Hosts не инфицирован\n");
 
  fclose(hosts);
  
  system("pause");
  return 0;
}
Только полностью скопируй его себе
А вот содержание файла hosts
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# (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
Потести его.
1
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
04.11.2009, 22:52  [ТС]
CyBOSSeR, спасибо большое,вот ххотел чеерз весы прибавить тебе,но не получется,хочу сказать ПРИГИГАНТСКОЕ СПАСИБО
ты мне очень помог,и дал понять некоторые принципы программирования!!!спасибо,вот только это не понял

Цитата Сообщение от CyBOSSeR Посмотреть сообщение
(char)ch
?Оо что такое

Добавлено через 8 минут
ээ снова не то...написал в файл какие то цифры,что бы от чара отличлось,но говорит не инфицирован
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
04.11.2009, 23:27
Да какие проблемы! Не за что!
А насчет этого
C++
1
(char)ch
Это называется явное преобразование типа.
Дело вот в чем:
C++
1
(char)ch != str[n]
Смотри... ch у нас является переменной типа int. А str[n] имеет тип char. Это совершенно разные типы.
Если бы мы написали так:
C++
1
ch != str[n]
получилось бы что мы сравнивали char с int, т.е. помидоры с яблоками.
Нам надо привести переменную ch к типу char или str[n] к типу int, чтобы мы могли их сравнить. Для этого нам надо использовать конструкцию вида
C++
1
(type)varible
, где variable (ch) - переменная некоего типа, которую необходимо привести к другому типу, type(char) - тип к которому необходимо привести переменную variable.
Это, как раз мы и сделали: привели переменную ch типа int к типу char.
Вот такая арифметика.
На самом деле про преобразования типов (да и просто про типы), лучше почитать в литературе, потому что с этой темой связано много различных вопросов.
Явное преобразование типа, неявное преобразование типа, потеря информации при приведении - вот далеко не полный перечень вопросов, связанных с данной темой.

У меня, кстати, есть предложение развивать далее эту программу в целях обучения(поработать с Win32API функциями, сделать проверку с эталонным файлом, резервное копирование файла host, прикрутить к ней меню и т.д. и т.п.). Но в ближайшие недели две, к сожалению, у меня не будет возможности тебе в этом помочь.

Добавлено через 6 минут
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# (C) Корпорация Майкрософт (Microsoft Corp.), 1993-1999
#
# Это образец файла HOSTS, используемый Microsoft TCP/IP для Windows.
#
# Этот файл содержит сопоставления IP-адресов именам узлов.
# Каждый элемент должен располагаться в отдельной строке. IP-адрес должен
# находиться в первом столбце, за ним должно следовать соответствующее имя.
# IP-адрес и имя узла должны разделяться хотя бы одним пробелом.
#
# Кроме [B][U]3[/U][/B]того, в некоторых строках могут быть вставлены комментарии 
# (такие, как эта строка), они должны следовать за именем узла и отделяться
# от него символом '#'.
#
# Например:
#
#      102.54.94.97     rhino.acme.com          # исходный сервер
#       38.25.63.10     x.acme.com              # узел клиента x
 
127.0.0.1       localhost
Жирным и подчеркивание выделено изменение которое я сделал.
Результат работы программы:
Code
1
2
Hosts инфицирован
Для продолжения нажмите любую клавишу . . .
Проверь все тщательно.

Добавлено через 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
#include <locale>
#include <stdio.h>
 
int main()
{
  setlocale(LC_ALL, "Russian");
 
  char str[] = "# (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\n127.0.0.1       localhost";
  FILE* hosts = fopen("C:\\Windows\\System32\\drivers\\etc\\hosts" , "r");
 
  if(!hosts){
    printf("Не удалось открыть файл hosts");
    system("pause");
    return 0;
  }
 
  int ch;
  int strlenght = strlen(str);
  int n = 0;
 
  while((ch = getc(hosts)) != EOF){
    if(n >= strlenght || (char)ch != str[n] ){
      printf("Hosts инфицирован\n");
      
      // здесь перезаписываем файл
 
      system("pause");
      fclose(hosts);
      return 0;
    }
 
    ++n;
  }
 
  printf("Hosts не инфицирован\n");
 
  fclose(hosts);
  
  system("pause");
  return 0;
}
Добавлено через 7 минут
Изменения касаются ситуации, когда в файле количество символов больше, чем количество символов в нашей строке.
Предположим в файле 5 символов ("abcde"), а в строке str 3("abc").
Когда мы считаем 4-ый символ из файла ('d'), n будет равно 3, а str[n] = '\0', т.е. мы уже вышли за пределы строки str. А это уже свидетельствует о том, что файл инфицирован, т.к. в файле символов больше, чем в строке!
0
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
05.11.2009, 18:45  [ТС]
все работаетспасибо еще раз

Добавлено через 6 минут
геморпродолжается...поменял файл,гвоорит не инфицирован
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
#include <windows.h>
#include <string.h>
#include <string>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream> 
#include<locale.h>
#include<stdio.h>
 
int main()
{
  setlocale(LC_ALL, "Russian");
 
  char str[] = "# (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\n127.0.0.1       localhost";
  FILE* hosts = fopen("C:\\Windows\\System32\\drivers\\etc\\hosts" , "r");
 
  if(!hosts){
    printf("Не удалось открыть файл hosts");
    system("pause");
    return 0;
  }
 
  int ch;
  int strlenght = strlen(str);
  int n = 0;
 
  while((ch = getc(hosts)) != EOF){
    if(n >= strlenght || (char)ch != str[n] ){
      printf("Hosts инфицирован\n");
      hosts=fopen("C:\\Windows\\System32\\drivers\\etc\\hosts" , "w");
      fputs(str, hosts);
      break;
      // здесь перезаписываем файл
 
      system("pause");
      fclose(hosts);
      return 0;
    }
    else if((char)ch == str[n] ){   printf("Hosts не инфицирован\n");
    break;
    }
    ++n;
  }
 
 
 
  fclose(hosts);
  
  system("pause");
  return 0;
}
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
05.11.2009, 19:41
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//...
while((ch = getc(hosts)) != EOF){
  if(n >= strlenght || (char)ch != str[n] ){
    printf("Hosts инфицирован\n");
          hosts=fopen("C:\\Windows\\System32\\drivers\\etc\\hosts" , "w");
          fputs(str, hosts);
      break;  // <<---- 1. Этот break для чего?
 
      system("pause");
      fclose(hosts);
      return 0;
  }
  
  else if((char)ch == str[n])  // 2. Для чего эта проверка?
  {
    printf("Hosts не инфицирован\n");
    break;
  }
  
  ++n;
}
//...
Ответь на два вопроса, помеченных в исходнике.
0
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
05.11.2009, 20:26  [ТС]
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
break; // <<---- 1. Этот break для чего?
есле его не писать до выводит много раз ИНФИЦИРОВАН пока не достигнут конец файла

Цитата Сообщение от CyBOSSeR Посмотреть сообщение
else if((char)ch == str[n]) // 2. Для чего эта проверка?
потому то если будет инфицирован.то все равно выводит не инфицирован

Добавлено через 2 минуты
то есть выводит и ИНФИЦИРОВАН и НЕ ИНФИЦИРОВАН
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
05.11.2009, 20:52
Вот правильный вариант:
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
while((ch = getc(hosts)) != EOF){
  if(n >= strlenght || (char)ch != str[n] ){
    printf("Hosts инфицирован\n");
    
    fclose(hosts); // перед тем как заново открывать, нужно его закрыть
    
    hosts=fopen("C:\\Windows\\System32\\drivers\\etc\\hosts" , "w");
 
    if(!hosts){ // Обязательно нужно проверять открылся ли файл
      printf("Не удалось открыть файл для записи");
      
      system("pause");
      return;
    }
    
    fputs(str, hosts);
 
    fclose(hosts);
    system("pause");
    
    return 0;
  }
  
  ++n;
}
Добавлено через 2 минуты
Цитата Сообщение от МедведЪ Посмотреть сообщение
сле его не писать до выводит много раз ИНФИЦИРОВАН пока не достигнут конец файла
Это невозможно. Потому что:
C++
1
2
3
4
5
6
7
//...
if(n >= strlenght || (char)ch != str[n] ){
//...
system("pause");
fclose(hosts);
return 0; // Здесь программа завершится
// ...
Добавлено через 2 минуты
Далее.
C++
1
2
3
4
else if((char)ch == str[n]){
  printf("Hosts не инфицирован\n");
  break;
}
В цикле while программа будет до х..на раз выводить сообщение "Hosts не инфицирован".
0
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
05.11.2009, 20:54  [ТС]
CyBOSSeR, я же не выдумываю....говорю то что у меня....хм...давай ты весь код,весь,напиши,протестируй,а потом кинь сюдаможет у моего компилятора геморой с мозгом
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
05.11.2009, 21:02
Вот исходник весь, все работает как надо. Проверяй.
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
#include <locale>
#include <stdio.h>
 
int main()
{
  setlocale(LC_ALL, "Russian");
 
  char str[] = "# (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\n127.0.0.1       localhost";
  FILE* hosts = fopen("C:\\Windows\\System32\\drivers\\etc\\hosts" , "r");
 
  if(!hosts){
    printf("Не удалось открыть файл hosts");
    system("pause");
    return 0;
  }
 
  int ch;
  int strlenght = strlen(str);
  int n = 0;
 
  while((ch = getc(hosts)) != EOF){
    if(n >= strlenght || (char)ch != str[n] ){
      printf("Hosts инфицирован\n");
      
      fclose(hosts); // перед тем как заново открывать, нужно его закрыть
 
      hosts=fopen("C:\\Windows\\System32\\drivers\\etc\\hosts" , "w");
 
      if(!hosts){ // Обязательно нужно проверять открылся ли файл
        printf("Не удалось открыть файл для записи");
 
        system("pause");
        return 0;
      }
 
      fputs(str, hosts);
 
      system("pause");
      fclose(hosts);
      return 0;
    }
 
    ++n;
  }
 
  printf("Hosts не инфицирован\n");
 
  fclose(hosts);
  
  system("pause");
  return 0;
}
0
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
05.11.2009, 21:07  [ТС]
CyBOSSeR, джааанполучилось!!!!!!!СПАСИБО!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
05.11.2009, 21:14
Не за что! Подумай над расширением функционала программы.
0
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
05.11.2009, 21:47  [ТС]
CyBOSSeR, конечно,щас добавлю case-ы,ну меню,что потом можно?

Добавлено через 2 минуты
какие команды для проги можно написать?щас пишу команду Проверка,ну что еще раз проверила.

Добавлено через 3 минуты
и еще у меня вопрос,скажем там в файле идет перенаправка на другой сайт,то есть надо вывести на экран определенное место файла,возмоно такое?скажем там так
127,0,0,1 vkontakte-выводит у вас было заблокирован сайт vkontakte.ru
89.50.55.888 vkontakte-выводит у вас могли уксть пароль

Добавлено через 19 минут
теперь ошибки с командамихочу чтобы при выводе cmd выполнялась какая то команда
вот ошибки
Error 2 error C2450: switch expression of type 'std::string' is illegal c:\documents and settings\ag\my documents\visual studio 2008\projects\hosts reader\hosts reader\code.cpp 39 Hosts reader
Error 4 error C2015: too many characters in constant c:\documents and settings\ag\my documents\visual studio 2008\projects\hosts reader\hosts reader\code.cpp 40 Hosts reader
Error 5 error C2046: illegal case c:\documents and settings\ag\my documents\visual studio 2008\projects\hosts reader\hosts reader\code.cpp 40 Hosts reader
код

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
#include <windows.h>
#include <string.h>
#include <string>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream> 
#include<locale.h>
#include<stdio.h>
using namespace std;
 
 
int main()
{
  setlocale(LC_ALL, "Russian");
 
  char str[] = "# (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\n127.0.0.1       localhost";
  FILE* hosts = fopen("C:\\Windows\\System32\\drivers\\etc\\hosts" , "r");
 
  if(!hosts){
    printf("Не удалось открыть файл hosts");
    system("pause");
    return 0;
  }
 
  int ch;
  int strlenght = strlen(str);
  int n = 0;
  string cmd;
 cout<<"Для того что бы увидеть команды введите \"showcmd\"";
  while((ch = getc(hosts)) != EOF){
    if(n >= strlenght || (char)ch != str[n] ){
     
      
      fclose(hosts); // перед тем как заново открывать, нужно его закрыть
  printf("Hosts инфицирован!\n");
  cin>>cmd;
 
switch(cmd);
case 'clear':{  hosts=fopen("C:\\Windows\\System32\\drivers\\etc\\hosts" , "w");
      fputs(str, hosts);
     cout<<"Файл hosts был вылечен.";}
             break;
 
 
    
 
 
 
 
 
 
 
      ////////////////
      if(!hosts){ // Обязательно нужно проверять открылся ли файл
        printf("Не удалось открыть файл для записи");
 
        system("pause");
        return 0;
      }
 
 
 
      system("pause");
      fclose(hosts);
      return 0;
    }
 
    ++n;
  }
 
  printf("Hosts не инфицирован\n");
 
  fclose(hosts);
  
  system("pause");
  return 0;
}


Добавлено через 24 секунды
теперь ошибки с командамихочу чтобы при выводе cmd выполнялась какая то команда
вот ошибки
Error 2 error C2450: switch expression of type 'std::string' is illegal c:\documents and settings\ag\my documents\visual studio 2008\projects\hosts reader\hosts reader\code.cpp 39 Hosts reader
Error 4 error C2015: too many characters in constant c:\documents and settings\ag\my documents\visual studio 2008\projects\hosts reader\hosts reader\code.cpp 40 Hosts reader
Error 5 error C2046: illegal case c:\documents and settings\ag\my documents\visual studio 2008\projects\hosts reader\hosts reader\code.cpp 40 Hosts reader
код

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
#include <windows.h>
#include <string.h>
#include <string>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream> 
#include<locale.h>
#include<stdio.h>
using namespace std;
 
 
int main()
{
  setlocale(LC_ALL, "Russian");
 
  char str[] = "# (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\n127.0.0.1       localhost";
  FILE* hosts = fopen("C:\\Windows\\System32\\drivers\\etc\\hosts" , "r");
 
  if(!hosts){
    printf("Не удалось открыть файл hosts");
    system("pause");
    return 0;
  }
 
  int ch;
  int strlenght = strlen(str);
  int n = 0;
  string cmd;
 cout<<"Для того что бы увидеть команды введите \"showcmd\"";
  while((ch = getc(hosts)) != EOF){
    if(n >= strlenght || (char)ch != str[n] ){
     
      
      fclose(hosts); // перед тем как заново открывать, нужно его закрыть
  printf("Hosts инфицирован!\n");
  cin>>cmd;
 
switch(cmd);
case 'clear':{  hosts=fopen("C:\\Windows\\System32\\drivers\\etc\\hosts" , "w");
      fputs(str, hosts);
     cout<<"Файл hosts был вылечен.";}
             break;
 
 
    
 
 
 
 
 
 
 
      ////////////////
      if(!hosts){ // Обязательно нужно проверять открылся ли файл
        printf("Не удалось открыть файл для записи");
 
        system("pause");
        return 0;
      }
 
 
 
      system("pause");
      fclose(hosts);
      return 0;
    }
 
    ++n;
  }
 
  printf("Hosts не инфицирован\n");
 
  fclose(hosts);
  
  system("pause");
  return 0;
}


Добавлено через 4 минуты
исправил,вместо 'clear' написал "clear",но все же не может со стрингом ии же с чаром работать

Добавлено через 2 минуты
вместо string написал int,вроде не орет,но теперь не правильно схему написал,illtgal case где ошибка
C++
1
2
3
4
5
6
  switch(cmd);{
case"clear":{  hosts=fopen("C:\\Windows\\System32\\drivers\\etc\\hosts" , "w");
      fputs(str, hosts);
     cout<<"Файл hosts был вылечен.";
                 break;}
          }
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
06.11.2009, 02:25
МедведЪ, вижу большую кучу ошибок.
К сожалению в ближайшие недели две помогать тебе не смогу - служебно/учебные дела.
Ты пока пробуй методом проб и ошибок расширить функционал.
А потом мы с тобой вместе доработаем.
Договорились?
0
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
06.11.2009, 13:19  [ТС]
хорошо,но мог бы щас код вылоить
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.11.2009, 13:19

Перепишите, пжл, 3 программки в 3 программки в CSS
1файл &lt;html&gt; &lt;head&gt; &lt;title&gt;Laba_2&lt;/title&gt; &lt;/head&gt; &lt;body bgcolor=grey WIDTH=&quot;50%&quot; height=50%&gt; &lt;table CELLpadding=&quot;10&quot;...

C:\Windows\system32\drivers\etc\hosts нет файла Hosts
1) Была активация на пакет adobe, она слетела - пошел искать хост что б посмотреть как так он пропустил конект, а его нет ))) 2)...

Функция, которая проверяет нажата ли клавиша?
Здравствуйте всем. Функция принимающая строку в качестве аргумента. Должна проверить нажата ли клавиша, которую мы передаем в функцию в...

Напишите функцию, которая проверяет год
Напишите функцию, которая проверяет год выпуска автомобиля с значением, введенным пользователем. Если он совпадает, то вывести на экран...

Функция, которая проверяет соседние элементы
Дан массив a Функция, которая проверяет, что в каждой строке есть 2 соседних элемента, сумма которых &gt; суммы предыдущей строки


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

Или воспользуйтесь поиском по форуму:
100
Ответ Создать тему
Новые блоги и статьи
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru