Toon posts:

[ASP.NET / web bugs /IIS]

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi,

ik heb al dagen lopen zoeken over web bugs en iis maar kom er niet uit :(.

Momenteel ben ik bezig met een aantal testjes. Ik heb 2 eenvoudige asp.net web applicaties gemaakt.

De eerste web applicatie is een doodnormale web applicatie die allerlei informatie toont etc etc, verder niks bijzonders. De tweede web applicatie probeert een aantal statistieken bij te houden van de bezoekers van de eerste web applicatie.

In normale opstandigheden horen beide web applicatie op een aparte server te draaien. (ik vraag me af of het mogelijk is om 2 iis instantie op een machine te laten draaien en /of hoe je een website kan benaderen van andere computer?) maar voor nu heb ik beide applicatie onder 1 server gebracht.

in de eerste web applicatie heb ik in de index pagina een web bug toegevoegd tussen de <body> .. </body> tag. Dit zit er als volgt uit:

code:
1
[img]"http://localhost/WebBug/test.bmp?index.html"[/img]


Bij het aanroepen van de index pagina van de eerste web applicatie wordt er ook een plaatje opgehaald (normaal staat dit dus op een andere server). Bij het ophalen van deze plaatje wordt er een aantal gegevens vastgelegd van de bezoeker. Hierbij kunnen jullie denken aan: ip adres en de pagina die aangeroepen wordt (in dit geval is dit te zien aan de hand van de query string).

Het tweede web applicatie moet de request bij het ophalen van de plaatje opvangen en deze vervolgens opslaan in bijvoorbeeld een text bestandje. Hiervoor heb ik een klein scriptje gekregen:

code:
1
2
3
4
5
6
7
 string query=Request.ServerVariables["query_string"];
 string userAgent=Request.ServerVariables["http_user_agent"];
 string httpReferer=Request.ServerVariables["http_referer"];

TextWriter tw = new StreamWriter(Server.MapPath("webbug.txt"));
tw.WriteLine(","+query+","+hostname+","+userAgent+","+httpReferer+",");
tw.Close();


Het bovenstaande stukje source code werkt alleen als je rechtstreeks de aspx pagina aanroept. Wat ik eigenlijk wil is wanneer iemand webapplicatie 1 aanroept en vervolgens een plaatje wordt opgehaald bij een andere server dat er een scriptje wordt uitgevoerd om al deze gegevens op te slaan in een text bestandje. Nou weet ik niet of het bovenstaande scriptje werkt met wat ik wil bereiken. Graag zal ik willen weten hoe ik dit kan bereiken.

alvast bedankt

B

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 27-04 18:17

gorgi_19

Kruimeltjes zijn weer op :9

test.bmp hernoemen naar test.ashx, test.aspx of iets wat door de ASP.NEt Parser heen wordt gehaald.
Verder ga je met deze constructie foutmeldingen creeeren als 2 gebruikers tegelijkertijd een request uitvoeren.

[ Voor 37% gewijzigd door gorgi_19 op 12-10-2005 15:24 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • joopst
  • Registratie: Maart 2005
  • Laatst online: 01-10-2024
in IIS kan je instellen dat .JPG en/of .BMP files door ASP.NET worden afgehandeld. Bij dit afhandelen kan je dan een eigen 'handler' maken. Deze handler kan dan weer alle code bevatten die jij wilt.

bijv: hier

Verwijderd

Topicstarter
gorgi_19 schreef op woensdag 12 oktober 2005 @ 15:23:
test.bmp hernoemen naar test.ashx, test.aspx of iets wat door de ASP.NEt Parser heen wordt gehaald.
Verder ga je met deze constructie foutmeldingen creeeren als 2 gebruikers tegelijkertijd een request uitvoeren.
Ja klopt. Ik weet dat deze constructie problemen gaat opleveren wanneer er meer dan 1 gebruiker een request vraagt. Maar test.bmp is een plaatje dat op de webserver staat. Het is voor de rest niks bijzonders.
joopst schreef op woensdag 12 oktober 2005 @ 15:27:
in IIS kan je instellen dat .JPG en/of .BMP files door ASP.NET worden afgehandeld. Bij dit afhandelen kan je dan een eigen 'handler' maken. Deze handler kan dan weer alle code bevatten die jij wilt.

bijv: hier
Aha bedankt. dus in principe kan ik het stukje script wat ik hierboven heb geplaats in een handler stoppen?

  • joopst
  • Registratie: Maart 2005
  • Laatst online: 01-10-2024
juist

je moet dan een class maken die de IHTTPHandler interface implementeert.
en je plaatje in een map stoppen met de volgende web.config
code:
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    
  <system.web>

    <httpHandlers>
      <add verb="*" path="*.jpg" type="HRS.Web.HttpHandlers.JPGHandler, MY.ASSEMBLY" />
    </httpHandlers>
  </system.web>

</configuration>

Verwijderd

Topicstarter
joopst schreef op woensdag 12 oktober 2005 @ 15:53:
juist

je moet dan een class maken die de IHTTPHandler interface implementeert.
en je plaatje in een map stoppen met de volgende web.config
code:
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    
  <system.web>

    <httpHandlers>
      <add verb="*" path="*.jpg" type="HRS.Web.HttpHandlers.JPGHandler, MY.ASSEMBLY" />
    </httpHandlers>
  </system.web>

</configuration>
hartstikke bedankt. Ik ga het gelijk proberen _/-\o_ _/-\o_ _/-\o_

Verwijderd

Topicstarter
heb gister geprobeerd. helaas werkt het niet :(. Hopelijk kunnen jullie mij helpen. ik wordt echt helemaal 8)7 :X

ok dit is wat ik heb gedaan:

eerst de HTTP handler geschreven en deze vervolgens gecompileerd tot een .dll file.
code:
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
using System;
using System.Web;
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;

namespace WebBug
{
    /// <summary>
    /// Summary description for HttpStatieksHandler.
    /// </summary>
    public class HttpStatieksHandler : IHttpHandler
    {
        public HttpStatieksHandler()
        {
            //
            // TODO: Add constructor logic here
            //
        }

        public void ProcessRequest(System.Web.HttpContext context)
        {
            string hostname=context.Request.ServerVariables["remote_host"];
            
            string query=context.Request.ServerVariables["query_string"];
            string userAgent=context.Request.ServerVariables
                                                 ["http_user_agent"];
            string httpReferer=context.Request.ServerVariables["http_referer"];

                              
        TextWriter tw = new StreamWriter 
                               ("http://localhost//WebBug//WebBugwebbug.txt");


                       tw.WriteLine(","+query+","+hostname+","+userAgent+","+httpReferer+",");
                                   tw.Close();
        }

        public bool IsReusable
        {
            get
            {
                return true;
            }
        }
    }
}


daarna heb ik het volgende stukje source code toegevoegd in webconfig in diezelfde applicatie waar ook de HTTP handler zich bevindt:

code:
1
2
3
  <httpHandlers>
      <add verb="*" path="*.bmp" type="WebBug.HttpStatieksHandler,WebBug" />
    </httpHandlers>


vervolgens heb ik in IIS 6 de .bmp extension toegevoegd (aspnet_isapi.dll).

alles weer opnieuw gecompileerd en geen foutmelding.

daarna heb ik een nieuwe web applicatie gemaakt. en vervolgens het volgende stukje html geplaatst:
code:
1
 [img]"http://localhost/WebBug/test.bmp?testquerystring"/[/img]


Daarna heb ik de nieuwe web applicatie gecompileerd. Er verschijnt vervolgens netjes de web page. Als het goed is moet deze webpage de bovenstaande stukje html uitgevoerd hebben om die test.bmp op te halen van een "andere server (in dit geval dezelfde server)", Dus als alles goed gaat moet na het aanroepen van de nieuwe webpage de httphandler allerlei gegevens in webbug.txt wegschrijven. Helaas gebeurt er helemaal niks.

wat doe ik hier verkeerd? ik hoop echt dat jullie mij kunnen helpen _/-\o_

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 27-04 18:17

gorgi_19

Kruimeltjes zijn weer op :9

En al op F5 gedrukt in Visual Studio met de juiste breakpoints?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
En doet hij het wel als je de .bmp hernoemt naar .ashx? Dan hoef je namenlijk geen entry in je web.config te maken en kan je kijken of hij het wel doet.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Topicstarter
gorgi_19 schreef op vrijdag 14 oktober 2005 @ 11:29:
En al op F5 gedrukt in Visual Studio met de juiste breakpoints?
na het onderstaande regel
code:
1
string httpReferer=context.Request.ServerVariables["http_referer"];


verschijnt de webpage en voor de rest wordt er niks mee gedaan. dus het onderstaande stukje source code wordt niet uitgevoerd:

code:
1
2
3
4
5
6
7
TextWriter tw = new StreamWriter("http://localhost//ArchitectureWebBug//webbug.txt");

            // write a line of text to the file
            tw.WriteLine(","+query+","+hostname+","+userAgent+","+httpReferer+",");

            // close the stream
            tw.Close();


want als ik de webpage afsluit dan wordt het debuggen gestopt. Voor de rest worden de querystring, hostname, useragent en httpreferer allemaal mooi opgevangen maar hij schrijft het niet weg in een file. :'(

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 27-04 18:17

gorgi_19

Kruimeltjes zijn weer op :9

"http://localhost//ArchitectureWebBug//webbug.txt" valt trouwens niet onder de definitie van "path" in de constructor van een StreamWriter; dit moet een echt bestandspad zijn, geen weblocatie. Daar kan hij ook niet naar schrijven.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
gorgi_19 schreef op vrijdag 14 oktober 2005 @ 11:43:
"http://localhost//ArchitectureWebBug//webbug.txt" valt trouwens niet onder de definitie van "path" in de constructor van een StreamWriter; dit moet een echt bestandspad zijn, geen weblocatie. Daar kan hij ook niet naar schrijven.
Gorgi_19 hartstikke bedankt. Hij werkt nu :).

  • joopst
  • Registratie: Maart 2005
  • Laatst online: 01-10-2024
als je een handler maakt voor plaatjes, moet je natuurlijk ook wel een plaatje teruggeven :-)
ikzelf heb een handler gemaakt die een transparant gifje teruggeeft.
code:
1
2
3
4
5
6
7
8
9
10
Dim transparentImage

If transparentImage Is Nothing Then
    transparentImage = New Bitmap(context.Server.MapPath("./transparent.gif"))
End If

-- insert statistics code here --

response.ContentType = "image/gif"
transparentImage.Save(response.OutputStream, ImageFormat.Gif)

  • joopst
  • Registratie: Maart 2005
  • Laatst online: 01-10-2024
waar natuurlijk geldt:
code:
1
response = context.Response

Verwijderd

Topicstarter
Heb nog een vraagje.

Gister is het mij gelukt om nog te debuggen. nu heb ik het hele project op een andere werkplek geprobeerd te runnen. Nou wil ik graag die handler gaan debuggen. maar op een of andere manier lukt dit niet.weet iemand hoe ik een handler kan debuggen?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 27-04 18:17

gorgi_19

Kruimeltjes zijn weer op :9

Als het niet lukt, geeft hij meestal wel een foutmelding, anders moet je hem in Debug mode ipv Release mode zetten.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
gorgi_19 schreef op zaterdag 15 oktober 2005 @ 16:08:
Als het niet lukt, geeft hij meestal wel een foutmelding, anders moet je hem in Debug mode ipv Release mode zetten.
in een solution zit in een project met de HTTP handler. De andere project is een web project die gebruikt maakt van de HTTP handler (deze bevat ook een referentie naar die http handler). Als ik bijvoorbeeld set " http handler" project as startup project zet dan krijg ik inderdaad een melding dat je dit niet zomaar kan debuggen (moet hem zetten naar url of externa program). Maar als ik de web applicatie wil debuggen dan moet hij als het goed is ook langs de http handler komen. nou dit is niet het geval (ook al heb ik een break point gezet).

doe ik iets verkeerd?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 27-04 18:17

gorgi_19

Kruimeltjes zijn weer op :9

gorgi_19 schreef op zaterdag 15 oktober 2005 @ 16:08:
anders moet je hem in Debug mode ipv Release mode zetten.
^^^^^

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
dat is het probleem juist. hij staat al in debug mode. maar op een of andere manier wil hij die http handler dll niet laden. (bij die break point verschijnt er dan een vraag teken die zegt dat er geen symbols zijn geladen).

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 27-04 18:17

gorgi_19

Kruimeltjes zijn weer op :9

Buildlocatie staat goed? .pdb bestanden staan in de /bin folder?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Reut
  • Registratie: September 2001
  • Laatst online: 27-03 10:12

Reut

Tjoepie, nu met schroefdoppie

laamaar....

[ Voor 91% gewijzigd door Reut op 15-10-2005 16:51 ]

Boom......Boom......Boom......Boom......Boom......booooooooooom


Verwijderd

Topicstarter
gorgi_19 schreef op zaterdag 15 oktober 2005 @ 16:43:
Buildlocatie staat goed? .pdb bestanden staan in de /bin folder?
ja de .pdb files staan in de bin folders. Als het goed is moet de buildlocatie goed zijn. maar nog steeds dezelfde problemen. Heb al deze bstanden weggehaald en opnieuw gecompileerd maar nog steeds het zelfde probleem.

nog een andere vraag:
Is het misschien ook mogelijk om de IIS opdracht te geven om die http handler aan te roepen? nou heb ik in die web applicatie in de web config file de http handlers tag toegevoegd. wat ik in principe wil bereiken is dat dit niet meer nodig is. Hopelijk weet jij daar meer van af _/-\o_

  • Creepy
  • Registratie: Juni 2001
  • Nu online

Creepy

Tactical Espionage Splatterer

@b: stiekum geldt voor vragen die je achteraf in een topic stelt eigenlijk hetzelfde als voor een topicstart. Dus welke zaken heb je nu zelf al geprobeerd en wat lukte daar niet mee? Het lijkt er nu op alsof je aan de hand gehouden moeten iets wat niet de bedoeling is ;)

Zie ook P&W FAQ - De "quickstart"

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Creepy schreef op zaterdag 15 oktober 2005 @ 18:51:
@b: stiekum geldt voor vragen die je achteraf in een topic stelt eigenlijk hetzelfde als voor een topicstart. Dus welke zaken heb je nu zelf al geprobeerd en wat lukte daar niet mee? Het lijkt er nu op alsof je aan de hand gehouden moeten iets wat niet de bedoeling is ;)

Zie ook P&W FAQ - De "quickstart"
@b: stiekum geldt voor vragen die je achteraf in een topic stelt eigenlijk hetzelfde als voor een topicstart. Dus welke zaken heb je nu zelf al geprobeerd en wat lukte daar niet mee? Het lijkt er nu op alsof je aan de hand gehouden moeten iets wat niet de bedoeling is ;)

Zie ook P&W FAQ - De "quickstart"

wat ik wil bereiken is te achter halen hoe ik op de ene server (waar geen web applicatie draait) eruit kan filteren wanneer er een request binnen komt. Dit wordt netjes in de server log bijgehouden maar wat ik eigenlijk wil is dit alles opslaan in een database.

Heb zelf een simple http handler geschreven. Deze werkt en schrijft de gegevens naar een text file (de volgende logische stap is weg schrijven naar een database). maar wat eigenlijk de bedoeling is dat de gegevens weggeschreven moet worden naar een andere web server waar het plaatje wordt aangevraagt.

Om het bovenstaande te kunnen bereiken heb ik naar de verschillende mogelijkheden gekeken, namelijk:
- gebruik maken van web services;
- java script en cookies (ben nog bezig);
- isapi filter (ben nog bezig)

het is uiteraard niet de bedoeling dat jullie mijn problemen ga oplossen. dit moet ik uiteraard zelf doen maar ik hoop dat jullie mij hierbij kan helpen (om naar de juiste richting te sturen).

  • joopst
  • Registratie: Maart 2005
  • Laatst online: 01-10-2024
je kan het beste een webform aan je project toevoegen, die als startup zetten.

op die webform dan 1 plaatje. (en jij weet wel welke)

  • whoami
  • Registratie: December 2000
  • Laatst online: 13:16
Zullen we dit topic niet laten verzanden in een 'hoe moet ik debuggen' ?

https://fgheysels.github.io/

Pagina: 1