HTTP Image transfer

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von BlackNetworkBit.

    HTTP Image transfer

    Hallo :)

    Ich habe folgende Frage zum Aufbau des HTT Protkolls: Wenn ich eine html Datei verschicke könnte der Header + Content folgender sein:

    HTML-Quellcode

    1. HTTP/1.1 200 OK
    2. Server: Apache...
    3. Content-Length: 345
    4. Content-Language: de
    5. Connection: close
    6. Content-Type: text/html
    7. <html>
    8. ...
    9. </html>


    Wenn ich nun aber ein Bild versende ist der Header zB folgender:

    Quellcode

    1. HTTP/1.1 200 OK
    2. Server: Apache...
    3. Content-Length: 107849
    4. Content-Language: de
    5. Connection: close
    6. Content-Type: image/png


    Die Frage jetzt: wie sieht der content aus, wie funktioniert es generell ein Bild zu versenden ? Meine überlegung war, das bild in einen base64 string zu konvertieren und wie bei dem Versenden der html Datei in den content zu schrieben, hatte allerdings nicht geklappt.

    Danke schonmal,
    Felix
    Ganz einfach: mit dem Header Feld "Content-Type:" wird der MIME-Type also das Dateiformat angegeben.
    Die Daten werden dann binär (also nicht als Text) übertragen.

    Theoretisch gäbe es zwar einige Möglichkeiten an dieser Stelle Base64 zu nutzen, das ist aber nicht zielführend, weil dabei die Dateien um 33,3% größer werden..
    Hier ist ein kleiner snippet zum versenden von einem Bild per Html-Protocol :)
    [VB.NET] HTTP Web-Signatur Server
    einfach anschauen und weiter verwenden :)
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise
    Okay, ich steh' aufm Schlauch. Habe mich jetzt mal an den HTTP Web-Signatur Server gehalten, mein Code also:

    VB.NET-Quellcode

    1. Dim bta As Bitmap
    2. bta = Image.FromFile(path & param)
    3. Dim bte() As Byte = Image2ByteArray(bta, Imaging.ImageFormat.Jpeg)
    4. header(2) &= bte.Length
    5. Dim headerStr As String = Nothing
    6. For i As Integer = 0 To header.Length - 1
    7. headerStr &= header(i) & vbCrLf
    8. Next
    9. Dim w As New StreamWriter(pClient.GetStream)
    10. w.Write(headerStr)
    11. w.Flush()
    12. w.Write(bte)
    13. w.Flush()


    Image2ByteArray:

    VB.NET-Quellcode

    1. Dim MS As New IO.MemoryStream
    2. Bild.Save(MS, Bildformat)
    3. MS.Flush()
    4. Return MS.ToArray



    Mein erzeugter Header:

    Quellcode

    1. HTTP/1.1 200 OK
    2. Server: HTTPServerTest
    3. Content-Length: 110453
    4. Content-Language: de
    5. Connection: close
    6. Content-Type: image/jpeg


    Der content geht ja aus dem VB Code hervor, ein Auschnitt:

    Quellcode

    1. 255
    2. 146
    3. 54
    4. 0
    5. 1
    6. 43

    und so weiter...

    Mein Firefox Browser läd allerdings nur ewig lange und es passiert nichts, html Seiten stellt er super da, wenn ich sie ihm schicke, das heißt, generell kommt ja was an. Wo liegt mein (Denk)Fehler ?

    Danke schonmal, hoffe mein Fehler ist nicht all zu gravierend.
    du Flushts die 2 mal :)
    1 mal nach dem w.Write(bte) reicht :)
    und du musst unter dem Header noch ein Leerzeichen machen :) dann müsste das Funktionieren :)
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise
    Habe den Code jetzt wie folge angepasst:

    VB.NET-Quellcode

    1. headerStr &= vbCrLf
    2. Dim w As New StreamWriter(pClient.GetStream)
    3. w.Write(headerStr)
    4. w.Write(bte)
    5. w.Flush()


    Das Problem bleibt allerdings bestehen, der Browser läd ewig, ohne Ergebnis.
    Zeig doch bitte deinen gesamten Code :)
    sonnst sitzen wir noch in circa 1 Woche ;)
    so habe hier mal meinen Server vereinfacht :)

    VB.NET-Quellcode

    1. Imports System.Drawing
    2. Module Module1
    3. Dim server As System.Net.Sockets.TcpListener
    4. Sub Main()
    5. Console.WriteLine("Gestartet")
    6. server = New Net.Sockets.TcpListener(New System.Net.IPEndPoint(System.Net.IPAddress.Any, 80))
    7. server.Start()
    8. Read()
    9. End Sub
    10. Public Sub Read()
    11. Dim net As New System.Net.Sockets.TcpClient
    12. Dim charEncoder As New System.Text.ASCIIEncoding
    13. Dim MYFONT As New Font("Arial", 12)
    14. Dim Grundheaderbeginn As String = "HTTP/1.0 200 OK" & Environment.NewLine & "Content-Type: "
    15. Dim Grundheaderend As String = Environment.NewLine & "Connection: close" & Environment.NewLine & Environment.NewLine
    16. Dim bta As New Bitmap("DEINBILD")
    17. Do
    18. Try
    19. net = server.AcceptTcpClient
    20. Dim stream As System.Net.Sockets.NetworkStream = net.GetStream
    21. Dim sr As New IO.StreamReader(stream)
    22. Dim dt As String = String.Empty
    23. Dim tempval As String = String.Empty
    24. Do
    25. tempval = sr.ReadLine
    26. dt &= tempval & Environment.NewLine
    27. Loop Until tempval = String.Empty
    28. Dim st As String() = dt.Split({Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
    29. Dim IP_ADDRESSE As String = net.Client.RemoteEndPoint.ToString.Split({":"}, StringSplitOptions.RemoveEmptyEntries)(0)
    30. Dim Client_OS As String = String.Empty
    31. Dim bool As Boolean = False
    32. For i = 0 To st.Length - 1
    33. If st(0).ToLower.StartsWith("get /bnb.png") = True Then
    34. bool = True
    35. Exit For
    36. End If
    37. Next
    38. If bool = True Then
    39. Dim bte As Byte() = Image2ByteArray(bta, Imaging.ImageFormat.Png)
    40. writebyteinstream(stream, charEncoder.GetBytes(Grundheaderbeginn & "image/png" & vbNewLine & "Content-Length: " & bte.Length.ToString & Grundheaderend))
    41. writebyteinstream(stream, bte)
    42. Else
    43. Dim ERROR_String As String = "<center><h2>This site dosent exist ;)</h2><p><p>pleas try this document : /signatur-server.png</center>"
    44. writebyteinstream(stream, charEncoder.GetBytes(Grundheaderbeginn & "text/html" & vbNewLine & "Content-Length: " & ERROR_String.Length.ToString & Grundheaderend & ERROR_String))
    45. End If
    46. net.Close()
    47. Catch ex As Exception
    48. Console.Write("Time : " & DateTime.Now.ToString & Environment.NewLine & ex.ToString & Environment.NewLine)
    49. End Try
    50. Loop
    51. End Sub
    52. Public Sub writebyteinstream(ByVal stream As System.Net.Sockets.NetworkStream, bytes As Byte())
    53. stream.Write(bytes, 0, bytes.Length)
    54. stream.Flush()
    55. End Sub
    56. Public Function Image2ByteArray(ByVal Bild As Bitmap, ByVal Bildformat As System.Drawing.Imaging.ImageFormat) As Byte()
    57. Dim MS As New IO.MemoryStream
    58. Bild.Save(MS, Bildformat)
    59. MS.Flush()
    60. Return MS.ToArray
    61. End Function
    62. End Module


    Die Seite müsste man dann so aufrufen :

    Quellcode

    1. http://127.0.0.1/BNB.png
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „BlackNetworkBit“ ()

    So hier der gesamte relevante Code:

    VB.NET-Quellcode

    1. Private Sub auswerten(ByVal inputText As String, ByVal pClient As TcpClient, ByVal path As String)
    2. Dim tZeilen() As String = inputText.Split(vbCrLf)
    3. Dim operat As String = tZeilen(0).Split(" ")(0)
    4. Dim param As String = tZeilen(0).Split(" ")(1)
    5. If param = "/" Then
    6. send(pClient, File.ReadAllText(path & "\index.html"))
    7. Else
    8. param = param.Replace("/", "")
    9. If IO.File.Exists(path & param) = True Then
    10. 'Header erstellen----------------------
    11. Dim fileFormatArr() As String = param.Split(".")
    12. Dim fileFormat As String = fileFormatArr(fileFormatArr.Length - 1)
    13. Dim header() As String = IO.File.ReadAllLines(path & "\header")
    14. If fileFormat = "html" Then
    15. header(5) &= "text/" & fileFormat
    16. Else
    17. header(5) &= "image/" & "jpeg"
    18. End If
    19. 'Bild laden und in byte array konvertieren
    20. Dim bta As Bitmap
    21. bta = Image.FromFile(path & param)
    22. Dim bte() As Byte = Image2ByteArray(bta, Imaging.ImageFormat.Jpeg)
    23. 'Ende Bild laden + konvertieren
    24. header(2) &= bte.Length
    25. Dim headerStr As String = Nothing
    26. For i As Integer = 0 To header.Length - 1
    27. headerStr &= header(i) & vbCrLf
    28. Next
    29. headerStr &= vbCrLf
    30. 'Ende Header erstellen -----------------------
    31. Dim stream As NetworkStream = pClient.GetStream
    32. send(pClient, headerStr)
    33. writebyteinstream(stream, bte)
    34. End If
    35. End If
    36. End Sub
    37. Public Sub writebyteinstream(ByVal stream As System.Net.Sockets.NetworkStream, ByVal bytes As Byte())
    38. stream.Write(bytes, 0, bytes.Length)
    39. stream.Flush()
    40. End Sub
    41. Public Function Image2ByteArray(ByVal Bild As Bitmap, ByVal Bildformat As System.Drawing.Imaging.ImageFormat) As Byte()
    42. Dim MS As New IO.MemoryStream
    43. Bild.Save(MS, Bildformat)
    44. MS.Flush()
    45. Return MS.ToArray
    46. End Function


    auswerten wird aufgerufen, sobald eine message vom client reinkommt, der Parameter inputText ist eben diese message der parameter pClient ist der Client von dem die message kommt und path der Pfad zu dem Verzeichnis in dem die html dokumente und bilder liegen.
    die methode send funktionert ohne Probleme. Habe mit der "netzwerkanalyse" vom firefox auch rausgefunden, dass mein header richtig ankommt, es aber nicht möglich ist das Bild darzustellen da es "Fehler enthält".
    Danke schonmal :)
    so es gibt eine Funktion die IO.Path.combine heißt diese kombiniert 2 Files, diese Funktion solltest du Hier :

    VB.NET-Quellcode

    1. If IO.File.Exists(path & param) = True Then


    auch nutzen da es momentan zu Fehler kommen kann ;)
    aber ich würde dir raten erst mal den gesamten Sub raus zu nehmen.
    vielleicht wäre es auch noch gut zu wissen was in der Datei \Header drin steht :)

    ich würde auch am besten diesen Code :

    VB.NET-Quellcode

    1. bta = Image.FromFile(path & param)

    durch das ersetzen :

    VB.NET-Quellcode

    1. Dim bta As new Bitmap(IO.Path.combine(path ,param))
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise
    Der text aus meinem header dokument:

    Quellcode

    1. HTTP/1.1 200 OK
    2. Server: HTTPServerTest
    3. Content-Length:
    4. Content-Language: de
    5. Connection: close
    6. Content-Type:


    Außerdem habe ich nur noch ein false bei meiner if abfrage bekommen, ob die datei existiert, als ich io.path.combine benutzt habe. Habe daraufhin mal folgendes getestet:

    VB.NET-Quellcode

    1. Dim pathTest as String = IO.Path.Combine(path, param)

    pathTest hat allerdings leider den wert "\emsa.jpg" also nur den wert aus param.
    So ich habe mir mal die Zeit genommen etwas zu schreiben :

    VB.NET-Quellcode

    1. Imports System.Drawing
    2. Module Module1
    3. Dim server As System.Net.Sockets.TcpListener
    4. Dim charEncoder As New System.Text.ASCIIEncoding
    5. Sub Main()
    6. If IO.Directory.Exists(My.Computer.FileSystem.CurrentDirectory & "\public_html") = False Then
    7. IO.Directory.CreateDirectory(My.Computer.FileSystem.CurrentDirectory & "\public_html")
    8. End If
    9. Console.WriteLine("Gestartet")
    10. server = New Net.Sockets.TcpListener(New System.Net.IPEndPoint(System.Net.IPAddress.Any, 80))
    11. server.Start()
    12. Read()
    13. End Sub
    14. Public Sub Read()
    15. Dim Grundheaderbeginn As String = "HTTP/1.0 200 OK" & Environment.NewLine & "Content-Type: "
    16. Dim net As New System.Net.Sockets.TcpClient
    17. Dim MYFONT As New Font("Arial", 12)
    18. Dim Grundheaderend As String = Environment.NewLine & "Connection: close" & Environment.NewLine & Environment.NewLine
    19. Dim directoryfiles As New List(Of String)
    20. Dim stea As String() = IO.Directory.GetFiles(My.Computer.FileSystem.CurrentDirectory & "\public_html")
    21. Dim Dateitypen As String() = {"png", "jpg", "gif", "bmp", "html", "css", "txt"}
    22. Dim bilddata As String() = {"png", "jpg", "gif", "bmp"}
    23. Dim normaltypes As String() = {"html", "css", "txt"}
    24. For i = 0 To stea.Count - 1
    25. For i2 = 0 To Dateitypen.Length - 1
    26. If stea(i).EndsWith(Dateitypen(i2)) = True Then
    27. directoryfiles.Add(stea(i))
    28. Exit For
    29. End If
    30. Next
    31. Next
    32. Do
    33. Try
    34. net = server.AcceptTcpClient
    35. Dim stream As System.Net.Sockets.NetworkStream = net.GetStream
    36. Dim sr As New IO.StreamReader(stream)
    37. Dim dt As String = String.Empty
    38. Dim tempval As String = String.Empty
    39. Do
    40. tempval = sr.ReadLine
    41. dt &= tempval & Environment.NewLine
    42. Loop Until tempval = String.Empty
    43. Dim st As String() = dt.Split({Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
    44. Dim requestfile As String = ""
    45. For i = 0 To st.Length - 1
    46. If st(i).ToLower.StartsWith("get /") = True Then
    47. requestfile = st(i).ToLower.Replace("get /", String.Empty).Replace(" http/1.1", String.Empty)
    48. Console.WriteLine(requestfile)
    49. Exit For
    50. End If
    51. Next
    52. Dim bool As Boolean = False
    53. For i = 0 To directoryfiles.Count - 1
    54. If directoryfiles.Item(i).ToLower.EndsWith(requestfile) = True Then
    55. Dim b As Boolean = False
    56. For i2 = 0 To bilddata.Length - 1
    57. If directoryfiles.Item(i).EndsWith(bilddata(i2)) = True Then
    58. b = True
    59. SendPicture(directoryfiles.Item(i), stream, Grundheaderbeginn, Grundheaderend)
    60. bool = True
    61. Exit For
    62. End If
    63. Next
    64. If b = False Then
    65. Dim c As Boolean = False
    66. For i2 = 0 To normaltypes.Length - 1
    67. If directoryfiles.Item(i).EndsWith(normaltypes(i2)) = True Then
    68. SendNormalData(directoryfiles.Item(i), stream, Grundheaderbeginn, Grundheaderend)
    69. bool = True
    70. Exit For
    71. End If
    72. Next
    73. End If
    74. Exit For
    75. End If
    76. Next
    77. If bool = False Then
    78. Dim ERROR_String As String = "<center><h2>This document dosent exist on this server</h2><p><p>Webserver by BlackNetworkBit</center>"
    79. writebyteinstream(stream, charEncoder.GetBytes(Grundheaderbeginn & "text/html" & Environment.NewLine & "Content-Length: " & ERROR_String.Length.ToString & Grundheaderend & ERROR_String))
    80. End If
    81. net.Close()
    82. Catch ex As Exception
    83. Console.Write("Time : " & DateTime.Now.ToString & Environment.NewLine & ex.ToString & Environment.NewLine)
    84. End Try
    85. Loop
    86. End Sub
    87. Public Sub SendPicture(ByVal file As String, stream As Net.Sockets.NetworkStream, headerstart As String, headerend As String)
    88. Dim bta As New Bitmap(file)
    89. Dim bte As Byte()
    90. Dim f As String = ""
    91. If file.EndsWith(".png") = True Then
    92. f = "png"
    93. bte = Image2ByteArray(bta, Imaging.ImageFormat.Png)
    94. ElseIf file.EndsWith(".jpg") = True Then
    95. f = "jpg"
    96. bte = Image2ByteArray(bta, Imaging.ImageFormat.Jpeg)
    97. ElseIf file.EndsWith(".bmp") = True Then
    98. f = "bmp"
    99. bte = Image2ByteArray(bta, Imaging.ImageFormat.MemoryBmp)
    100. ElseIf file.EndsWith(".gif") = True Then
    101. f = "gif"
    102. bte = Image2ByteArray(bta, Imaging.ImageFormat.Gif)
    103. ElseIf file.EndsWith(".ico") = True Then
    104. f = "ico"
    105. bte = Image2ByteArray(bta, Imaging.ImageFormat.Icon)
    106. Else
    107. f = "png"
    108. bte = Image2ByteArray(bta, Imaging.ImageFormat.Png)
    109. End If
    110. writebyteinstream(stream, charEncoder.GetBytes(headerstart & "image/" & f & Environment.NewLine & "Content-Length: " & bte.Length.ToString & headerend))
    111. writebyteinstream(stream, bte)
    112. End Sub
    113. Public Sub SendNormalData(ByVal file As String, stream As Net.Sockets.NetworkStream, headerstart As String, headerend As String)
    114. Dim ERROR_String As String = IO.File.ReadAllText(file)
    115. writebyteinstream(stream, charEncoder.GetBytes(headerstart & "text/html" & Environment.NewLine & "Content-Length: " & ERROR_String.Length.ToString & headerend & ERROR_String))
    116. End Sub
    117. Public Sub writebyteinstream(ByVal stream As System.Net.Sockets.NetworkStream, bytes As Byte())
    118. stream.Write(bytes, 0, bytes.Length)
    119. stream.Flush()
    120. End Sub
    121. Public Function Image2ByteArray(ByVal Bild As Bitmap, ByVal Bildformat As System.Drawing.Imaging.ImageFormat) As Byte()
    122. Dim MS As New IO.MemoryStream
    123. Bild.Save(MS, Bildformat)
    124. MS.Flush()
    125. Return MS.ToArray
    126. End Function
    127. End Module

    Aufruf über URL zum testen :
    http://127.0.0.1/index.html

    so müsste eigendlich selbst erklärend sein (in dem public_html Verzeichnis liegen dann die Dateien :) )
    ist momentan auf ein Haupt Directory beschränkt :)

    PS für dich sollte der Sub SendPicture interessant sein ;)
    Dateien
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „BlackNetworkBit“ ()

    Okay, das ist soweit klar, was ich allerdings jetzt überhaupt nicht verstehe ist folgendes:

    Ich habe mir mit SmartSniff den Traffic an meiner Netzwerkkarte angeguckt und sehe folgendes, wenn ich ein Bild im Internet lade (undzwar sehe ich wirklich nur das und nichts anderes bei SmartSniff):
    Spoiler anzeigen

    Brainfuck-Quellcode

    1. GET /mwiki/images/thumb/PapierkrebsBernadette_%287%29.jpg/440px-PapierkrebsBernadette_%287%29.jpg HTTP/1.1
    2. Host: schuchtel.net
    3. User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:26.0) Gecko/20100101 Firefox/26.0
    4. Accept: image/png,image/*;q=0.8,*/*;q=0.5
    5. Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
    6. Accept-Encoding: gzip, deflate
    7. Referer: http://schuchtel.net/mwiki/index.php?title=Datei:PapierkrebsBernadette_(7).jpg&filetimestamp=20101122174709
    8. Connection: keep-alive
    9. HTTP/1.1 200 OK
    10. Date: Wed, 18 Dec 2013 21:29:31 GMT
    11. Server: Apache/2.2.16 (Debian)
    12. Last-Modified: Sat, 01 Oct 2011 19:11:30 GMT
    13. ETag: "4207b3-63eb-4ae41825bbc80"
    14. Accept-Ranges: bytes
    15. Content-Length: 25579
    16. Keep-Alive: timeout=15, max=100
    17. Connection: Keep-Alive
    18. Content-Type: image/jpeg
    19. ......JFIF.....d.d.....WFile source: http://schuchtel.net/mwiki/index.php/Datei:PapierkrebsBernadette_(7).jpg...C...............
    20. .
    21. ...............%...#... , #&')*)..-0-(0%()(...C....
    22. .
    23. .
    24. .(...((((((((((((((((((((((((((((((((((((((((((((((((((......X.............................................:......................!1..AQa.."q.2...#..3BR.br...$4.......................................................1!A..."Q............?...^.CY..d....Ux.*8.T...7.w.I,{....*Ok.-..Q.;...#.h.ll...\..4.P..s..h.W{.@'.T.S..9....V&.&.\..Ra.$...4.J.6...H..r~.I....(D.. /......5 ......"d.b.<.ZJ..Wt.}FT.G..U(k..k...-+...O6_...~...56..i2;...........=.].X.}.w.Hq........=..Y.]h....y*.kdrT..6..R.-=IR.^..0.:[...J..rTC&r~.E.$6d.+..&JI..KM...Q....).*..+:..w..'..L.C..'........T-y/..~]...9........_...U...i'.~2./x".....p..D9...4...4..t..CJ......P...,
    25. ..U.*.G..:g..f....s......=..tj.)..g;..Z.oH....tH.f.#...U.7.[y....!)..
    26. .~.......qR}#CL1....H..i.K.0....!..\.E...F..............$V..VY.....e.C"9*F .)$D.'\{!"laD....J...Pu....U.-7Zf...T.<WF.n........9.....>.=k..
    27. O..y5F........................./\........0...i.YL...H..yR.......]X..9..F"..H.j.Y..R..1xQWy.T..,..p.
    28. .C.{..+..d)U6Rf......c..&..|..mk....Q.&.Y...4.q..So...t. .......d..+-E..X@...U=...@-......L.L+F..I.l:.W.9...od..s....jC....0....+Z|.........R.h=.......X....O{...R.9..2.
    29. '...+6:E.%-......Q.%&...r.H...Qd.).. Q..]...R.78SN...Y..d.$;.)" .R...
    30. .]...i.....7.
    31. P.^.....H.=.>..z..X.0.H.Tv...I..&|=e[l.]i..}...at..H.&..c.....g....nl....".@. o...C...{ldB.'.....%H...e`T....U.Zw!VN...{%...).k)......._5........Aq..........H#.QVy.#..Z.........u..d......T...m.m$.Z..x...N....BF.x..Ps..PV(.j6.7...yJ..8E....E2..Z`....1!Ik.j....r.^.....$.%UJ..PKGu........a
    32. J..6XN.Z..".V..
    33. e.F...e....Bu.=TC6....(.').0z..QQ.r...j. -
    34. ...!$6L....n.$.e.6..vYkLcrD(Q4...a.Y .$.u
    35. .I.Z.t."jd.+U=.L%...BJ.O$..K.2J DN.....U.%B.....gj...Aax.X...b....!.h..8y.}?NWI.....h.....*..
    36. .0....j..X.....u....EQ~.w..... KC^!.t....V5.....Z.......RI.yR>.....Ag..%V..3.+.....T..C^....
    37. .".I..Oc..pkM.....G[.l.+..xP...M......&..Ni...Ks$..g
    38. H7.D .=TR
    39. .G..M......`-.j
    40. I..S...6...-.Rpj..z..#
    41. & .t.i....9L.. ..Ea~......$....K.ct7
    42. .$B..[..
    43. MK..*..U..].bVY.U..we'....i....s...x.c..9...l.....>..:c.h..n.|...HtKC..j3T.K...[a.h...p.kQ...H...:.'...-.vQ.1.Z.......z]...s.Z s\..O.V$D.B......"..U...=I]5......k..g.Z...n..i..=.....q..Bc..oW.....SQ....J.....f..K..O
    44. .$..'..J.|..x. ......<.
    45. ;$ ....;."...@........d.A.....n.E..... .......K'.5K....T..~!..r.&.AI6.,-......V.z..R.G...?WR. 2.D.yS5GWSc
    46. ..k...x....C..zG...f...oH..Y.q.Z..........[T.........U..4........
    47. ..X....D....{M..L..M..u*ls..!....U.......f..H.h.#.U.4..S.M.ko!.h........9 ..I.$eE4..st.^...?... ..... h...[....J.nR.e..f. .t(..;...J....RA.,.#...D.t#.`....H..@'.$......P... .[
    48. N#.RL@HA2..b.u%..|$...
    49. 8E\].+..?+5..2..HQs...._!IZ..l)).0,..?R....E..V...j.Z.
    50. .%....z..
    51. +W9.0<...~...Yn9....P_.&...kM
    52. v..BX.T.)..D.8..P..!(....N..^..I.se".$..R....).Q.,nP..?.g......uc5.............3.[s..*m.o.Lx....X)1..X..3.yjb..2s.O*1.7.....h.#..... y2.....u....I.2.....!HT?.........T;......).Y..);c..w.HB.....b..-....RH....w.. ..?..e.(6.*5..c.).<1.s[
    53. w..=..t....f..4K....e..B.yo.....TC.;......`g...^....tP..,.}.b..n..(..w..s..8:E........(.Vk.O.......?YQ...t.-G:.A...d.P.*4.m.L{!..,pd........~.Kt..
    54. .{.i9.w......<.vR..."
    55. .!..6v.x@..t.1.D/.0..UD..G....N..'...... .>....k.......y....#c.=.....c..........N.....d..y.n........[..J.|..!`.M.|..(......P..x..>.P........CF.u?..dS {....%...?#.. ,.;...)....Pq.......)>>G}.\i....B.
    56. o...t...'..


    Mein Server soll jetzt, unabhängig von der Anfrage, immer das Bild senden. Ich beobachte folgendes mit SmartSniff (und wieder nur das und nichts anderes). Bis auf die unterschiede in der Anfrage(zB IP Adresse) und der Tatsache, das mein Server keine Apache ist unterscheiden sich die beiden Anfragen+Antworten doch nicht voneinander oder ??

    Spoiler anzeigen

    Brainfuck-Quellcode

    1. GET / HTTP/1.1
    2. Host: x.x.x.x
    3. User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:26.0) Gecko/20100101 Firefox/26.0
    4. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    5. Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
    6. Accept-Encoding: gzip, deflate
    7. Connection: keep-alive
    8. HTTP/1.1 200 OK
    9. Date: Wed, 18 Dec 2013 21:29:31 GMT
    10. Server: Apache/2.2.16 (Debian)
    11. Last-Modified: Sat, 01 Oct 2011 19:11:30 GMT
    12. ETag: "4207b3-63eb-4ae41825bbc80"
    13. Accept-Ranges: bytes
    14. Content-Length: 25579
    15. Keep-Alive: timeout=15, max=100
    16. Connection: Keep-Alive
    17. Content-Type: image/jpeg
    18. ......JFIF.....d.d.....WFile source: http://schuchtel.net/mwiki/index.php/Datei:PapierkrebsBernadette_(7).jpg...C...............
    19. .
    20. ...............%...#... , #&')*)..-0-(0%()(...C....
    21. .
    22. .
    23. .(...((((((((((((((((((((((((((((((((((((((((((((((((((......X.............................................:......................!1..AQa.."q.2...#..3BR.br...$4.......................................................1!A..."Q............?...^.CY..d....Ux.*8.T...7.w.I,{....*Ok.-..Q.;...#.h.ll...\..4.P..s..h.W{.@'.T.S..9....V&.&.\..Ra.$...4.J.6...H..r~.I....(D.. /......5 ......"d.b.<.ZJ..Wt.}FT.G..U(k..k...-+...O6_...~...56..i2;...........=.].X.}.w.Hq........=..Y.]h....y*.kdrT..6..R.-=IR.^..0.:[...J..rTC&r~.E.$6d.+..&JI..KM...Q....).*..+:..w..'..L.C..'........T-y/..~]...9........_...U...i'.~2./x".....p..D9...4...4..t..CJ......P...,
    24. ..U.*.G..:g..f....s......=..tj.)..g;..Z.oH....tH.f.#...U.7.[y....!)..
    25. .~.......qR}#CL1....H..i.K.0....!..\.E...F..............$V..VY.....e.C"9*F .)$D.'\{!"laD....J...Pu....U.-7Zf...T.<WF.n........9.....>.=k..
    26. O..y5F........................./\........0...i.YL...H..yR.......]X..9..F"..H.j.Y..R..1xQWy.T..,..p.
    27. .C.{..+..d)U6Rf......c..&..|..mk....Q.&.Y...4.q..So...t. .......d..+-E..X@...U=...@-......L.L+F..I.l:.W.9...od..s....jC....0....+Z|.........R.h=.......X....O{...R.9..2.
    28. '...+6:E.%-......Q.%&...r.H...Qd.).. Q..]...R.78SN...Y..d.$;.)" .R...
    29. .]...i.....7.
    30. P.^.....H.=.>..z..X.0.H.Tv...I..&|=e[l.]i..}...at..H.&..c.....g....nl....".@. o...C...{ldB.'.....%H...e`T....U.Zw!VN...{%...).k)......._5........Aq..........H#.QVy.#..Z.........u..d......T...m.m$.Z..x...N....BF.x..Ps..PV(.j6.7...yJ..8E....E2..Z`....1!Ik.j....r.^.....$.%UJ..PKGu........a
    31. J..6XN.Z..".V..
    32. e.F...e....Bu.=TC6....(.').0z..QQ.r...j. -
    33. ...!$6L....n.$.e.6..vYkLcrD(Q4...a.Y .$.u
    34. .I.Z.t."jd.+U=.L%...BJ.O$..K.2J DN.....U.%B.....gj...Aax.X...b....!.h..8y.}?NWI.....h.....*..
    35. .0....j..X.....u....EQ~.w..... KC^!.t....V5.....Z.......RI.yR>.....Ag..%V..3.+.....T..C^....
    36. .".I..Oc..pkM.....G[.l.+..xP...M......&..Ni...Ks$..g
    37. H7.D .=TR
    38. .G..M......`-.j
    39. I..S...6...-.Rpj..z..#
    40. & .t.i....9L.. ..Ea~......$....K.ct7
    41. .$B..[..
    42. MK..*..U..].bVY.U..we'....i....s...x.c..9...l.....>..:c.h..n.|...HtKC..j3T.K...[a.h...p.kQ...H...:.'...-.vQ.1.Z.......z]...s.Z s\..O.V$D.B......"..U...=I]5......k..g.Z...n..i..=.....q..Bc..oW.....SQ....J.....f..K..O
    43. .$..'..J.|..x. ......<.
    44. ;$ ....;."...@........d.A.....n.E..... .......K'.5K....T..~!..r.&.AI6.,-......V.z..R.G...?WR. 2.D.yS5GWSc
    45. ..k...x....C..zG...f...oH..Y.q.Z..........[T.........U..4........
    46. ..X....D....{M..L..M..u*ls..!....U.......f..H.h.#.U.4..S.M.ko!.h........9 ..I.$eE4..st.^...?... ..... h...[....J.nR.e..f. .t(..;...J....RA.,.#...D.t#.`....H..@'.$......P... .[
    47. N#.RL@HA2..b.u%..|$...
    48. 8E\].+..?+5..2..HQs...._!IZ..l)).0,..?R....E..V...j.Z.
    49. .%....z..
    50. +W9.0<...~...Yn9....P_.&...kM
    51. v..BX.T.)..D.8..P..!(....N..^..I.se".$..R....).Q.,nP..?.g......uc5.............3.[s..*m.o.Lx....X)1..X..3.yjb..2s.O*1.7.....h.#..... y2.....u....I.2.....!HT?.........T;......).Y..);c..w.HB.....b..-....RH....w.. ..?..e.(6.*5..c.).<1.s[
    52. w..=..t....f..4K....e..B.yo.....TC.;......`g...^....tP..,.}.b..n..(..w..s..8:E........(.Vk.O.......?YQ...t.-G:.A...d.P.*4.m.L{!..,pd........~.Kt..
    53. .{.i9.w......<.vR..."
    54. .!..6v.x@..t.1.D/.0..UD..G....N..'...... .>....k.......y....#c.=.....c..........N.....d..y.n........[..J.|..!`.M.|..(......P..x..>.P........CF.u?..dS {....%...?#.. ,.;...)....Pq.......)>>G}.\i....B.
    55. o...t...'..



    Der Content ist jeweils gekürzt, habe es aber x mal überprüft, der ist wirklich zu 100% gleich :)
    Tatsache ist, dass Firefox das Bild nicht darstellt, da es "Fehler enthält". Warum ? : (
    Dir auch ;)
    Du willst immer das selbe Bild darstellen wenn sich jemand auf deinen Server connectet ?
    wenn ja dann probiere mal das :

    VB.NET-Quellcode

    1. Imports System.Drawing
    2. Module Module1
    3. Dim server As System.Net.Sockets.TcpListener
    4. Sub Main()
    5. Console.WriteLine("Gestartet")
    6. server = New Net.Sockets.TcpListener(New System.Net.IPEndPoint(System.Net.IPAddress.Any, 80))
    7. server.Start()
    8. Read()
    9. End Sub
    10. Public Sub Read()
    11. Dim net As New System.Net.Sockets.TcpClient
    12. Dim charEncoder As New System.Text.ASCIIEncoding
    13. Dim Grundheaderbeginn As String = "HTTP/1.0 200 OK" & Environment.NewLine & "Content-Type: "
    14. Dim Grundheaderend As String = Environment.NewLine & "Connection: close" & Environment.NewLine & Environment.NewLine
    15. Dim bte As Byte() = Image2ByteArray(New Bitmap("HIER KOMMT DEINE GRAFIK DATEI REIN"), Imaging.ImageFormat.Png)
    16. Do
    17. Try
    18. net = server.AcceptTcpClient
    19. Dim stream As System.Net.Sockets.NetworkStream = net.GetStream
    20. Dim sr As New IO.StreamReader(stream)
    21. Dim dt As String = String.Empty
    22. Dim tempval As String = String.Empty
    23. Do
    24. tempval = sr.ReadLine
    25. dt &= tempval & Environment.NewLine
    26. Loop Until tempval = String.Empty
    27. Dim st As String() = dt.Split({Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
    28. Dim bool As Boolean = False
    29. For i = 0 To st.Length - 1
    30. If st(0).ToLower.StartsWith("get /") = True Then
    31. Console.WriteLine("Request from : " & net.Client.RemoteEndPoint.ToString.Split({":"}, StringSplitOptions.RemoveEmptyEntries)(0))
    32. writebyteinstream(stream, charEncoder.GetBytes(Grundheaderbeginn & "image/png" & vbNewLine & "Content-Length: " & bte.Length.ToString & Grundheaderend))
    33. writebyteinstream(stream, bte)
    34. Exit For
    35. End If
    36. Next
    37. net.Close()
    38. Catch ex As Exception
    39. Console.Write("Time : " & DateTime.Now.ToString & Environment.NewLine & ex.ToString & Environment.NewLine)
    40. End Try
    41. Loop
    42. End Sub
    43. Public Sub writebyteinstream(ByVal stream As System.Net.Sockets.NetworkStream, bytes As Byte())
    44. stream.Write(bytes, 0, bytes.Length)
    45. stream.Flush()
    46. End Sub
    47. Public Function Image2ByteArray(ByVal Bild As Bitmap, ByVal Bildformat As System.Drawing.Imaging.ImageFormat) As Byte()
    48. Dim MS As New IO.MemoryStream
    49. Bild.Save(MS, Bildformat)
    50. MS.Flush()
    51. Return MS.ToArray
    52. End Function
    53. End Module


    Firefox stellt das Bild bei mir da und ich muss sagen das ich schon schönere Exemplare gesehen habe ;)
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise