7 Replies Latest reply on May 22, 2014 5:28 AM by hellemon

    Installationsscript von Wireshark mit WinPcap

    hellemon Rookie
      Hallo Forum,

      habe mal wieder eine Frage an euch, bezüglich eines Installationsscript.
      Habe hier in meiner Testumgebung das Wireshark mit WinPcap scriptiert.

      Auf meiner Webseite habe ich das Skript mal als Batchdatei veröffentlicht und dieses funktioniert einwandfrei.

      http://www.thurnhofer.net/wireshark-1-10-6-winpcap-4-1-3-silent-installation/

      Wenn ich das in der DSM nachbilden möchte, funktioniert die Installation des Services nicht sauber, der Service befindet sich in einen undefinierten Zustand.

      Wenn man sich mit sc query npf den Dienst ansieht, wird mir der Dienst als gestoppt angezeigt, möchte man den Dienst starten mit sc start npf bekomme ich eine Fehlermeldung, das der Dienst nicht gestartet werden kann.

      Nach dem ich den Dienst lösche und neu als CMD Kommando hinzufüge, funktioniert alles einwandfrei.

      sc create npf type= kernel start= auto error= normal binPath= System32\drivers
      pf.sys tag= no DisplayName= "NetGroup Packet Filter Driver"

      Jetzt meine Frage, gibt es in der DSM noch andere alternativen Services hinzuzufügen?

      Hier mal das DSM Script:


      Set('_RC','0')
      If CheckInstallMode(imAppRepair)
        goto Reparatur
      Else
        If CheckInstallMode(imReinstall)
         goto Reparatur
        Else
         goto Installation

      : Installation
      !Wireshark 1.10.6 x64 Installation
      Set('_RC','0')
      Set('Software','Wireshark 1.10.6 x64')
      If not Exist('%ProgramFilesDir%\WinPcap')
      MakeDir('%ProgramFilesDir%\WinPcap')/TS
      CopyFileList('%ProgramFilesDir%\WinPcap')
        .\Extern$\WinPcap\ProgramFilesx86\WinPcap\install.log
        .\Extern$\WinPcap\ProgramFilesx86\WinPcap\rpcapd.exe
        .\Extern$\WinPcap\ProgramFilesx86\WinPcap\Uninstall.exe
      EndProc/TS
      CopyFileList('%SystemRoot%\System32')
        .\Extern$\WinPcap\x64\Packet.dll
        .\Extern$\WinPcap\x64\wpcap.dll
      EndProc/x64/TS
      CopyFileList('%SystemRoot%\SysWOW64')
        .\Extern$\WinPcap\x86\Packet.dll
        .\Extern$\WinPcap\x86\pthreadVC.dll
        .\Extern$\WinPcap\x86\wpcap.dll
      EndProc/TS
      Copy('.\Extern$\WinPcap\x64\drivers
      pf.sys','%SystemRoot%\System32\drivers')/x64/TS
      Copy('.\Extern$\WinPcap\x86\drivers
      pf.sys','%SystemRoot%\SysWOW64\drivers')/TS
      RunAs('.\Extern$\Wireshark-win64-1.10.6.exe','/NCRC /S /desktopicon=no  /quicklaunchicon=no','','','5',raUseSisAccount+WaitForExecution+Failed)/TS
      InstallService('npf','NetGroup Packet Filter Driver','C:\Windows\System32\drivers
      pf.sys','||','','k2EE817EF5E847F3388G0A','1,0',isStartService+issAutomatic)/TS
      RegLoad('.\Standard.nir')
      If %_RC%='0'
      ExitProcEx(Done,'Installation von %Software% war erfolgreich')
      Else
      ExitProcEx(Failed,'Installation von %Software% wurde mit Fehlercode %_RC% beendet.')
      !
      : Reparatur
      !Wireshark 1.10.6 x64 Reparatur
      Set('_RC','0')
      Set('Software','Wireshark 1.10.6 x64')
      RunAs('%ProgramFilesDir64%\Wireshark\uninstall.exe','/S','','','',raUseSisAccount+Failed)/TS
      DeleteFileList
      %SystemRoot%\System32\Packet.dll
      %SystemRoot%\System32\wpcap.dll
      EndProc/F/x64/TS
      DeleteFileList
      %SystemRoot%\SysWOW64\Packet.dll
      %SystemRoot%\SysWOW64\pthreadVC.dll
      %SystemRoot%\SysWOW64\wpcap.dll
      EndProc/F/TS
      Delete('%SystemRoot%\System32\drivers
      pf.sys')/F/x64/TS
      Delete('%SystemRoot%\SysWOW64\drivers
      pf.sys')/F/TS
      RemoveDir('%ProgramFilesDir%\WinPcap')/TS
      UninstallService('npf',)/TS
      !
      Set('Software','Wireshark 1.10.6 x64')
      If not Exist('%ProgramFilesDir%\WinPcap')
      MakeDir('%ProgramFilesDir%\WinPcap')/TS
      CopyFileList('%ProgramFilesDir%\WinPcap')
        .\Extern$\WinPcap\ProgramFilesx86\WinPcap\install.log
        .\Extern$\WinPcap\ProgramFilesx86\WinPcap\rpcapd.exe
        .\Extern$\WinPcap\ProgramFilesx86\WinPcap\Uninstall.exe
      EndProc/TS
      CopyFileList('%SystemRoot%\System32')
        .\Extern$\WinPcap\x64\Packet.dll
        .\Extern$\WinPcap\x64\wpcap.dll
      EndProc/x64/TS
      CopyFileList('%SystemRoot%\SysWOW64')
        .\Extern$\WinPcap\x86\Packet.dll
        .\Extern$\WinPcap\x86\pthreadVC.dll
        .\Extern$\WinPcap\x86\wpcap.dll
      EndProc/TS
      Copy('.\Extern$\WinPcap\x64\drivers
      pf.sys','%SystemRoot%\System32\drivers')/x64/TS
      Copy('.\Extern$\WinPcap\x86\drivers
      pf.sys','%SystemRoot%\SysWOW64\drivers')/TS
      RunAs('.\Extern$\Wireshark-win64-1.10.6.exe','/NCRC /S /desktopicon=no  /quicklaunchicon=no','','','5',raUseSisAccount+WaitForExecution+Failed)/TS
      InstallService('npf','NetGroup Packet Filter Driver','C:\Windows\System32\drivers
      pf.sys','||','','k2EE817EF5E847F3388G0A','1,0',isStartService+issAutomatic)/TS
      If %_RC%='0'
      ExitProcEx(Done,'Reparatur von %Software% war erfolgreich')
      Else
      ExitProcEx(Failed,'Reparatur von %Software% wurde mit Fehlercode %_RC% beendet.')
      !
      : $BeginUninstallScript
      !Wireshark 1.10.6 x64 Deinstallation
      Set('_RC','0')
      Set('Software','Wireshark 1.10.6 x64')
      RunAs('%ProgramFilesDir64%\Wireshark\uninstall.exe','/S','','','',raUseSisAccount+Failed)/TS
      DeleteFileList
      %SystemRoot%\System32\Packet.dll
      %SystemRoot%\System32\wpcap.dll
      EndProc/F/x64/TS
      DeleteFileList
      %SystemRoot%\SysWOW64\Packet.dll
      %SystemRoot%\SysWOW64\pthreadVC.dll
      %SystemRoot%\SysWOW64\wpcap.dll
      EndProc/F/TS
      Delete('%SystemRoot%\System32\drivers
      pf.sys')/F/x64/TS
      Delete('%SystemRoot%\SysWOW64\drivers
      pf.sys')/F/TS
      RemoveDir('%ProgramFilesDir%\WinPcap')/TS
      UninstallService('npf',)/TS
      If %_RC%='0'
      ExitProcEx(Done,'Deinstallation von %Software%  war erfolgreich')
      Else
      ExitProcEx(Failed,'Deinstallation von %Software% wurde mit Fehlercode %_RC% beendet.')


      Vorab schon einmal vielen Dank für eure Antworten.

      Gruß Helmut
        • 1. Re: Installationsscript von Wireshark mit WinPcap
          _Mel_ Master
          mein erster verdacht wäre ein problem mit system32/syswow64

          C:\Windows\System32\drivers
          pf.sys
          ist für einen 32 bit prozess ja C:\Windows\SysWow64\drivers
          pf.sys
          und der installer ist ein 32 bit prozess...

          schau mal in den eigenschaften des services was da als pfad drin steht
          • 2. Re: Installationsscript von Wireshark mit WinPcap
            hellemon Rookie
            Hallo Mel,

            denke das ich den Fehler gefunden habe, das DSM Skript kopiert die Daten nicht in die passenden Verzeichnisse.

            Das MakeDir macht er noch, aber alle Daten fehlen sowohl im

            WinPcap
            Windows\System32
            Windows\SysWOW64
            Windows\System32\drivers
            Windows\SysWOW64\drivers

            Weiß zwar nicht wirklich was jetzt an dem CopyFileList falsch sein soll, aber ich probier noch ein bisschen rum.


            MakeDir('%ProgramFilesDir%\WinPcap')/TS
            CopyFileList('%ProgramFilesDir%\WinPcap')
              .\Extern$\WinPcap\ProgramFilesx86\WinPcap\install.log
              .\Extern$\WinPcap\ProgramFilesx86\WinPcap\rpcapd.exe
              .\Extern$\WinPcap\ProgramFilesx86\WinPcap\Uninstall.exe
            EndProc/TS
            CopyFileList('%SystemRoot%\System32')
              .\Extern$\WinPcap\x64\Packet.dll
              .\Extern$\WinPcap\x64\wpcap.dll
            EndProc/x64/TS
            CopyFileList('%SystemRoot%\SysWOW64')
              .\Extern$\WinPcap\x86\Packet.dll
              .\Extern$\WinPcap\x86\pthreadVC.dll
              .\Extern$\WinPcap\x86\wpcap.dll
            EndProc/TS
            Copy('.\Extern$\WinPcap\x64\drivers
            pf.sys','%SystemRoot%\System32\drivers')/x64/TS
            Copy('.\Extern$\WinPcap\x86\drivers
            pf.sys','%SystemRoot%\SysWOW64\drivers')/TS


            Der Service wird von DSM richtig angelegt

            C:\Windows\system32>sc qc npf
            [SC] QueryServiceConfig ERFOLG

            SERVICE_NAME: npf
            TYPE               : 1  KERNEL_DRIVER
            START_TYPE         : 2   AUTO_START
            ERROR_CONTROL      : 1   NORMAL
            BINARY_PATH_NAME   : \??\C:\Windows\System32\drivers
            pf.sys
            LOAD_ORDER_GROUP   :
            TAG                : 0
            DISPLAY_NAME       : NetGroup Packet Filter Driver
            DEPENDENCIES       :
            SERVICE_START_NAME :


            Viele Grüße
            Helmut

            EDIT: komisch ist das DSM mal kopiert und mal nicht, bei einen anderen PC sind die Daten da, aber der Dienst lässt sich nicht starten, auch nach einen Neustart von dem PC steht der Dienst auf gestoppt - Komisch das, muss man nicht verstehen oder. :-)
            • 3. Re: Installationsscript von Wireshark mit WinPcap
              Klaus Salger Expert
              Hallo Helmut,

              so wie es aussieht hängen alle Kopieraktionen davon ab, ob das WinPcap-Verzeichnis existiert.
              Wenn das schon da ist wird nichts kopiert.

              Ansonsten sehe ich auch Probleme mit der Behandlung von x64.
              Der Installer läuft als x86-Prozess. Wenn man auf x64-Verzeichnisse zugreifen möchte kann man den entsprechenden Befehl entsprechend flaggen.

              Empfehlen würde ich Dir aber vor allem einen Blick in die Installationslogs.
              In diesem Fall und in allen anderen Fällen auch.
              Meistens sieht man im Log, wo das Problem ist und erspart sich langes suchen und try and error.

              Bei der Installation am besten das Logging auf Debug und danach das NIAI- bzw. NISRV-Log analysieren.
              Jede Komponente schreibt ihr eigenes Log, d.h. es kommt darauf an wie die Installation gestartet wurde. Man kann sich auch immer daran orientieren, welche Log das neueste ist.

              Ciao
                Klaus
              • 4. Re: Installationsscript von Wireshark mit WinPcap
                hellemon Rookie
                Hallo Klaus,

                auch dir Danke für deinen Tipp, habe jetzt endlich das Problem gefunden!


                If not Exist('%ProgramFilesDir%\WinPcap')
                MakeDir('%ProgramFilesDir%\WinPcap')/TS
                CopyFileList('%ProgramFilesDir%\WinPcap')
                  .\Extern$\WinPcap\ProgramFilesx86\WinPcap\install.log
                  .\Extern$\WinPcap\ProgramFilesx86\WinPcap\rpcapd.exe
                  .\Extern$\WinPcap\ProgramFilesx86\WinPcap\Uninstall.exe
                EndProc/TS
                CopyFileList('%SystemRoot%\System32')
                  .\Extern$\WinPcap\x64\Packet.dll
                  .\Extern$\WinPcap\x64\wpcap.dll
                EndProc/x64/TS
                CopyFileList('%SystemRoot%\SysWOW64')
                  .\Extern$\WinPcap\x86\Packet.dll
                  .\Extern$\WinPcap\x86\pthreadVC.dll
                  .\Extern$\WinPcap\x86\wpcap.dll
                EndProc/TS
                Copy('.\Extern$\WinPcap\x64\drivers
                pf.sys','%SystemRoot%\System32\drivers')/x64/TS
                Copy('.\Extern$\WinPcap\x86\drivers
                pf.sys','%SystemRoot%\SysWOW64\drivers')/TS


                Das ganze hätte von Anfang an funktionieren sollen, nur der Editor von DSM macht sehr komische Sachen oder bin es doch ich. :-)

                Bei der Abfage, hey Ordner wenn du nicht da bist, dann leg mich an, steht das IF not Exist ganz am Rand und der Befehl MakeDir ist ein bisschen eingerückt.


                If not Exist('%ProgramFilesDir%\WinPcap')
                MakeDir('%ProgramFilesDir%\WinPcap')/TS


                Das CopyFileList war unterhalb von MakeDir ebenfalls eingerückt und somit hat er die Befehle nicht ausgeführt. Nach dem ich die ganzen CopyFileList und Copy Befehle wieder ausgerückt habe, führt DSM die Befehle aus.

                Werde später noch das fertige Skript hier posten, wenn ich es durchgetestet habe.

                Viele Grüße
                Helmut
                • 5. Re: Installationsscript von Wireshark mit WinPcap
                  Ludwig Apprentice
                  Hallo Helmut,

                  eigentlich kannst du das "If not exist ..." und Create Ordner auch weglassen. Beim Kopieren von Dateien erstellt der CopyFileList die notwendigen Directories automatisch. Ich benutze MakeDir nur um ein leeres Verzeichnis zu erstellen.

                  Das mit dem eingerückten Befehl sollte eigentlich auch korrekt sein. So formatiert DSM eine IF-Then-Else Konstruktion, alles was zum If gehört wird eingerückt.

                  Grüsse
                  Ludwig
                  • 6. Re: Installationsscript von Wireshark mit WinPcap
                    NicoS1 Master
                    Hallo Helmut,

                    ohne jetzt die ganzen Beiträge gelesen zu habe. So wie ich das sehe, baust du WinPCap auseinander und installierst es dann manuell.

                    Ich habe es mir einfach gemacht:
                    - Lade die "NMAP" runter.
                    - Entpacke die Setup Datei
                    - Dort findest du einen WinPCap der sich ganz einfach mit dem /S Schalter installieren lässt.

                    Mit diesem WinPCap habe ich mein WireShark ganz einfach paketiert. Sowohl 64 als auch 32 Bit
                    • 7. Re: Installationsscript von Wireshark mit WinPcap
                      hellemon Rookie
                      Hallo Ludwig, Hallo Nico,

                      danke euch für eure Antworten.

                      @Ludwig, das mit dem weglassen von dem "If not exist ..." werde ich testen, spare ich mir das Konstrukt. :-)

                      @Nico, danke für den Tipp, Installation ist mir eh viel lieber, als irgendwelche Dateien hin- und her kopieren.

                      Du meinst hoffentlich folgende exe Datei --> http:/
                      map.org/dist
                      map-6.46-setup.exe

                      Weil in der Zip Datei --> http:/
                      map.org/dist
                      map-6.46-win32.zip
                      ist ebenfalls eine "winpcap-nmap-4.13.exe" enthalten.

                      Jedenfalls werde ich das heute oder morgen nochmal mit euren Tipps überarbeiten.

                      Viele Grüße
                      Helmut