Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

.NET, Сырые сокеты (raw sockets) и Windows 2008

5
24 апреля 2009 года
hardcase
4.5K / / 09.08.2005
В Windows Server 2008 под учетной записью, входящей в группу Administrators возникает проблема при создании сырого сокета (самопальный ping пишу):
 
Код:
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp);
Система кричит:
[quote=System]
System.Net.Sockets.SocketException was unhandled by user code
Message="An attempt was made to access a socket in a way forbidden by its access permissions"
Source="System"
ErrorCode=10013
NativeErrorCode=10013
StackTrace:
// пропущен
InnerException:

[/quote]


На ручное требование всех доступов к сокетам:
 
Код:
new SocketPermission(PermissionState.Unrestricted).Demand();
Реакции никакой.


UAC включен - понятно что дело в нем, так как "запуск от администратора" магическим образом избавляет от проблемы.

У кого-нить есть идеи, чего сделать с софтиной, чтобы UAC показывал окошко запроса разрешения у пользователя на повышение полномочий?
5
25 апреля 2009 года
hardcase
4.5K / / 09.08.2005
В общем не сильно заморачиваясь добавил манифест:
Код:
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app" />
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
      <applicationRequestMinimum>
        <defaultAssemblyRequest permissionSetReference="Custom" />
        <PermissionSet class="System.Security.PermissionSet" version="1" Unrestricted="true" ID="Custom" SameSite="site" />
      </applicationRequestMinimum>
    </security>
  </trustInfo>
</asmv1:assembly>
14
27 апреля 2009 года
Phodopus
3.3K / / 19.06.2008
А вот меня до сих пор интересует, возможно ли в определенный момент выполнения программы вызвать сие окно?
5
03 мая 2009 года
hardcase
4.5K / / 09.08.2005
Изучение MSDN показало, что создание (открытие) сырых сокетов возможно только с правами администратора. Таким образом, секурити дотнета никоим образом тут не участвует - нужно сразу запускать программу от администратора.
Не слишком фанатичный поиск в интернетах также не выявил способов показать диалог UAC в определенный момент - только навесить на кнопку щит и ждать пока юзер на него нажмет, но у меня сэмпл не работал (щит появлялся, но нажатие на кнопку ни к чему не приводило).
Так что решение посредством манифеста мне видится наиболее корректным. Более того на основе изученной информации, полагаю, что повышение полномочий процесса (без потенциальных проблем) технически невозможно без его перезапуска - UAC умеет виртуализировать реестр к примеру ну и еще из-за пачки подобных тонкостей.

З.Ы. Оставляю возможность хака. ;)
14
04 мая 2009 года
Phodopus
3.3K / / 19.06.2008
Короче говоря, походу все диалоги системы с такими "щитовыми" кнопочками суть запускатели для программ имеющих манифесты повышенных привелегий...
5
18 мая 2009 года
hardcase
4.5K / / 09.08.2005
Информация к размышлению:
Цитата:

По умолчанию сырые сокеты доступны только из-под учетной записи администратора, что не есть гуд, однако любые ограничения можно обойти и чтобы сырые сокеты заработали и на пользовательском уровне, достаточно открыть следующую ветвь системного реестра: HKLM\System\CurrentControlSet\Services\Afd\Parameters, найти там параметр DisableRawSecurity типа DWORD (если такого параметра нет - создать его), присвоить ему значение "1", после чего перезагрузиться и все! С этой минуты сырые сокеты доступны всем!

Надобудет проверить на всевозможных ОС.

241
18 мая 2009 года
Sanila_san
1.6K / / 07.06.2005
На ХР/2003 не сталкивался с такой фичей.
14
19 мая 2009 года
Phodopus
3.3K / / 19.06.2008
Хм..
http://support.microsoft.com/kb/195445
Пишут что
Цитата:

In Windows 2000, there is no way to disable this security check. Access to Raw Sockets is granted on a per-transport basis. For the address family AF_INET, only administrators have the access necessary to create Raw Sockets.


хотя как-то туманно..

Вот глянь чего кстати нашлося

5
19 мая 2009 года
hardcase
4.5K / / 09.08.2005
На моей Windows Server 2003 R2 SP2 (x86) доступ к сырым сокетам для пользователей, не обладающих правами администратора, сработал при установки следующих DWORD-значиений в реестре в 1:
Цитата:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Afd\Parameters\DisableRawSecurity

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters\AllowUserRawAccess

После установки требуется перезагрузка (по-новой инициализируются драйвера afd.sys и tcpip.sys).

5
19 мая 2009 года
hardcase
4.5K / / 09.08.2005
На тестовой Windows XP SP3 (x86) также сработало.

Phodopus, спасибо за ссылки, но нашел все это уже сам. :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог