Sehr häufige Fehlermeldung "Vorzeitiges Dateiende"

Einen Fehler in efa2 melden

Moderatoren: nick, smg

Forumsregeln
Beim Melden eines Fehlers, gib bitte die verwendete efa2-Version und Dein Betriebssystem an, sowie eine genaue Beschreibung der Fehlersituation und ggf. der Fehlermeldungen.
Antworten
florian
Beiträge: 116
Registriert: Do 2. Dez 2010, 21:35

Sehr häufige Fehlermeldung "Vorzeitiges Dateiende"

Beitrag von florian » Fr 17. Mär 2023, 21:28

Hallo,

heute ist dieser Fehler aufgetaucht (Auszug aus logfile):
[Fatal Error] :1:1: Vorzeitiges Dateiende.
[17.03.2023 16:32:23] - efaBths - 01357 - ERROR - EXC001 - org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Vorzeitiges Dateiende. com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1239) de.nmichael.efa.data.storage.RemoteEfaServer.getRequests(RemoteEfaServer.java:199) de.nmichael.efa.data.storage.RemoteEfaServer.access$100(RemoteEfaServer.java:31) de.nmichael.efa.data.storage.RemoteEfaServer$MyHandler.handle(RemoteEfaServer.java:98) com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:79) sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:83) com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:82) sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:675) com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:79) sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:647) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) java.lang.Thread.run(Thread.java:748)
org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Vorzeitiges Dateiende.
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1239)
at de.nmichael.efa.data.storage.RemoteEfaServer.getRequests(RemoteEfaServer.java:199)
at de.nmichael.efa.data.storage.RemoteEfaServer.access$100(RemoteEfaServer.java:31)
at de.nmichael.efa.data.storage.RemoteEfaServer$MyHandler.handle(RemoteEfaServer.java:98)
at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:79)
at sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:83)
at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:82)
at sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:675)
at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:79)
at sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:647)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Diese Meldung kam dann mehrmals pro Minute, teils im Abstand von nur ein paar Sekunden. Beim ersten Auftreten war noch Version 2.3.2_01 installiert, habe auf 2.3.2_03 aktualisiert, dort dasselbe Verhalten. Auch das Einspielen der efa-Daten aus einem Backup hat nichts geändert, ebenso war ein Neustart des Rechners erfolglos. Inzwischen ist der Fehler seit ein paar Stunden nicht mehr aufgetreten.

Auf welche Datei bezieht sich die Fehlermeldung "Vorzeitiges Dateiende"? Es scheint ja eine XML-Datei zu sein. Ich komme auch wie gewohnt per remote auf den efa-Rechner.

Am Ende der Fehler-EMails steht dies:
Programm-Information:
============================================
efa.version=2.3.2_03
efa.plugin.ftp=installed
efa.plugin.help=installed
efa.plugin.jsuntimes=installed
efa.plugin.mail=installed
efa.plugin.pdf=not installed
efa.plugin.signpost=not installed
java.version=1.8.0_191
java.vendor=Oracle Corporation
java.home=/usr/lib/jvm/java-8-oracle/jre
java.vm.version=25.191-b12
java.vm.vendor=Oracle Corporation
java.vm.name=Java HotSpot(TM) Server VM
os.name=Linux
os.arch=i386
os.version=4.15.0-206-generic
Hat jemand eine Idee?

Viele Grüße
Florian

smg
Beiträge: 79
Registriert: Di 28. Mai 2019, 23:34

Re: Sehr häufige Fehlermeldung "Vorzeitiges Dateiende"

Beitrag von smg » Di 13. Jun 2023, 21:55

Hallo Florian,

Nach einem Blick in den Sourcecode meine Einschätzung:
Das EFA hat für efaRemote einen kleinen HTTP-Server inkludiert, der auf einem TCP-Port "horcht".

Dieser ist von außen erreichbar, sofern die Firewall (des Routers) den Port durchschleift auf den Rechner, auf dem EFA läuft.

Es sieht so aus, als ob irgendein Bot oder ähnliches den Port "gefunden" hat und über HTTP-Requests versucht,
irgendetwas schlaues über den HTTP-Server herauszufinden. Die Aufrufe, die an den EFA-HTTP-Server gehen,
entsprechen nicht den Vorgaben von EFA, der als Anfrage stets eine XML-Nachricht erwartet.

Da EFA recht einfach gestrickt ist, versucht es jede "Eingabe" über HTTP als XML-Nachricht aufzufassen,
was hier aber fehlschlägt - es gibt offensichtlich keine Daten.

Das erzeugt die Fehlermeldung.

Was kann man dagegen tun?
Naja, wenn der Zugriff auf EFA aus dem Internet heraus gewünscht ist, weil man selbst efaRemote zur Fernadministration nutzen möchte,
dann kann man nichts dagegen machen. Bots probieren eh einen Haufen Ports durch, da hilft es vermutlich auch nicht, den von EFAremote benutzten Port zu ändern.

Eine Alternative zu efaRemote ist die Nutzung von efaCloud.
bei EfaCloud baut stets das EFA die Verbindung in das Internet auf, und kann sich dann vollständig hinter einer Firewall (z.B. im Router) verstecken.


Gruß
Stefan

Antworten