Судя по всему суть в непонимании сути доступа к ресурсам в одноранговой сети. В зависимости от настроек безопасности пользователь может отождествляться либо как гость, либо как пользователь учетки, под которой он произвел авторизацию. Если все пользователи авторизуются под твоей учеткой, то имя этого пользователя и будет возвращаться. По идее для каждого пользователя на твоем компьютере должна заводиться отдельная учетная запись, тогда пользователей будет гораздо легче идентифицировать.Don Leno писал(а):Хорошо. Пусть они и подключаются под моей учеткой. Суть узнать кто подключился, а не как!
Don Leno писал(а):NetFileEnum Video Demonstration.avi
Я так и не смог загрузить видео.
Don Leno писал(а):...предлагаю не пытаться получить имя пользователя, а например IP компа подключенного к тебе в данный момент.
...
2.Как то узнать какие IP подключены к тебе сейчас
Don Leno писал(а):Мне тем более самому интересна эта тема.
Я знаю, как получить и IP и имена подключенных к Серверу клиентов - это не есть проблема. Я могу узнать какие расшаренные папки они у меня открывают - это, как вы убедились, тоже решаемая задача. Проблема в том, чтобы каким-то образом, связать первое со вторым...
TimeIP=413441 ' Это так в качестве примера!
TimeShare=413500
Time=Abs(TimeIP-TimeShare)
получить возможность связать кто и что открывает БЕЗ создания многочисленных списков учетных записей???
давай так, если ты считаешь себя умным человеком,
ты больше здесь не пишешь,
если нет то на усмотрение модератора.
Don Leno писал(а):А нельзя их связывать по времени? К примеру во сколько открылась папка и во сколько подключился IP?
Don Leno писал(а):Браузер у меня Chrome последней версии не знаю почему не открывается. Да ладно бывает)))
Don Leno писал(а):Но все таки попробуй по времени отлавливать.
...
Я сам напишу код, а ты уж проверишь его.
Don Leno писал(а):Мне тем более самому интересна эта тема.Vova_2581 писал(а):Нас миллионы!
On Error Resume Next
Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20
arrComputers = Array(".")
For Each strComputer In arrComputers
WScript.Echo
WScript.Echo "=========================================="
WScript.Echo "Computer: " & strComputer
WScript.Echo "=========================================="
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_ConnectionShare", "WQL", _
wbemFlagReturnImmediately + wbemFlagForwardOnly)
For Each objItem In colItems
WScript.Echo "Antecedent: " & objItem.Antecedent
WScript.Echo "Dependent: " & objItem.Dependent
WScript.Echo
Next
Next
Antecedent: \\PC\root\cimv2:Win32_Share.Name="C"
Dependent: \\PC\root\cimv2:Win32_ServerConnection.ComputerName="192.168.0.15",ShareName="C",UserName="Администратор"
NashRus писал(а):давай так, если ты считаешь себя умным человеком,
ты больше здесь не пишешь,
если нет то на усмотрение модератора.
Don Leno писал(а):Не все решается через апи)))
Don Leno писал(а):Кстати вопрос: а нельзя ли с WMI в VB написать подобный код, чтобы не запускать внешний скрипт?
Don Leno писал(а):ALX_2002 Большая вам благодарность!
Я проверил на виртуальной машине WinXP. Зашел на нее и скрипт на XP отработал замечательно!
Не все решается через апи))) Кстати вопрос: а нельзя ли с WMI в VB написать подобный код, чтобы не запускать внешний скрипт?
Run-time error '-2147217405 (80041003)'
Automation error
Dim oSWbemLocator As New WbemScripting.SWbemLocator
Dim oSWbemServices As WbemScripting.SWbemServices
Dim oSWbemObjectSet As WbemScripting.SWbemObjectSet
Dim oSWbemObject As WbemScripting.SWbemObject
Dim oSWbemObjectEx As WbemScripting.SWbemObjectEx
Private Sub Main()
Set oSWbemServices = oSWbemLocator.ConnectServer(".", "root\cimv2")
Set oSWbemObjectSet = oSWbemServices.ExecQuery("SELECT * FROM Win32_ConnectionShare", "WQL")
For Each oSWbemObject In oSWbemObjectSet
Set oSWbemObjectEx = oSWbemServices.Get(oSWbemObject.Dependent)
With oSWbemObjectEx
Debug.Print "ShareName:" & String(2, vbTab) & .ShareName
Debug.Print "ComputerName:" & vbTab & .ComputerName
Debug.Print "UserName:" & String(2, vbTab) & .UserName
End With
Next
End Sub
Don Leno писал(а):Насчет прав админа вы правы. Не подскажите насчет манифестов как их делать, я в них Zero.
Vova_2581 писал(а):Есть еще маленький вопросик: скажите, пожалуйста, как Вы докопались до функций подкласса Dependent??? Я имею ввиду
Dependent.ShareName
...ComputerName
...UserName
и т.д. Где Вы взяли развернутую информацию о самом Dependent???
У меня есть программка WMICodeCreator – она ничего подобного не показывает. Может, есть еще какие???
\\HOST_NAME\root\CIMV2:Win32_ConnectionShare.Antecedent="\\\\HOST_NAME\\root\\cimv2:Win32_Share.Name=\"SHARE_NAME\"", Dependent="\\\\HOST_NAME\\root\\cimv2:Win32_ServerConnection.ComputerName=\"REMOTE_HOST_IP\", ShareName=\"SHARE_NAME\",UserName=\"USER_NAME\""
Vova_2581 писал(а):P.S.
А насчет UAC и прочие Админ аккаунты, то у меня все работает под Админ правами и с этим проблем нет. Проверял и на 7-ке, мой код ниже... работает без проблем. Да и если возникнет такая необходимость запустить эту прогу с максимальными правами, то ведь можно просто воспользоваться внутренней командой runas – Вы ее, кстати, используете в своем .vbs-коде. Так вот у нее есть параметр /savecred – можно один раз ввести пароль и дальше программа уже будет запускаться под правами Админа автоматически. Когда-то давно баловался такой фигней, то все работало прекрасно.
ALX_2002 писал(а):А у Вас UAC на каком уровне стоит ? По умолчанию или ползунок сдвинут в самый низ ?
ALX_2002 писал(а):P.S Если запускать wbemtest (равно как и другие утилиты для работы с пространством WMI - Win32_ConnectionShare) на ОС с UAC по умолчанию, то их так же потребуется запускать с правами администратора, иначе получим ошибку. Либо надо менять подключение к WMI с локального на удалённое с указанием логина и пароля.
Vova_2581 писал(а):Да он, кажется, вообще выключен. Как систему поставил, так про UAC он даже не пикал. Там в дистрибутиве уже все до меня отключили, по всей видимости.
Vova_2581 писал(а):Но я в основном сейчас пока на XP...
ALX_2002 писал(а):Это Вы имеете ввиду SWbemLocator ? Знаем такой... баловались...
Dim oSWbemLocator As New WbemScripting.SWbemLocator
Private Sub Main()
Dim oSWbemServices As WbemScripting.SWbemServices
Dim oSWbemObjectSet As WbemScripting.SWbemObjectSet
Dim oSWbemObject As WbemScripting.SWbemObject
Dim oSWbemObjectEx As WbemScripting.SWbemObjectEx
Set oSWbemServices = oSWbemLocator.ConnectServer(".", "root\cimv2")
Set oSWbemObjectSet = oSWbemServices.ExecQuery("SELECT * FROM Win32_ConnectionShare")
For Each oSWbemObject In oSWbemObjectSet
Set oSWbemObjectEx = oSWbemServices.Get(oSWbemObject.Dependent)
With oSWbemObjectEx
Debug.Print "ShareName:" & String(2, vbTab) & .ShareName
Debug.Print "IP:" & String(4, vbTab) & .ComputerName
On Error GoTo SkipError:
Debug.Print "ComputerName:" & vbTab & GetHostName(.ComputerName)
SkipError:
Debug.Print "UserName:" & String(2, vbTab) & .UserName & vbCrLf
End With
Next
End Sub
Function GetHostName(ByVal ComputerName As String) As String
Dim oSWbemServices As WbemScripting.SWbemServices
Dim oSWbemObject As WbemScripting.SWbemObject
Set oSWbemServices = oSWbemLocator.ConnectServer(ComputerName, "root\cimv2")
For Each oSWbemObject In oSWbemServices.ExecQuery("SELECT * FROM Win32_ComputerSystem")
GetHostName = oSWbemObject.Name
Next
End Function
ALX_2002 писал(а):А наскальные рисунки в пещере долотом делаете или по старинке острым камнем ? Может пора уже на Win 10 переползти ? 21-ый век на дворе. )
ALX_2002 писал(а):Кстати запрос для получения имени компа тоже можно перевести на обращение к wmi. Взгляните на функциюGetHostName в коде ниже:
Сейчас этот форум просматривают: Google-бот и гости: 25