User Account

Модератор: Злобный

Ответить
Аватара пользователя
Atyla
Отец
Сообщения: 4194
Зарегистрирован: Вс сен 01, 2002 18:35
Откуда: С вытрезвителя.
Контактная информация:

User Account

Сообщение Atyla »

Как можно узнать средствами JScript, PHP, ASP, ASPX и тому подобными языками, имя под которым пользователь логинулся в Винду (2000, XP) и возможно ли это?
кондратий
Юзер
Сообщения: 92
Зарегистрирован: Вт авг 20, 2002 17:12
Откуда: кишинёв
Контактная информация:

Сообщение кондратий »

function GetCurrentUserName: string;
var
Len: Cardinal;
begin
Len := 255;
SetLength(Result, Len - 1);
if GetUserName(PChar(Result), Len)
then SetLength(Result, Len - 1)
else RaiseLastWin32Error
end;

так что и из асп можно...
Аватара пользователя
Белый С.
Завсегдатай
Сообщения: 2526
Зарегистрирован: Пн дек 22, 2003 22:43
Откуда: Выведен из аксиом
Контактная информация:

Сообщение Белый С. »

кондратий, непонятно где ты обьявил Result, а в принципе API многое умеют :)
Аватара пользователя
Atyla
Отец
Сообщения: 4194
Зарегистрирован: Вс сен 01, 2002 18:35
Откуда: С вытрезвителя.
Контактная информация:

Сообщение Atyla »

кондратий,
Всё, что ты привёл применимо только для Win32 приложений...
Я имею в виду когда клиент через експлорер, запускает предположим мою страничку на aspx, можно ли получить имя пользователя залогиненного в винде...

ЗЫ: Посмотрел бы, чтобы было бы с бедным юзверем если бы мне стали доступны API'шные функции на его компе... :gg:
Аватара пользователя
Белый С.
Завсегдатай
Сообщения: 2526
Зарегистрирован: Пн дек 22, 2003 22:43
Откуда: Выведен из аксиом
Контактная информация:

Сообщение Белый С. »

Atyla, во-первых, уверен ли ты что это возможно? РеЗЫ: верю :)
Пройдись ещё по стандартным обьектам JavaScript (document, window и подобным), вдруг есть.

[off]добавлено спустя 48 минут:[/off]

Что-то мало накопал :(
Navigator.
appCodeName
appName
appVersion
mimeTypes
plugins
userAgent
javaEnabled
Видимо здесь нету :kettle:

Или вот ещё ( :gg: )

Код: Выделить всё

public class Greeting{
 public static void main(String[] args){
  String usersName;
  String upperCaseName;
  TextIO.put("Please enter your name: ");
  usersName = TextIO.getln();
  upperCaseName = usersName.toUpperCase();
  TextIO.putln("Hello, " + upperCaseName + ", nice to meet you!");
 }
}


[off]добавлено спустя 4 минуты:[/off]

http://www.rgagnon.com/javadetails/java-0048.html
Аватара пользователя
Iulik D
Старожил
Сообщения: 1282
Зарегистрирован: Пн май 12, 2003 00:03
Откуда: Молдова

Сообщение Iulik D »

Белый С.,
:laugh: :laugh: :laugh: :laugh: :laugh: :laugh: :laugh: :laugh: :laugh:

[off]добавлено спустя 5 минут:[/off]

ты вводиш что-то

Код: Выделить всё

TextIO.put("Please enter your name: "); 
  usersName = TextIO.getln(); 
а тебе пишет:

Код: Выделить всё

upperCaseName = usersName.toUpperCase(); 
TextIO.putln("Hello, " + upperCaseName + ", nice to meet you!"); 


[off]добавлено спустя 1 минуту:[/off]

Atyla,
А ты в .NET FrameWork 1.1 поищи.
Аватара пользователя
Atyla
Отец
Сообщения: 4194
Зарегистрирован: Вс сен 01, 2002 18:35
Откуда: С вытрезвителя.
Контактная информация:

Сообщение Atyla »

Белый С.,
М-да, ценное мнение...

Iulik D,
ТИпа копался в MSDN пока безрезультатно...
Аватара пользователя
x
Продвинутый
Сообщения: 957
Зарегистрирован: Вт янв 07, 2003 10:15

Сообщение x »

Атилыч, в некотрых случаях можно через ActiveX.

Прочитай про ("WScript.Shell") и про ("WScript.Network") , то что тебя интересует можно взять из ("WScript.Shell").Environment (вычислить из HOMEPATH) или напрямую из ("WScript.Network").Username .
Вот например теоретически, это могло выглядеть бы так:
<script language="javascript">
var user = new ActiveXObject("WScript.Network").Username;
location.replace('moj_script.php?user='+user);
</script>
Естессно вместо жс можно юзать вбс, чтоб с активхом работать, и ессно для принимающей проги можно юзать любой серверный язык, не только пшп, достаточно взять параметр user (в пшп либо через $_SERVER['QUERY_STRING'], либо через $_GET['user']), ну и потом сделать что угодно с ним, сунуть в базу, послать мылом, итд.

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

Другой способ - через NTLM - но я почти ничего про этот протокол не знаю, но думаю что он дает возможность узнать юзернейм. ( есть модуль НТЛМ и для апача, еще стоит юзать томкат, jsp классно с ним(нтлмом) умеет работать)

Потом флеш вроде тоже в браузере выполняется, но про него я еще меньше знаю , может ли он сделать что-нить подобное.

Остается еще Ява. Теоретически можно сделать апплет, в нем впихнуть com.sun.security.auth.module.NTSystem и взять имя через getName() (можно и домен, с getDomain()). Ну и потом то же самое как с жс, выбросить юзера на страницу (с showDocument()) где в качве ГЕТ параметра будет этот юзернейм. Но щас нету времени апплеты писать чтоб проверить, сори )) может через 2-3 дня )

[off]добавлено спустя 11 часов 9 минут:[/off]

[off]Автоперевод с транслита:[/off]
кстати, вот вспомнил, можно еще и любым серверным языком который поддерживает работу с сокетами послать нетбиос запрос на ип юзера, но тут зависит от многого, открыт ли у него нужный порт, не отрубил ли его пров этот тип траффика, не входит ли он из-за прокси, файервола, гейтвея с маскарадингом, итд
Аватара пользователя
Iulik D
Старожил
Сообщения: 1282
Зарегистрирован: Пн май 12, 2003 00:03
Откуда: Молдова

Сообщение Iulik D »

Код: Выделить всё

import com.sun.security.auth.module.NTSystem; 

public class Test{
    public static void main(String []args){
        NTSystem nt = new NTSystem();
        System.out.println("Username: "+nt.getName() +"\nDomain:"+nt.getDomain()); 
    }
}


[off]добавлено спустя 57 секунд:[/off]

Это пашет
А вот:

[off]добавлено спустя 57 секунд:[/off]

Код: Выделить всё

import java.applet.Applet;
import java.awt.*;

import com.sun.security.auth.module.NTSystem; 
	public class Applett extends Applet {
		NTSystem nt = new NTSystem();
		public void paint(Graphics g) {
			g.setFont(new Font("Arial", Font.BOLD, 16));
			g.drawString(nt.getName(), 0, 30);
		}
	}


[off]добавлено спустя 43 секунды:[/off]

не хочет :( потому что:

[off]добавлено спустя 1 минуту:[/off]

java.security.AccessControlException: access denied (java.lang.RuntimePermission loadLibrary.jaas_nt)

at java.security.AccessControlContext.checkPermission(AccessControlContext.java:270)

at java.security.AccessController.checkPermission(AccessController.java:401)

at java.lang.SecurityManager.checkPermission(SecurityManager.java:542)

at java.lang.SecurityManager.checkLink(SecurityManager.java:834)

at java.lang.Runtime.loadLibrary0(Runtime.java:782)

at java.lang.System.loadLibrary(System.java:832)

at com.sun.security.auth.module.NTSystem.loadNative(NTSystem.java:171)

at com.sun.security.auth.module.NTSystem.<init>(NTSystem.java:40)

at Applett.<init>(Applett.java:5)

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)

at java.lang.reflect.Constructor.newInstance(Constructor.java:274)

at java.lang.Class.newInstance0(Class.java:306)

at java.lang.Class.newInstance(Class.java:259)

at sun.applet.AppletPanel.createApplet(AppletPanel.java:566)

at sun.plugin.AppletViewer.createApplet(AppletViewer.java:1775)

at sun.applet.AppletPanel.runLoader(AppletPanel.java:495)

at sun.applet.AppletPanel.run(AppletPanel.java:292)

at java.lang.Thread.run(Thread.java:536)
Аватара пользователя
Atyla
Отец
Сообщения: 4194
Зарегистрирован: Вс сен 01, 2002 18:35
Откуда: С вытрезвителя.
Контактная информация:

Сообщение Atyla »

Спасибо всем за помощь, в особенности x и Iulik D...
Но я пресанул начальницу, что получить имя аккаунта невозможно... ;-)
Аватара пользователя
Iulik D
Старожил
Сообщения: 1282
Зарегистрирован: Пн май 12, 2003 00:03
Откуда: Молдова

Сообщение Iulik D »

Atyla,
Ну если можно начальниц, то всё ок :)
CHILLI
Юзер
Сообщения: 191
Зарегистрирован: Чт авг 15, 2002 12:56
Откуда: Кишинев
Контактная информация:

Сообщение CHILLI »

Atyla,
то, что ты пресанул начальницу похвально, где-то я тебе даже завидую...

суть заключается в том, что логин юзверя можно узнать из http заголовка, вот его содержание:
HTTP/1.1|host:
HTTP/1.1|user-agent:
HTTP/1.1|accept:
HTTP/1.1|connection:
HTTP/1.1|accept-language:
HTTP/1.1|accept-encoding:
HTTP/1.1|referer:
HTTP/1.1|cookie:
HTTP/1.1|if-modified-since:
HTTP/1.1|extension:
HTTP/1.1|if-none-match:
HTTP/1.1|authorization:
HTTP/1.1|content-type:
HTTP/1.1|content-length:
HTTP/1.1|range:
HTTP/1.1|unless-modified-since:
HTTP/1.1|if-range:
HTTP/1.1|ua-os:
HTTP/1.1|ua-cpu:
HTTP/1.1|gizmo:
HTTP/1.1|from:
HTTP/1.1|persist:
HTTP/1.1|keep-alive:
HTTP/1.1|pragma:

HTTP/1.1|logon-user: <--- как ты понимаешь, здесь и будет логин юзверя

HTTP/1.1|cache-control:
HTTP/1.1|range-if:
HTTP/1.1|x-jcroomlist:
HTTP/1.1|sig:
HTTP/1.1|x-druserid:
всего-то надо разобрать заголовок запроса, пришедшего от юзверя... :shy:
Аватара пользователя
Atyla
Отец
Сообщения: 4194
Зарегистрирован: Вс сен 01, 2002 18:35
Откуда: С вытрезвителя.
Контактная информация:

Сообщение Atyla »

CHILLI,
Опа, щас потестю... 8-)
Фэнкс... 8-)
Наоборот если у меня заработает, я подскочу к начальнице и скажу, какой я чёткий пассан, нашёл ребят оказавших мне хелп... %)
CHILLI
Юзер
Сообщения: 191
Зарегистрирован: Чт авг 15, 2002 12:56
Откуда: Кишинев
Контактная информация:

Сообщение CHILLI »

я когда первый раз запустил в РНР функцию phpinfo(), обомлел, как много можно узнать такой стандартной функцией из http-заголовков... отложилось в памяти, а еще в банке уже на ASP разбирал заголовки, для статистики.... :)
Аватара пользователя
x
Продвинутый
Сообщения: 957
Зарегистрирован: Вт янв 07, 2003 10:15

Сообщение x »

[off]Автоперевод с транслита:[/off]
браузер не будет слать этот хидер, если сервер не на той же тачке или в интранете с юзером (и то зависит от уровня секьюрити в браузере) : )
Аватара пользователя
Atyla
Отец
Сообщения: 4194
Зарегистрирован: Вс сен 01, 2002 18:35
Откуда: С вытрезвителя.
Контактная информация:

Сообщение Atyla »

x,
Вся фишка в том, что пишу-то я для интранета... ;-)

CHILLI,
Фенкс большой... ;-)

[off]добавлено спустя 58 минут:[/off]

Вот шо я получаю... %(
Как видно инфу о User Account, я не получаю... %(

Код: Выделить всё

0 - ALL_HTTP: HTTP_CONNECTION:Keep-Alive
HTTP_ACCEPT:image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*
HTTP_ACCEPT_ENCODING:gzip, deflate
HTTP_ACCEPT_LANGUAGE:en-gb
HTTP_HOST:it10
HTTP_USER_AGENT:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)

1 - ALL_RAW: Connection: Keep-Alive
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*
Accept-Encoding: gzip, deflate
Accept-Language: en-gb
Host: it10
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)

2 - APPL_MD_PATH: /LM/w3svc/1/root/******sk
3 - APPL_PHYSICAL_PATH: ********************\IT*****esk\
4 - AUTH_TYPE: 
5 - AUTH_USER: 
6 - AUTH_PASSWORD: 
7 - LOGON_USER: 
8 - REMOTE_USER: 
9 - CERT_COOKIE: 
10 - CERT_FLAGS: 
11 - CERT_ISSUER: 
12 - CERT_KEYSIZE: 
13 - CERT_SECRETKEYSIZE: 
14 - CERT_SERIALNUMBER: 
15 - CERT_SERVER_ISSUER: 
16 - CERT_SERVER_SUBJECT: 
17 - CERT_SUBJECT: 
18 - CONTENT_LENGTH: 0
19 - CONTENT_TYPE: 
20 - GATEWAY_INTERFACE: CGI/1.1
21 - HTTPS: off
22 - HTTPS_KEYSIZE: 
23 - HTTPS_SECRETKEYSIZE: 
24 - HTTPS_SERVER_ISSUER: 
25 - HTTPS_SERVER_SUBJECT: 
26 - INSTANCE_ID: 1
27 - INSTANCE_META_PATH: /LM/W3SVC/1
28 - LOCAL_ADDR: 192.168.101.148
29 - PATH_INFO: /IT******sk/ITHDMain.aspx
30 - PATH_TRANSLATED: ***************************sk\ITHDMain.aspx
31 - QUERY_STRING: 
32 - REMOTE_ADDR: **2.1**.1*1.1**
33 - REMOTE_HOST: **2.1**.1*1.1**
34 - REMOTE_PORT: 2**7
35 - REQUEST_METHOD: GET
36 - SCRIPT_NAME: /I*******sk/ITHDMain.aspx
37 - SERVER_NAME: it10
38 - SERVER_PORT: 80
39 - SERVER_PORT_SECURE: 0
40 - SERVER_PROTOCOL: HTTP/1.1
41 - SERVER_SOFTWARE: Microsoft-IIS/5.0
42 - URL: /********sk/ITHDMain.aspx
43 - HTTP_CONNECTION: Keep-Alive
44 - HTTP_ACCEPT: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*
45 - HTTP_ACCEPT_ENCODING: gzip, deflate
46 - HTTP_ACCEPT_LANGUAGE: en-gb
47 - HTTP_HOST: ***0
48 - HTTP_USER_AGENT: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)


[off]добавлено спустя 2 минуты:[/off]

CHILLI,
Насчёт HTTPRequest
Remarks
The methods and properties of the HttpRequest class are exposed through the Request property of the HttpApplication, HttpContext, Page, and UserControl classes.
Аватара пользователя
x
Продвинутый
Сообщения: 957
Зарегистрирован: Вт янв 07, 2003 10:15

Сообщение x »

то что ты искал, находится в request.servervariables("logon_user") , (или в пшп $_SERVER['remote_user'] но это не совсем НТ юзернейм )) . Если послать юзеру хидер 401(autorization required), и заставить его логинуться, то этот самый логон-юзер и будет то что он там введет. Вот например http://www.chat.md/forum/admin/ - то что вводят в поле логин - есть этот LOGON_USER, но это никак не НТ-юзер )
Аватара пользователя
Atyla
Отец
Сообщения: 4194
Зарегистрирован: Вс сен 01, 2002 18:35
Откуда: С вытрезвителя.
Контактная информация:

Сообщение Atyla »

x,
Не-а CHILLI обкатывал енту фишку с получением User Account'a юзверя и по его заверениям получалось.

Вот кусок C# кода, где я вытаскиваю весь http-header. User Account'ом там и не пахнет... %(

Код: Выделить всё

	// Load NameValueCollection object.
			int c=Page.Request.ServerVariables.Count;
				//Request.ServerVariables.Count;
			StreamWriter fStream=File.CreateText(@"c:\1.txt");
    		for (int i=0; i<c; i++)
			{
			 fStream.WriteLine(i+" - "+Page.Request.ServerVariables.GetKey(i)+": "+Page.Request.ServerVariables.Get(i));	
			}
			fStream.Flush();
			fStream.Close();
//Здесь просто тупо пишу Хидэр в файл.

ix@ni@
Новичок
Сообщения: 12
Зарегистрирован: Пт ноя 12, 2004 19:00

Сообщение ix@ni@ »

In PHP

bool w32api_register_function ( string library, string function_name, string return_type )

For example, the following snippet will display a standard messagebox:

w32api_register_function("User32.dll",
"MessageBoxA",
"long");
MessageBoxA(NULL,
"Hello World!",
"PHP MessageBox",
0);

This way U cand use any of system API functions ;)
Ответить

Вернуться в «Программирование»