![]() |
Datei nach VirusTotal mittels Indy
Hi,
ich stehe gerade vor dem Problem, dass ich gerne eine Datei mittels Delphi an die Virustotal Webseite zwecks überprüfung dieser Datei senden würde. Bevorzugt würde ich dafür Indy einsetzen. Dumm daran ist das ich mit Indy selber bis auf die IdHTTP Komponente im Zusammenhang mit Dateidownload noch nie etwas gemacht habe. Die Suche hier hat mich auch nicht wirklich dem Ziel nahegebracht, da ich nicht genau weiß woran das Problem nun genau liegt. Folgendes zum Upload schreibt Virustotal: Zitat:
Delphi-Quellcode:
Was mich verwirrt ist folgendes Script als Beispiel auf Virustotal
procedure TForm1.Button1Click(Sender: TObject);
var stream : TIdMultipartFormDataStream; const aHost = 'http://www.virustotal.com'; aSelector = 'http://www.virustotal.com/api/scan_file.json'; begin stream := TIdMultipartFormDataStream.Create; try idHttp1.Request.ContentType := stream.RequestContentType; // sha1 filehash stream.AddFormField('resource:', '60EC5990C3DD08481F94F85636BAC486F5C19CCD'); // private api key stream.AddFormField('key:', aKey); // filename to be send including file stream.AddFile('file:Test.exe', 'C:\VirusTotal\Upload\Test.exe', ''); // set stream to beginning stream.Position := 0; // send file to virustotal result into memo1 Memo1.Lines.Text := idHttp1.Post(aHost, stream); finally stream.Free; end; end;
Code:
Wenn ich das richtig deute wird hier nicht nur die Url
>>> import postfile
>>> host = "www.virustotal.com" >>> selector = "https://www.virustotal.com/api/scan_file.json" >>> fields = [("key", "1fe0ef5feca2f84eb450bc3617f839e317b2a686af4d651a9bada77a522201b0")] >>> file_to_send = open("test.txt", "rb").read() >>> files = [("file", "test.txt", file_to_send)] >>> json = postfile.post_multipart(host, selector, fields, files) >>> print json {"scan_id": "cd1384c10baa2d5b96f397b986e2a1fc9535d2ef0e185a113fc610eca1c6fb0e-1271623480", "result": 1} ![]() ![]() Erst dachte ich gut vielleicht liegts daran das ich die ganze Sache über http anstelle von https aufrufe lt. dem Beispiel soll aber beides machbar sein. Fehler 1: Wenn ich den Code mit aHost aufrufe bekomme ich ein 'Not allowed' zurück! Nehme ich den aSelector bekomme ich 500 "Internal error" zurück. |
AW: Datei nach VirusTotal mittels Indy
Zitat:
Das erste ist keine URL, sondern ein Hostname. Dieser wird einfach in eine IP aufgelöst und beschreibt, wohin der folgende Datenverkehr gesendet wird. Da kann auch was ganz anderes stehen, zB. 74.53.201.162. Oder bei der DP kannst du ![]() Was hier als "Selektor" bezeichnet wird vereint gleich mehrere Sache auf einmal, die du in Indy wahrscheinlich getrennt behandeln musst. So ist hier angegeben, dass du via verschlüsselter Verbindung (SSL) kommunizierst. Außerdem steht drin, welche s.g. "virtuelle Hostname" via HTTP an den Webserver übergeben wird. Dazu gleich mehr. Und dahinter steht die URI, also hier "/api/scan_file.json". Der Verbindungsablauf selbst gestaltet sich dann, indem der Client eine SSL-gesicherte Verbindung zur IP hinter ![]()
Code:
(hier fehlt jetzt natürlich noch der Datei-Upload)
POST /api/scan_file.json
Host: www.virustotal.com Content-Length: 15 key=abc&foo=bar Von Indy habe ich leider keine Ahnung. Aber du kannst davon ausgehen, dass du Protokoll, reellen und virtuellen Hostname und URI trennen musst. Ich vermute, dass aHost hier wirklich ein Host und keine URL sein sollte, also konkret "www.virustotal.com". Hier solltest du dir Beispiele für ![]() ![]() Liebe Grüße, Valentin |
AW: Datei nach VirusTotal mittels Indy
Ok nun gehts für die Richtigkeit (Benutzung der Indy Komponente) keine Gewähr :mrgreen:
Lösung
Delphi-Quellcode:
Ps. Danke für die Erklärung Valle
procedure TForm1.Button1Click(Sender: TObject);
var stream : TIdMultipartFormDataStream; const aSelector = 'http://www.virustotal.com/api/scan_file.json'; begin stream := TIdMultipartFormDataStream.Create; try idHttp1.Request.ContentType := stream.RequestContentType; stream.AddFormField('key', aKey); stream.AddFile('file', 'Test.exe', 'application/octet-stream'); stream.Position := 0; Memo1.Lines.Text := idHttp1.Post(aSelector, stream); finally stream.Free; end; end; |
AW: Datei nach VirusTotal mittels Indy
Sorry, Versehen ;)
|
AW: Datei nach VirusTotal mittels Indy
Daran habe ich neulich auch mal gearbeitet :)
Eine vollständige Delphi-Klasse wollte ich für VirusTotal eh mal hochladen; siehe also ![]() |
AW: Datei nach VirusTotal mittels Indy
Zitat:
URIs sind meistens so aufgebaut: schema: // hostname : port /pfad ? parameter # anker (bei HTTP) Dabei kann <schema> ein Protokoll sein (HTTP, HTTPS, FTP, usw.) oder aber ein sonstiges Addressattribut, wie bspw. "urn", welches kennzeichnet, dass es sich um einen URN handelt. <Hostname> kann eine IP-Adresse sein (IPv4 oder IPv6), eine vollqualifizierte Domäne (auf den letzten Punkt achten: "www.delphipraxis.net.") oder auch eine relative Domäne (dort darf der Punkt wegfallen: "www.delphipraxis.net"). <Port> fällt meistens ebenfalls weg, bei HTTP ist der Standard 80. Bei FTP kann das ganze auch so aussehen: ftp:// username : password @ hostname /pfad Dort kann man die Logininformationen dadurch also schon in den URI einbauen. Gültige URIs sind auch "mailto:max.mustermann@domain.tld" oder "tel:+4999999999" Valle, das was du meinst ist einfach der Pfad im Unix-Format ;) |
AW: Datei nach VirusTotal mittels Indy
Zitat:
|
AW: Datei nach VirusTotal mittels Indy
Man könnte die 8080 fast als Standardalternativport betrachten. :lol:
|
AW: Datei nach VirusTotal mittels Indy
Zitat:
Hab' den Fehler eben korrigiert korrigieren wollen, aber leider ist es schon zu spät. :) Liebe Grüße, Valentin |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz