[ASP] Ophalen lokale register sleutel

Pagina: 1
Acties:

  • t-x-m
  • Registratie: November 2003
  • Laatst online: 05-01 18:35

t-x-m

.NET Nerd

Topicstarter
Beste allemaal,
Eerst even een situatie schets: er zijn 4 vestigingen in nederland, vanuit die vestigingen komen mensen op een webapplicatie, maar voor die applicatie is het relevant om te weten waar ze zitten.

Dat kan op 2 manieren, a het ipadres, maar dat is niet verstandig aangezien subnetten kunnen veranderen in de loop der tijd(jaren), de andere manier, die altijd zou moeten werken is het volgende:
In het register staat een sleutel met daarin de vestiging(bij voorbeeld: Rotterdam).

Het zou mooi zijn als ik die op kan halen, dan ben ik in 1x van het gezeur af.

Dus ik ging op zoek naar een script daarvoor, en wat blijkt het werkt:
ASP:
1
2
3
4
<%
Set wshShell = server.CreateObject("WScript.Shell")
response.write wshShell.regread("HKLM\system\currentcontrolset\services\netlogon\parameters\dynamicsitename")
%>

Althans, dat leek dan zo, want wat doet dit script, die pakt de waarde van de server, en niet die van de client pc!
Is daar een alternatieve oplossing voor??
BVD

GC.Collect();


  • t-x-m
  • Registratie: November 2003
  • Laatst online: 05-01 18:35

t-x-m

.NET Nerd

Topicstarter
Sorry :z, voortaan eerst beter zoeken.
Overigens vreemd dat het dan op de server wel kan..
Kan WScript het dan niet via de server naar de lokale pc doen(hij weet het ip)?

[ Voor 39% gewijzigd door t-x-m op 28-09-2005 11:18 ]

GC.Collect();


  • Flard
  • Registratie: Februari 2001
  • Laatst online: 29-04 20:55
Het is onmogelijk om het register te lezen op je client pc. Zeker niet in ASP, aangezien dat Server-side wordt uitgevoerd en je browser niet elke keer de volledige inhoud van je register stuurt.
Één andere oplossing zou misschien een client-side oplossing kunnen zijn (dus dit in een VBScript-<script> block te zetten, al waag ik te betwijfelen of je browser het leuk vindt dat een pagina het register uitleest (vanwege veiligheid).

Mij lijkt dus de beste optie op basis van IP-adres te kijken. Of misschien op basis van hostname (als ze zijn in de vorm van pc01.rotterdam.bedrijf.nl) en anders eens kijken of je geen ander bruikbare instelling kunt vinden in Request.ServerVariables.

Verwijderd

Zoals Flard zegt gaat dit NOOIT werken, en dat is maar goed ook, als je over de security-consequenties zou nadenken. (Edit: Nou ja, er zijn vuile (lees: ActiveX) manieren om dit te doen, maar dan nog wil je dit niet.)

Dit kan je op 2 manieren realiseren:
1) Infrastructureel: Richt je netwerk in zodat je kunt herkennen waar een gebruiker vandaan komt. Dat kan bjivoorbeeld door een webproxy op iedere locatie te plaatsen en alle requests via deze proxy te laten verlopen, om vervolgens die proxy te herkennen
2) Softwarematig: je kan een gebruiker om een cookie vragen waarin de vestiging staat. Heeft hij/zij geen cookie, toon dan een scherm waarop de gebruiker vastlegt waar hij zit, om dat vervolgens in een cookie vast te leggen. Deze manier heeft wat problemen, maar is het meest eenvoudig te implementeren.

[ Voor 8% gewijzigd door Verwijderd op 28-09-2005 11:42 ]


  • t-x-m
  • Registratie: November 2003
  • Laatst online: 05-01 18:35

t-x-m

.NET Nerd

Topicstarter
Thnx MrX
Maar ik heb het op een andere manier opgelost:
ASP.NET Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<%
Set WSHNetwork = server.CreateObject("WScript.Network")
Set wshShell = server.CreateObject("WScript.Shell")

LoginName = WSHNetwork.UserName
ComputerName = WSHNetwork.ComputerName
Set UserObj = GetObject("WinNT://DOMEIN/" & LoginName)

Group = array("","","","","","","","","","","","","","","","","","","","")
x=0
For Each GroupObj In UserObj.Groups
    Group(x) = GroupObj.Name 
    x=x+1
Next

Function GetLocation()
    GetLocation=""
    if member_off("Rotterdam",group) = true then GetLocation = "RTD"
    if member_off("Eindhoven",group) = true then GetLocation = "EIN"
    if member_off("Hoogeveen",group) = true then GetLocation = "HGV"
    if member_off("Amsterdam",group) = true then GetLocation = "AMS"
    if member_off("Zwolle",group) = true then Getlocation = "ZWO"
End Function

Function member_off(grp,group)
    member_off = false
    For Each x In group
        if x = grp then member_off = true
    next
End Function
ComputerLocation = GetLocation 
response.write "Pc staat in:<b> " + ComputerLocation +"</b>"
%>

Hij kijkt dus of een gebruikr in bijvoorbeeld de groep Rotterdam zit in de AD :)

GC.Collect();


Verwijderd

T-X-M schreef op woensdag 28 september 2005 @ 12:54:
Thnx MrX
Maar ik heb het op een andere manier opgelost:

....

Hij kijkt dus of een gebruikr in bijvoorbeeld de groep Rotterdam zit in de AD :)
1 kleine opmerking. het lijkt me beter als je met een dynamische array werkt, i.p.v. eentje die je van te voren al aanmaakt. Het kan namelijk fout gaan als je meer dan 20 groepen hebt.

  • t-x-m
  • Registratie: November 2003
  • Laatst online: 05-01 18:35

t-x-m

.NET Nerd

Topicstarter
Ja, dat klopt, heb ik ondertussen ook aangepast hier, maar dat was ff een 'noodoplossing' omdat ik niet meer precies wist hoe ik dat ook al weer deed :)
Maar zo werkt het prima, niet zoals ik vroeg in de topic titel, maargoed..
Thankx anyway voor de hulp en meedenkerij :D

GC.Collect();

Pagina: 1