[Java] Windows gebruiker uitlezen via netwerk

Pagina: 1
Acties:

  • Black Hawk
  • Registratie: Oktober 2003
  • Laatst online: 06-02 12:18
Hallo allemaal,

Ik zit met het volgende: ik wil met een java prog een gebruikersnaam uitlezen van een computer op het netwerk.

De situatie:
Ben momenteel een internet-logging programma aan het maken die in een netwerk al het internet-verkeer moet gaan loggen. De machines zijn win98SE / winXP(home&profs).

Ik heb:
Een DNS server in java in elkaar geflanst. Daarnaast logt deze ook de computernaam en het ipadress van de 'vrager' + de tijd van het DNS verzoek. Deze werkt al naar behoren en is in bedrijf.

Ik wil:
De gebruikersnaam toevoegen in de log (dus van degene die op die (REMOTE !!) machine is ingelogd.

Via [rml][ JAVA] Windows gebruiker uitlezen[/rml] kwam ik te weten hoe ik de gebruiker in windows uit kan lezen, nl:
Java:
1
2
3
4
5
6
7
class JUserLabel extends JLabel
{
      JUserLabel()
      {
          super((String)System.getProperty("user.name"));
      }
}

maar dit werkt alleen op de lokale machine, en dus niet in het netwerk.

Ik zou graag zoiets willen als:
Java:
1
String userName = RemotePC(192.168.0.56).getCurentUser().toString();


Iemand een idee hoe ik dit voor elkaar kan krijgen?

Wie nooit tijd heeft, kan er niet mee omgaan.


  • Johnny
  • Registratie: December 2001
  • Laatst online: 20:26

Johnny

ondergewaardeerde internetguru

Natuurlijk werkt het niet, via TCP/IP wordt de gebuikersnaam helemaal niet verstuurd. Onder sommige besturingsystemen heb je niet eens gebruikersnamen.

Om gebruikers te kunnen identificeren zul je ze zelf moeten laten aanmelden via bijvoorbeeld een beveiligde proxy.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


  • Black Hawk
  • Registratie: Oktober 2003
  • Laatst online: 06-02 12:18
Mmm, dat dacht ik al.
Maar zijn andere protocollen geen optie? Want ik weet dat het mogelijk is. Zoals de prog's MegaPing of Look@Lan.

Wie nooit tijd heeft, kan er niet mee omgaan.


  • M-ThijZ
  • Registratie: Maart 2003
  • Laatst online: 22:03

M-ThijZ

Riding on Rails

De enigste oplossing lijkt mij om zelf een stukje software te schrijven en die op de desbetreffende computers te draaien.

  • DukeBox
  • Registratie: April 2000
  • Nu online
Misschien met nbtstat -a <ip-ddress> en dan id 03 ?

  • Black Hawk
  • Registratie: Oktober 2003
  • Laatst online: 06-02 12:18
Als ik 't bij mij uitprobeer (op/met verschillenden comp's in het netwerk), dan krijg ik (ongeacht het id) alleen de computernaam en werkgroepnaam te zien, en niet de gebruikersnaam

Wie nooit tijd heeft, kan er niet mee omgaan.


  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 23:20
Misschien heb je hier iets aan:

http://www.xs4all.nl/~johnpc/perlstuff/Ident-1.20.html

http://www.faqs.org/rfcs/rfc1413.html

[ Voor 19% gewijzigd door Kwistnix op 05-04-2005 01:07 ]


  • DukeBox
  • Registratie: April 2000
  • Nu online
Black Hawk schreef op dinsdag 05 april 2005 @ 00:43:
Als ik 't bij mij uitprobeer (op/met verschillenden comp's in het netwerk), dan krijg ik (ongeacht het id) alleen de computernaam en werkgroepnaam te zien, en niet de gebruikersnaam
is er wel iemand ingelogged ?

Verwijderd

is het een intern windows netwerk?

http://jcifs.samba.org/src/src/jcifs/http/

  • Black Hawk
  • Registratie: Oktober 2003
  • Laatst online: 06-02 12:18
voodoochile: de jcifs lib is interessant, maar ik weet niet wat ik er op dit moment aan heb. (als ik het goed begrijp dan kun je dus hiermee een netwerkconnectie maken met een andere computer) Maar ik kan dan nog steeds niet de GEBRUIKERS-naam opvragen van DIE computer.

Het is een intern windows netwerk (bovenaan stond toch:
"De situatie:
Ben momenteel een internet-logging programma aan het maken die in een netwerk al het internet-verkeer moet gaan loggen. De machines zijn win98SE / winXP(home&profs)." ?

Wie nooit tijd heeft, kan er niet mee omgaan.


  • Cuball
  • Registratie: Mei 2002
  • Laatst online: 03-02 20:14
ik denk dat je enkel de gebruikersnaam kan opvragen als die effectief geregistreerd is in AD en zo op te vragen aan de DC

met bovenvermelde link doen wij het immers altijd, (mooie) aan IE is dat het allemaal transparant gebeurd, zonder dat de gebruiker hier iets van ziet

hier nog wat info
http://jcifs.samba.org/src/docs/ntlmhttpauth.html


hoe het zit in linux omgeving weet ik niet

"Live as if you were to die tomorrow. Learn as if you were to live forever"


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:22
Da's allemaal NTLM en dat werkt wel, maar dan moet je wel eerst de client overtuigen om zich te authenticeren. Voor zover ik weet wil dat alleen met SMB en HTTP (maar er zullen nog wel wat Windows-specifieke protcollen zijn) en met DNS gaat dat je zeker niet lukken. (Een HTTP proxy zou wel werken.)

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 10-12-2025
Wat is de gebruikersnaam van een Windowsmachine uberhaupt? Een machine kan 0, 1 of meer fysieke gebruikers hebben, en als je in Task Manager kijkt zie je dat er ook nog systeemaccounts zijn. Ik heb momenteel 5 verschillende user accounts die programma's draaien.

Zo'n Java programma draait lokaal als een bepaalde user, en die user kun je uiteraard wel opvragen.

[ Voor 3% gewijzigd door MSalters op 06-04-2005 09:39 ]

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Verwijderd

Black Hawk schreef op dinsdag 05 april 2005 @ 23:00:
voodoochile: de jcifs lib is interessant, maar ik weet niet wat ik er op dit moment aan heb. (als ik het goed begrijp dan kun je dus hiermee een netwerkconnectie maken met een andere computer) Maar ik kan dan nog steeds niet de GEBRUIKERS-naam opvragen van DIE computer.
intern, op hetzelfde domein, 't was maar een extra vraag :)

http://jcifs.samba.org/src/src/jcifs/http/NtlmSsp.java
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
String msg = req.getHeader("Authorization");
        if (msg != null && msg.startsWith("NTLM ")) {
            byte[] src = Base64.decode(msg.substring(5));
            if (src[8] == 1) {
                Type1Message type1 = new Type1Message(src);
                Type2Message type2 = new Type2Message(type1, challenge, null);
                msg = Base64.encode(type2.toByteArray());
                resp.setHeader( "WWW-Authenticate", "NTLM " + msg );
            } else if (src[8] == 3) {
                Type3Message type3 = new Type3Message(src);
                byte[] lmResponse = type3.getLMResponse();
                if (lmResponse == null) lmResponse = new byte[0];
                byte[] ntResponse = type3.getNTResponse();
                if (ntResponse == null) ntResponse = new byte[0];
                return new NtlmPasswordAuthentication(type3.getDomain(),
                        type3.getUser(), challenge, lmResponse, ntResponse);
            }


zie je hoe die authenticatie opgebouwd wordt? Ik zeg niet dat je die authenticatie moet doen, maar de manier van username inlezen kun je wel gebruiken denk ik zo...

type3.getUser() is wat je uiteindelijk moet bereiken... en type3message.parse toont je hoe je die dingen moet parsen.

er is zelfs een jGuru faq hierover:
http://www.jguru.com/faq/view.jsp?EID=1045412

(of mis ik nog steeds iets).

  • Bl4ckviper
  • Registratie: Mei 2002
  • Laatst online: 09-02 23:48

Bl4ckviper

BlaBlaBla

Sorry dat ik een eeuwen oud topic nieuw leven in blaas. Maar ik heb dit ook nodig voor een username ed paramaters vanuit windows te kunnen trekken voor transparante inlog van een intranet applicatie. Heeft iemand hier een werkend voorbeeld van toevallig?

Be fast .... Be furious....


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 00:09

Janoz

Moderator Devschuur®

!litemod

Hiervoor kun je de jcifs NtlmHttpFilter (jcifs is volgens mij wel ergens bij apache te vinden).

Als je acegi gebruikt voor je security dan is er ergens ook nog wel herimplementatie van bovenstaande te vinden die in acegi is geintegreerd. Deze is sowieso nog wel uit het cvs van acegi te halen als deze nog niet geintegreerd is.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Bl4ckviper
  • Registratie: Mei 2002
  • Laatst online: 09-02 23:48

Bl4ckviper

BlaBlaBla

Ik heb me helemaal suf gezocht maar ik krijg het gewoon niet werkend daarom vroeg ik me af of iemand een werkend voorbeeld heeft want die NtlmHttpFilter zet ik al in me XML maar hoe krijg ik nou die parameters uit me Domain controller

Be fast .... Be furious....


  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Het simpelst mogelijke voorbeeld om jouw functionaliteit te verwezenlijken, is door af te hangen van het OS. Je geeft aan je applicatie gewoon een env. variable mee, en leest deze vervolgens weer uit in de applicatie:
code:
1
java -Dusername="%USERNAME% TestApplication

En vervolgens lees je deze weer uit in de applicatie dmv:
Java:
1
System.getProperty("username")


Als je Java1.5 gebruikt, kan je dit zelfs rechtstreeks uitlezen:
Java:
1
System.getenv("USERNAME");

edit:
In het vervolg maar eens beter lezen.. |:(
Zal dit maar laten staan, misschien heeft iemand er ooit nog wat aan...

[ Voor 15% gewijzigd door -FoX- op 30-05-2006 16:48 ]


  • Bl4ckviper
  • Registratie: Mei 2002
  • Laatst online: 09-02 23:48

Bl4ckviper

BlaBlaBla

-FoX- schreef op dinsdag 30 mei 2006 @ 16:46:
Het simpelst mogelijke voorbeeld om jouw functionaliteit te verwezenlijken, is door af te hangen van het OS. Je geeft aan je applicatie gewoon een env. variable mee, en leest deze vervolgens weer uit in de applicatie:
code:
1
java -Dusername="%USERNAME% TestApplication

En vervolgens lees je deze weer uit in de applicatie dmv:
Java:
1
System.getProperty("username")


Als je Java1.5 gebruikt, kan je dit zelfs rechtstreeks uitlezen:
Java:
1
System.getenv("USERNAME");

edit:
In het vervolg maar eens beter lezen.. |:(
Zal dit maar laten staan, misschien heeft iemand er ooit nog wat aan...
Juist wat dat zocht ik dus niet ;) maar toch bedankt iemand anders nog een werkend stukje code betreffende een domain controller uitlezen voor de info van de gebruiker zoals naam en email adres en natuurlijk transparant inloggen

Be fast .... Be furious....


  • Cuball
  • Registratie: Mei 2002
  • Laatst online: 03-02 20:14
Bl4ckviper schreef op dinsdag 30 mei 2006 @ 16:18:
Ik heb me helemaal suf gezocht maar ik krijg het gewoon niet werkend daarom vroeg ik me af of iemand een werkend voorbeeld heeft want die NtlmHttpFilter zet ik al in me XML maar hoe krijg ik nou die parameters uit me Domain controller
in je web.xml iets als volgt (misschien nog enkel init parameters bij de filter in te stellen...
code:
1
2
3
4
5
6
7
8
9
10
<filter>
        <filter-name>NtlmHttpFilter</filter-name>
        <display-name>NtlmHttpFilter</display-name>
        <filter-class>jcifs.http.NtlmHttpFilter</filter-class>
    </filter>

<filter-mapping>
        <filter-name>NtlmHttpFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


en wij doen dan bv iets in de aard van:

code:
1
2
3
4
NtlmPasswordAuthentication ntlm = (NtlmPasswordAuthentication) req.getSession().getAttribute("NtlmHttpAuth");
String userName = ntlm.getUsername();

enz...

"Live as if you were to die tomorrow. Learn as if you were to live forever"


  • Bl4ckviper
  • Registratie: Mei 2002
  • Laatst online: 09-02 23:48

Bl4ckviper

BlaBlaBla

Cuball schreef op woensdag 31 mei 2006 @ 09:58:
[...]


in je web.xml iets als volgt (misschien nog enkel init parameters bij de filter in te stellen...
code:
1
2
3
4
5
6
7
8
9
10
<filter>
        <filter-name>NtlmHttpFilter</filter-name>
        <display-name>NtlmHttpFilter</display-name>
        <filter-class>jcifs.http.NtlmHttpFilter</filter-class>
    </filter>

<filter-mapping>
        <filter-name>NtlmHttpFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


en wij doen dan bv iets in de aard van:

code:
1
2
3
4
NtlmPasswordAuthentication ntlm = (NtlmPasswordAuthentication) req.getSession().getAttribute("NtlmHttpAuth");
String userName = ntlm.getUsername();

enz...
ntlm.getUsername(); blijft leeg :S

maar goed ik laat het voor nu even rusten als iemand nog briljanten ideeen heeft of een werkend praktijk voorbeeld ;) dan hoor ik het graag

Be fast .... Be furious....


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 00:09

Janoz

Moderator Devschuur®

!litemod

Heb je helemal niks kunnen vinden op http://jcifs.samba.org/src/docs/ntlmhttpauth.html dat je verder kon helpen? Of wacht je hier op een kant en klaar cut n paste voorbeeld?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Bl4ckviper
  • Registratie: Mei 2002
  • Laatst online: 09-02 23:48

Bl4ckviper

BlaBlaBla

ik heb genoeg kunnen vinden daar maar ik krijg het helaas niet werkend mijn ervaring met dit soort dingen is niet zo groot.

ik krijg de filter ingebouwd ed maar ik krijg dus geen gegevens uit de domain controller zoals username, naam en email adres dingen die meegegeven worden bij je windowslogin ..
dus zodat je op iedere pc kan inloggen en je instellingen meeneemt zoals je naam en email die wil ik dus gebruiken bij de intranet applicatie

maar ik krijg dus niets terug het blijft leeg

Be fast .... Be furious....

Pagina: 1