webForumDet fria alternativet

min ASP ping fungerar ej på IIS 6.0

Webbservrar

22 svar · 656 visningar · startad av mattiasnordin

Medlem sedan maj 20012 080 inlägg
Frågan#1

Hej alla glada!

Jag har precis flyttat en sida från en webserver till en annan. Det som skiljer sig att den nya servern kör win2003 server med IIS 6.0.
Den gamla var en 5.0.

Allt fungerar bra förutom AspPing komponenten som jag använder på en sida.
(http://www.serverobjects.com/products.htm#free)

Sidan laddas och jag får inte några felmeddelanden.

<% function funTestPing(ip)
  rem ***********************************************************
  rem * Create the object
  rem ***********************************************************
  Set Pinger = Server.CreateObject("AspPing.Conn")
	Pinger.RemoteHost = ip
	Pinger.PingCount = 2
	varPingResult = Pinger.Ping
	if instr(varPingResult, "Request timed out") > 0 then 
	 	funTestPing = ""
 	else 
		varLeftCut = InStrRev(varPingResult, "time=")+5 
		varPingTimeCut = mid(varPingResult, varLeftCut, 5)
		varRightCut = InStrRev(varPingTimeCut, "ms")+1 
 		varPingTimeCut = left(varPingTimeCut,varRightCut) 
	 	funTestPing = varPingTimeCut 
	 end if 
Set Pinger = nothing
end function %>

När jag kör funktionen så returneras inte något. ??? Är detta något som har med säkerhet att göra?

Medlem sedan juni 20022 599 inlägg
#2

Ändrade brandväggsregler?

Medlem sedan maj 20012 080 inlägg
#3

TCP/IP brandväggen på den lokala servern är inte påslaget.
Det går att manuellt pinga till alla adresser. Grrr...

Medlem sedan juni 20022 599 inlägg
#4

Då blir väl nästa felsökningssteg att köra samma kod i en vbs-fil för att avgöra om problemet ligger i IIS:en eller operativet?

Medlem sedan maj 20012 080 inlägg
#5

ahh... jag har aldrig provat att exekvera en vbs(asp) fil utanför IIS. Bra test. will do...

Medlem sedan maj 20012 080 inlägg
#6

niko, vet du hur man ska formatera koden för att kunna exekvera den i en vbs fil?

Set Pinger = Server.CreateObject("AspPing.Conn")
Pinger.RemoteHost = "10.10.10.10"
Pinger.PingCount = 2
varPingResult = Pinger.Ping
response.write varPingResult

Kör man det rakt upp och ner som den är så smäller det på "Server" raden...
Antar att det är lite annorlunda syntax när det köres i IIS och i OSet.

Medlem sedan juni 200032 967 inlägg
#7

Använd bara CreateObject().

Set Pinger = CreateObject("AspPing.Conn")
Pinger.RemoteHost = "10.10.10.10"
Pinger.PingCount = 2
varPingResult = Pinger.Ping
msgbox (varPingResult)

Mvh

Medlem sedan maj 20012 080 inlägg
#8

Tack Anders. Trodde inte att det var så lätt.

Då kan jag meddela att det fungerar utanför IIS. Message boxen innehöll ett korrekt ping reply.

Jag har provat att registrera DLL filen igen ifall att det skulle spela någon roll.

Jag använder även en DNS lookup komponent till IIS och den fungerar som den ska.

Är det någon som har en vild teori om i vilken ända man ska börja felsöka?`

Om det fungarer utanför IIS så borde det väl ändå inte vara fel på komponenten i sig?!

:)

Medlem sedan juni 20022 599 inlägg
#9

mattiasnordin skrev:

Är det någon som har en vild teori om i vilken ända man ska börja felsöka?

Inget konkret:

1. Använd bara CreateObject (utan Server) för att instansiera utanför COM+-kontexten.
2. Byt anonymous user på sidan till "Administrator" för att se om det är ett rättighetsproblem.
3. Mixtra med inställningar typ "Isolation level", "Allow service to interact with desktop" mm ..'

Sen är ju nästa fråga hur mycket tid man vill lägga ner på en tredjepartskomponent utan källkod som har några år på nacken?

1. Leta upp en annan ping-komponent. Det borde finnas nyare och bättre.
2. Använd ping.exe i Windows:

Set X = CreateObject("WScript.Shell")
Set Y= X.Exec("cmd /C  ping XXX.XXX.XXX.XXX")
Do While True
     If Not Y.StdOut.AtEndOfStream Then
       pingres = pingres & Y.StdOut.Read(1)
     Else
        Exit Do
     End If
Loop
Response.Write pingres

Den enda skillnaden blir att du får ändra lite i din strängfunktioner.

Medlem sedan maj 20012 080 inlägg
#10

Jag sökte runt lite på internet och fann tillsist ytterligare en komponent som heter dynuPing.

http://www.dynu.com/dynuping.asp

Denna komponent har vett nog att skriva ut ett felmeddelande när jag försöker köra den.

<%
Set myping = Server.Createobject("Dynu.Ping")

Response.Write("<PRE>")
REM the below line will ping the host "dynu.com" with a 32 byte packet, 2 echo with 1000 millisecond timeout and display its result.
Response.Write(myping.ping("dynu.com", 2, 32, 1000))
Response.Write("</PRE>")

Set myping = nothing
%>

ger resultatet:

Error creating process
Access is denied.

Antar att det är samma rättighetsproblem med den andra komponenten. Var sätter man rättigheter för dessa komponenter?

I felsökningssyfte har jag gett IIS_user och IIS_wpg fulla rättigheter i hela webrooten.

Medlem sedan juni 20022 599 inlägg
#11

mattiasnordin skrev:

Antar att det är samma rättighetsproblem med den andra komponenten.

Nja. Du har inte konstaterat att det fanns ett rättighetsproblem med den andra komponenten.

mattiasnordin skrev:

Var sätter man rättigheter för dessa komponenter?

Ja, alltså komponenten i sig har ju tillräckliga rättigheter. Annars skulle du inte kunna instansiera den. Frågan är snarare vilken "process" det är den i sin tur försöker skapa? För att få reda på det är det nog enklast att ha tillgång till källkoden.

/red: Eller missförstår jag? På vilken rad kommer "error creating process"?

BTW: Funkade den rena ping.exe-koden?

Medlem sedan juni 20022 599 inlägg
#12

/red: Dubbelpost.

Medlem sedan maj 20012 080 inlägg
#13

Jag fick access denied på .exe koden också. :(

Medlem sedan juni 20022 599 inlägg
#14

Se till att anonymous user har läs-/exekveringsrättigheter på ping.exe.

Medlem sedan apr. 20012 266 inlägg
#15

Har för mig att konton, förutom Administrator, ej har tillgång till rawsockets, något som kan vara aktuellt i detta fall?

Medlem sedan juni 20022 599 inlägg
#16

något som kan vara aktuellt i detta fall?

Har också för mig att det du säger stämmer, men trots allt:

1.) Komponenterna är tänkta att kunna fungera i IIS:en från Anonymous-kontot (vilket de också gör i IIS 5).
2.) Man pingar nog inte via "råa" sockets i Windows. Man använder icmp.dll.

Medlem sedan maj 20012 080 inlägg
#17

Nu fungerar Dynu.ping...

Men jag har ändrat så mycket så jag vet inte exakt vad det var som gjorde att det fungerar.

Har förljande konton, som verkar vara förknippade med IIS.

  1. ASPNET
  2. IUSR_datornamn
  3. IWAM_datornamn
  4. GRUPP: IIS_WPG

Alla dessa konton har fått fulla rättigheter på alla filer i hela webrooten.
Alla dessa konoton har fulla rättigheter på både icmp.dll och ping.exe.

Jag är van med att ha ett "IUSR_datornamn" konto, vad gör restrerande konton?

Vad av mina förändringar är det som har gjort att Dynu.ping fungerar?

Den andra pingkomponentet fungerar fortfarande inte ?!
Jag är lite intresserad över att få den att fungera för att den returnerar bara ping replyen och inte hela ping.exe resultatet.

Dynu.ping returnerar också en massa skräp jag inte är intressarad av. Är det prestandakrävande att klippa ut "749ms" ur följande sträng?

Pinging dynu.com [198.144.7.123] with 32 bytes of data:

:)

Reply from 198.144.7.123: bytes=32 time=749ms TTL=126

Ping statistics for 198.144.7.123:

Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),

Approximate round trip times in milli-seconds:

Minimum = 749ms, Maximum = 749ms, Average = 749ms
Medlem sedan juni 20022 599 inlägg
#18

Alla dessa konton har fått fulla rättigheter på alla filer i hela webrooten.

Känns märkligt att de skulle påverka. Standard läs- och scripträttigheter borde räcka? ASPNET-kontot borde du inte behöva blanda in öht. Det är väl "vanlig" ASP?

Alla dessa konoton har fulla rättigheter på både icmp.dll och ping.exe.

Läs- o exekver på ping.exe och enbart läs på icmp.dll ska räcka, och det är väl standard?

Ett experiment:

Kopiera in ping.exe i samma mapp som scriptet. Sätt läs- o exekverrättigheter för IUSR_ .. och kör sen "mitt" ping-script med:

Set Y= X.Exec("cmd /C  " & Server.MapPath(".") & "\ping.exe XXX.XXX.XXX.XXX")

Vad händer?

Vad av mina förändringar är det som har gjort att Dynu.ping fungerar?

Ingen aning. Jag har inga problem med något av det du räknar upp i IIS 5 med default-inställningar. Är IIS 6 så mycket tajtare eller har du kört nån "lock-downgrej"?

Är det prestandakrävande att klippa ut "749ms" ur följande sträng?

Tja .. Är det jobbigt att cykla? Det är naturligtvis mer krävande än att inte göra det. Men å andra sidan så orsakar ju pingen i sig sekundlånga "trådblockeringar" som antagligen är mycket värre. Är den här pingningen nåt du planerar att göra på sekundbasis? Annar tycker jag inte du ska bry dig så mycket.

Medlem sedan maj 20012 080 inlägg
#19

Är IIS 6 så mycket tajtare

Ja den är mycket tajtare. Det enda som går att köra på servern default är statiska HTTP sidor. ASP och övrigt måste man tillåta.

Är den här pingningen nåt du planerar att göra på sekundbasis

Nej, jag anropar bara pingfunktionen när man klickar på en knapp. Sedan visas en bild med vilka system som är online.

Nu ska jag ominstaller servern helt. Får se om jag kan sätta upp det rätt nästa gång. :)

Medlem sedan juni 20022 599 inlägg
#20

OK. Kan tillägga att jag precis provade "mitt" ping-script på en helt clean out-of-the-box (förutom att jag slog på ASP-stödet) W2k3/IIS6 i VMWare. Det funkade hur bra som helst. Det finns alltså inget i den "tajtare" säkerheten som påverkar ICMP/ping, vad jag kan se.

261 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)