Восстановление стека TCP/IP в Windows XP
Возможно, вы сталкивались с вирусами/троянами, после лечения которых перестает нормально работать сеть («компьютер не выходит в интернет»). Как человек, угробивший кучу времени на борьбу с этим замечательным явлением на нескольких компьютерах, считаю нужным записать рецепт.
Как может проявляться проблема:
Команда ipconfig выдает ошибку.
Не работает получение адреса по dhcp (команда ipconfig /renew).
«Странные знаки» вместо IP-адреса в выводе команды ping.
Касперский при запуске выдает ошибки типа «Сбой при запуске монитора HTTP-трафика».
ActiveSync при запуске выдает ошибку типа «TCP/IP network transport is not installed».
В диспетчере устройств при включенном «Показать скрытые устройства» в разделе «Драйверы устройств не Plug and Play» драйвер протокола TCP/IP не виден или показан как отключенный и отображается сообщение об ошибке.
Могут, естественно, быть и другие симптомы.
-
Как можно бороться:
Начинаю я со сканирования всех жестких дисков с аварийного диска Касперского со свежими базами. Править недолеченную винду — удовольствия мало, да и смысла может не быть. - Если у каких-то сетевых соединений IP-адреса назначены вручную, выписываем их или делаем скриншоты. На следующем шаге эти настройки скорее всего слетят.
- Даем команду netsh int ip reset, перезагружаемся. Помогло? Замечательно. Нет? Едем дальше.
- Даем команду netsh winsock reset, перезагружаемся. Это может не работать на Windows до SP2. После этого действия может слететь интеграция в стек TCP/IP антивирусов, фаерволлов, клиентов для проксей. Правится или повторной установкой нужных галок в настройках этих программ, или их переустановкой.
- Простые методы закончились 🙂 Возможно, поврежден или остутствует файл tcpip.sys. Восстановить его можно командой expand X:\i386\tcpip.sy_ c:\windows\system32\tcpip.sys, где X: — буква диска с дистрибутивом. После восстановления перезагружаемся.
- Возможно, дело в каких-то еще системных файлах, потертых или измененных. Запустить проверку с восстановлением из дистрибутива по необходимости можно командой sfc /scannow. Мне не помогло, работало долго, но ошибок никаких не нашло.
- Видел рекомендацию воспользоваться софтинкой http://www.snapfiles.com/get/winsockxpfix.html — мне не помогло, но «десять баксов-то не лишние» — вдруг кому поможет. Софтинка небольшая, около мегабайта весит.
- Можно попробовать заново установить протокол TCP/IP. В свойствах подключения к локальной сети на вкладке Общие щелкаем Установить -> Протокол -> Добавить. В окне Выбор сетевых протоколов щелкаем Установить с диска, вводим путь C:\windows\inf, нажимаем ОК. Выделяем Протокол Интернета (TCP/IP), нажимаем ОК. Проверяем настройки IP, перезагружаемся.
- Можно попробовать в диспетчере устройств удалить и установить заново сетевую карту. Я не пробовал.
Полная переустановка TCP/IP aka закат солнца вручную:
Если ничего из вышеперечисленного не восстановило работоспособность, осталась еще одна процедура, помогающая избежать переустановки Windows. Кстати, переустановка «поверх», с сохранением настроек, программ и документов, может не устранить проблему. Пробовал, сталкивался.
Итак, отращиваем бороду, покупаем бубен, надеваем толстые очки и засучиваем рукава.
Открываем в блокноте файл c:\windows\inf\nettcpip.inf.
Находим секцию [MS_TCPIP.PrimaryInstall]..
В записи Characteristics = 0xA0 замеяем 0xA0 на 0x80.
Сохраняем, закрываем.
Открываем Сетевые подключения, там открываем свойства Подключения к локальной сети.
На вкладке Общие щелкаем Установить -> Протокол -> Добавить.
В окне Выбор сетевых протоколов щелкаем Установить с диска.
Вводим путь C:\windows\inf, нажимаем ОК.
Выделяем Протокол Интернета (TCP/IP), нажимаем ОК. Теперь в свойстве подключения стало возможно снести TCP/IP.
Выделяем Протокол Интернета (TCP/IP), нажимаем кнопку Удалить, затем ОК.
Запускаем regedit, удаляем ветки реестра HKLM\System\CurrentControlSet\Services\Winsock и HKLM\System\CurrentControlSet\Services\Winsock2.
Перезагружаемся.
В файле c:\windows\inf\nettcpip.inf меняем обратно 0x80 на 0xA0, сохраняем, закрываем.
Открываем Сетевые подключения, там открываем свойства Подключения к локальной сети.
На вкладке Общие щелкаем Установить -> Протокол -> Добавить.
Выделяем Протокол Интернета (TCP/IP), нажимаем ОК.
При необходимости восстанавливаем настройки адресов IP, перезагружаемся. TCP/IP работает.
Предпоследний пункт может не сработать, выдав «расширенную ошибку». Возможно, если не менять обратно файл nettcpip.inf, этой ошибки не возникнет. Дело в том, что системная база безопасности почему-то оказывается в неправильном состоянии. Как быть в этом случае? Для проверки сначала запускаем команду:
esentutl /g c:\windows\security\Database\secedit.sdb
Если в выводе между строчками Checking database integrity и Integrity check successful нет никаких сообщений, что что-то не так, значит с базой все в порядке. У меня было сообщение типа This operation may find that this database is corrupt.
Пробуем восстановление базы (у меня не сработало):
esentutl /r c:\windows\security\Database\secedit.sdb
Делаем ремонт базы:
esentutl /p c:\windows\security\Database\secedit.sdb
После этого запуск с ключом /g должен показать, что база в порядке, и TCP/IP установится. Эти манипуляции с базой безопасности могут что-то такое сделать с групповыми политиками, так что если вы ими пользуетесь, проверьте, все ли там в порядке.
Надеюсь, все написанное здесь вам не пригодится, а если все-таки пригодится, то сэкономит немало времени и нервов.
Источник: milleniumbug