dissect.target 3.17.dev26__tar.gz → 3.17.dev27__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {dissect.target-3.17.dev26/dissect.target.egg-info → dissect_target-3.17.dev27}/PKG-INFO +1 -1
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/helpers/network_managers.py +66 -49
- dissect_target-3.17.dev27/dissect/target/plugins/os/unix/log/messages.py +118 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27/dissect.target.egg-info}/PKG-INFO +1 -1
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/log/test_messages.py +23 -4
- dissect_target-3.17.dev27/tests/plugins/os/unix/test_ips.py +159 -0
- dissect.target-3.17.dev26/dissect/target/plugins/os/unix/log/messages.py +0 -73
- dissect.target-3.17.dev26/tests/plugins/os/unix/test_ips.py +0 -100
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/COPYRIGHT +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/LICENSE +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/MANIFEST.in +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/README.md +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/container.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/containers/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/containers/asdf.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/containers/ewf.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/containers/fortifw.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/containers/hdd.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/containers/hds.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/containers/qcow2.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/containers/raw.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/containers/split.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/containers/vdi.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/containers/vhd.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/containers/vhdx.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/containers/vmdk.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/data/autocompletion/target_bash_completion.sh +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/exceptions.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/filesystem.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/filesystems/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/filesystems/ad1.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/filesystems/btrfs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/filesystems/cb.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/filesystems/config.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/filesystems/cpio.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/filesystems/dir.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/filesystems/exfat.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/filesystems/extfs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/filesystems/fat.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/filesystems/ffs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/filesystems/itunes.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/filesystems/jffs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/filesystems/ntfs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/filesystems/smb.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/filesystems/squashfs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/filesystems/tar.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/filesystems/vmfs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/filesystems/vmtar.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/filesystems/xfs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/filesystems/zip.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/helpers/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/helpers/cache.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/helpers/compat/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/helpers/compat/path_310.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/helpers/compat/path_311.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/helpers/compat/path_312.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/helpers/compat/path_39.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/helpers/compat/path_common.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/helpers/config.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/helpers/configutil.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/helpers/cyber.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/helpers/data/windowsZones.xml +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/helpers/descriptor_extensions.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/helpers/docs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/helpers/fsutil.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/helpers/hashutil.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/helpers/keychain.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/helpers/lazy.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/helpers/loaderutil.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/helpers/localeutil.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/helpers/mount.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/helpers/mui.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/helpers/polypath.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/helpers/protobuf.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/helpers/record.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/helpers/record_modifier.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/helpers/regutil.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/helpers/shell_folder_ids.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/helpers/ssh.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/helpers/targetd.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/helpers/utils.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loader.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/ad1.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/asdf.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/cb.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/cyber.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/dir.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/hyperv.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/itunes.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/kape.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/local.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/log.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/mqtt.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/multiraw.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/ova.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/ovf.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/phobos.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/profile.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/pvm.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/pvs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/raw.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/remote.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/res.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/smb.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/tanium.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/tar.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/target.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/targetd.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/utm.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/vb.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/vbox.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/velociraptor.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/vma.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/vmwarevm.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/vmx.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/loaders/xva.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugin.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/av/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/av/mcafee.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/av/sophos.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/av/symantec.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/av/trendmicro.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/browser/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/browser/brave.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/browser/browser.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/browser/chrome.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/browser/chromium.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/browser/edge.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/browser/firefox.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/browser/iexplore.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/container/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/container/docker.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/remoteaccess/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/remoteaccess/anydesk.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/remoteaccess/remoteaccess.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/remoteaccess/teamviewer.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/shell/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/shell/powershell.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/ssh/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/ssh/openssh.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/ssh/opensshd.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/ssh/putty.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/ssh/ssh.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/vpn/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/vpn/openvpn.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/vpn/wireguard.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/webhosting/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/webhosting/cpanel.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/webserver/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/webserver/apache.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/webserver/caddy.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/webserver/citrix.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/webserver/iis.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/webserver/nginx.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/apps/webserver/webserver.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/child/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/child/esxi.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/child/hyperv.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/child/virtuozzo.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/child/vmware_workstation.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/child/wsl.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/filesystem/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/filesystem/acquire_handles.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/filesystem/acquire_hash.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/filesystem/icat.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/filesystem/ntfs/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/filesystem/ntfs/mft.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/filesystem/ntfs/mft_timeline.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/filesystem/ntfs/usnjrnl.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/filesystem/ntfs/utils.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/filesystem/resolver.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/filesystem/unix/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/filesystem/unix/capability.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/filesystem/unix/suid.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/filesystem/walkfs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/filesystem/yara.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/general/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/general/config.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/general/default.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/general/example.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/general/loaders.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/general/osinfo.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/general/plugins.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/general/scrape.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/general/users.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/_os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/bsd/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/bsd/_os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/bsd/citrix/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/bsd/citrix/_os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/bsd/citrix/history.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/bsd/freebsd/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/bsd/freebsd/_os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/bsd/ios/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/bsd/ios/_os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/bsd/openbsd/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/bsd/openbsd/_os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/bsd/osx/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/bsd/osx/_os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/bsd/osx/user.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/cronjobs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/datetime.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/esxi/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/esxi/_os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/etc.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/generic.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/history.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/linux/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/linux/_os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/linux/android/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/linux/android/_os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/linux/cmdline.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/linux/debian/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/linux/debian/_os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/linux/debian/apt.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/linux/debian/dpkg.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/linux/debian/vyos/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/linux/debian/vyos/_os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/linux/environ.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/linux/fortios/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/linux/fortios/_keys.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/linux/fortios/_os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/linux/fortios/generic.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/linux/fortios/locale.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/linux/iptables.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/linux/modules.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/linux/netstat.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/linux/proc.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/linux/processes.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/linux/redhat/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/linux/redhat/_os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/linux/redhat/yum.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/linux/services.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/linux/sockets.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/linux/suse/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/linux/suse/_os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/linux/suse/zypper.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/locale.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/locate/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/locate/gnulocate.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/locate/locate.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/locate/mlocate.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/locate/plocate.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/log/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/log/atop.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/log/audit.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/log/auth.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/log/journal.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/log/lastlog.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/log/utmp.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/packagemanager.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/unix/shadow.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/_os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/activitiescache.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/adpolicy.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/amcache.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/catroot.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/cim.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/clfs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/datetime.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/defender.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/dpapi/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/dpapi/blob.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/dpapi/crypto.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/dpapi/dpapi.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/dpapi/master_key.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/env.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/exchange/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/exchange/exchange.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/generic.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/lnk.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/locale.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/log/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/log/amcache.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/log/etl.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/log/evt.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/log/evtx.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/log/pfro.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/log/schedlgu.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/notifications.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/prefetch.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/recyclebin.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/regf/7zip.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/regf/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/regf/appxdebugkeys.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/regf/auditpol.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/regf/bam.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/regf/cit.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/regf/clsid.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/regf/firewall.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/regf/mru.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/regf/muicache.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/regf/nethist.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/regf/recentfilecache.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/regf/regf.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/regf/runkeys.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/regf/shellbags.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/regf/shimcache.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/regf/trusteddocs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/regf/usb.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/regf/userassist.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/registry.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/sam.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/services.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/sru.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/startupinfo.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/syscache.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/task_helpers/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/task_helpers/tasks_job.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/task_helpers/tasks_records.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/task_helpers/tasks_xml.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/tasks.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/thumbcache.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/ual.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/plugins/os/windows/wer.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/report.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/target.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/tools/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/tools/build_pluginlist.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/tools/dd.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/tools/dump/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/tools/dump/run.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/tools/dump/state.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/tools/dump/utils.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/tools/fs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/tools/info.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/tools/logging.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/tools/mount.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/tools/query.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/tools/reg.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/tools/shell.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/tools/utils.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/volume.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/volumes/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/volumes/bde.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/volumes/ddf.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/volumes/disk.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/volumes/luks.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/volumes/lvm.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/volumes/md.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/volumes/vmfs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect.target.egg-info/SOURCES.txt +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect.target.egg-info/dependency_links.txt +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect.target.egg-info/entry_points.txt +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect.target.egg-info/requires.txt +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect.target.egg-info/top_level.txt +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/pyproject.toml +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/setup.cfg +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/_docs/Makefile +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/_docs/conf.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/_docs/index.rst +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/_utils.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/conftest.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/containers/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/containers/test_fortifw.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/containers/test_split.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/filesystems/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/filesystems/test_cb.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/filesystems/test_config.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/filesystems/test_cpio.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/filesystems/test_dir.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/filesystems/test_exfat.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/filesystems/test_fat.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/filesystems/test_ntfs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/filesystems/test_smb.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/filesystems/test_tar.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/filesystems/test_vmtar.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/filesystems/test_zip.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/helpers/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/helpers/test_cache.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/helpers/test_config.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/helpers/test_configutil.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/helpers/test_docs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/helpers/test_fsutil.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/helpers/test_hashutil.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/helpers/test_keychain.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/helpers/test_loaderutil.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/helpers/test_localeutil.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/helpers/test_modifier.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/helpers/test_protobuf.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/helpers/test_record.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/helpers/test_regutil.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/helpers/test_utils.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/loaders/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/loaders/test_asdf.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/loaders/test_cb.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/loaders/test_dir.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/loaders/test_hyperv.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/loaders/test_kape.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/loaders/test_local.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/loaders/test_log.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/loaders/test_mqtt.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/loaders/test_multiraw.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/loaders/test_ova.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/loaders/test_ovf.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/loaders/test_phobos.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/loaders/test_pvm.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/loaders/test_pvs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/loaders/test_remote.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/loaders/test_smb.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/loaders/test_tanium.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/loaders/test_tar.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/loaders/test_utm.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/loaders/test_vbox.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/loaders/test_velociraptor.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/loaders/test_vmwarevm.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/av/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/av/test_mcafee.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/av/test_sophos.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/av/test_symantec.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/av/test_trendmicro.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/browser/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/browser/test_brave.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/browser/test_chrome.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/browser/test_chromium.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/browser/test_edge.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/browser/test_firefox.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/browser/test_iexplore.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/container/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/container/test_docker.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/remoteaccess/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/remoteaccess/test_anydesk.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/remoteaccess/test_teamviewer.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/shell/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/shell/test_powershell.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/ssh/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/ssh/test_openssh.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/ssh/test_opensshd.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/ssh/test_putty.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/vpn/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/vpn/test_openvpn.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/vpn/test_wireguard.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/webhosting/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/webhosting/test_cpanel.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/webserver/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/webserver/test_apache.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/webserver/test_caddy.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/webserver/test_citrix.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/webserver/test_iis.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/webserver/test_nginx.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/apps/webserver/test_webserver.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/child/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/child/test_hyperv.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/child/test_virtuozzo.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/child/test_wsl.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/filesystem/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/filesystem/ntfs/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/filesystem/ntfs/test_mft.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/filesystem/ntfs/test_usnjrnl.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/filesystem/test_acquire_handles.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/filesystem/test_acquire_hash.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/filesystem/test_icat.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/filesystem/test_resolver.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/filesystem/test_walkfs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/filesystem/test_yara.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/filesystem/unix/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/filesystem/unix/test_capability.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/filesystem/unix/test_suid.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/general/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/general/test_config.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/general/test_default.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/general/test_plugins.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/general/test_scrape.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/general/test_users.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/bsd/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/bsd/citrix/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/bsd/citrix/test__os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/bsd/citrix/test_history.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/bsd/osx/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/bsd/osx/test__os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/bsd/osx/test_user.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/esxi/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/esxi/test__os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/linux/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/linux/android/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/linux/android/test__os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/linux/debian/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/linux/debian/test_apt.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/linux/debian/test_dpkg.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/linux/fortios/test_keys.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/linux/redhat/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/linux/redhat/test_yum.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/linux/suse/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/linux/suse/test_zypper.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/linux/test_cmdline.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/linux/test_environ.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/linux/test_iptables.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/linux/test_modules.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/linux/test_netstat.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/linux/test_proc.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/linux/test_processes.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/linux/test_services.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/linux/test_sockets.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/locate/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/locate/test_gnulocate.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/locate/test_mlocate.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/locate/test_plocate.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/log/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/log/test_atop.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/log/test_audit.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/log/test_auth.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/log/test_lastlog.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/log/test_utmp.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/test__os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/test_generic.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/test_history.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/test_journal.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/test_locale.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/test_packagemanager.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/test_shadow.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/test_users.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/test_version.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/log/test_etl.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/log/test_evt.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/log/test_evtx.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/log/test_schedlgu.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/regf/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/regf/test_appxdebugkeys.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/regf/test_cit.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/regf/test_clsid.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/regf/test_muicache.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/regf/test_trusteddocs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/regf/test_userassist.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/test__os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/test_adpolicy.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/test_amcache.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/test_catroot.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/test_clfs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/test_datetime.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/test_defender.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/test_dpapi.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/test_env.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/test_generic.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/test_lnk.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/test_locale.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/test_mru.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/test_notifications.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/test_prefetch.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/test_recyclebin.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/test_registry.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/test_sam.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/test_shimcache.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/test_sru.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/test_syscache.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/test_tasks.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/test_thumbcache.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/test_ual.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/windows/test_wer.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/test_container.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/test_filesystem.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/test_plugin.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/test_registration.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/test_report.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/test_target.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/test_volume.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/tools/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/tools/test_dump.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/tools/test_fs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/tools/test_mount.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/tools/test_query.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/tools/test_reg.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/tools/test_shell.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/tools/test_utils.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/volumes/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/volumes/test_bde.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/volumes/test_md.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tox.ini +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: dissect.target
|
3
|
-
Version: 3.17.
|
3
|
+
Version: 3.17.dev27
|
4
4
|
Summary: This module ties all other Dissect modules together, it provides a programming API and command line tools which allow easy access to various data sources inside disk images or file collections (a.k.a. targets)
|
5
5
|
Author-email: Dissect Team <dissect@fox-it.com>
|
6
6
|
License: Affero General Public License v3
|
{dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/dissect/target/helpers/network_managers.py
RENAMED
@@ -5,6 +5,7 @@ import re
|
|
5
5
|
from collections import defaultdict
|
6
6
|
from configparser import ConfigParser, MissingSectionHeaderError
|
7
7
|
from io import StringIO
|
8
|
+
from itertools import chain
|
8
9
|
from re import compile, sub
|
9
10
|
from typing import Any, Callable, Iterable, Match, Optional
|
10
11
|
|
@@ -299,7 +300,8 @@ class Parser:
|
|
299
300
|
return
|
300
301
|
|
301
302
|
if section:
|
302
|
-
|
303
|
+
# account for values of sections which are None
|
304
|
+
config = config.get(section, {}) or {}
|
303
305
|
|
304
306
|
for key, value in config.items():
|
305
307
|
if key == option:
|
@@ -508,7 +510,7 @@ class LinuxNetworkManager:
|
|
508
510
|
|
509
511
|
|
510
512
|
def parse_unix_dhcp_log_messages(target) -> list[str]:
|
511
|
-
"""Parse local syslog and cloud init
|
513
|
+
"""Parse local syslog, journal and cloud init-log files for DHCP lease IPs.
|
512
514
|
|
513
515
|
Args:
|
514
516
|
target: Target to discover and obtain network information from.
|
@@ -516,53 +518,68 @@ def parse_unix_dhcp_log_messages(target) -> list[str]:
|
|
516
518
|
Returns:
|
517
519
|
List of DHCP ip addresses.
|
518
520
|
"""
|
519
|
-
ips =
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
|
548
|
-
|
549
|
-
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
|
565
|
-
|
521
|
+
ips = set()
|
522
|
+
messages = set()
|
523
|
+
|
524
|
+
for log_func in ["messages", "journal"]:
|
525
|
+
try:
|
526
|
+
messages = chain(messages, getattr(target, log_func)())
|
527
|
+
except PluginError:
|
528
|
+
target.log.debug(f"Could not search for DHCP leases in {log_func} files.")
|
529
|
+
|
530
|
+
if not messages:
|
531
|
+
target.log.warning(f"Could not search for DHCP leases using {log_func}: No log entries found.")
|
532
|
+
|
533
|
+
for record in messages:
|
534
|
+
line = record.message
|
535
|
+
|
536
|
+
# Ubuntu cloud-init
|
537
|
+
if "Received dhcp lease on" in line:
|
538
|
+
interface, ip, netmask = re.search(r"Received dhcp lease on (\w{0,}) for (\S+)\/(\S+)", line).groups()
|
539
|
+
ips.add(ip)
|
540
|
+
continue
|
541
|
+
|
542
|
+
# Ubuntu DHCP
|
543
|
+
if ("DHCPv4" in line or "DHCPv6" in line) and " address " in line and " via " in line:
|
544
|
+
ip = line.split(" address ")[1].split(" via ")[0].strip().split("/")[0]
|
545
|
+
ips.add(ip)
|
546
|
+
continue
|
547
|
+
|
548
|
+
# Ubuntu DHCP NetworkManager
|
549
|
+
if "option ip_address" in line and ("dhcp4" in line or "dhcp6" in line) and "=> '" in line:
|
550
|
+
ip = line.split("=> '")[1].replace("'", "").strip()
|
551
|
+
ips.add(ip)
|
552
|
+
continue
|
553
|
+
|
554
|
+
# Debian and CentOS dhclient
|
555
|
+
if hasattr(record, "daemon") and record.daemon == "dhclient" and "bound to" in line:
|
556
|
+
ip = line.split("bound to")[1].split(" ")[1].strip()
|
557
|
+
ips.add(ip)
|
558
|
+
continue
|
559
|
+
|
560
|
+
# CentOS DHCP and general NetworkManager
|
561
|
+
if " address " in line and ("dhcp4" in line or "dhcp6" in line):
|
562
|
+
ip = line.split(" address ")[1].strip()
|
563
|
+
ips.add(ip)
|
564
|
+
continue
|
565
|
+
|
566
|
+
# Ubuntu/Debian DHCP networkd (Journal)
|
567
|
+
if (
|
568
|
+
hasattr(record, "code_func")
|
569
|
+
and record.code_func == "dhcp_lease_acquired"
|
570
|
+
and " address " in line
|
571
|
+
and " via " in line
|
572
|
+
):
|
573
|
+
interface, ip, netmask, gateway = re.search(
|
574
|
+
r"^(\S+): DHCPv[4|6] address (\S+)\/(\S+) via (\S+)", line
|
575
|
+
).groups()
|
576
|
+
ips.add(ip)
|
577
|
+
continue
|
578
|
+
|
579
|
+
# Journals and syslogs can be large and slow to iterate,
|
580
|
+
# so we stop if we have some results and have reached the journal plugin.
|
581
|
+
if len(ips) >= 2 and record._desc.name == "linux/log/journal":
|
582
|
+
break
|
566
583
|
|
567
584
|
return ips
|
568
585
|
|
@@ -0,0 +1,118 @@
|
|
1
|
+
import re
|
2
|
+
from pathlib import Path
|
3
|
+
from typing import Iterator
|
4
|
+
|
5
|
+
from dissect.target import Target
|
6
|
+
from dissect.target.exceptions import UnsupportedPluginError
|
7
|
+
from dissect.target.helpers.record import TargetRecordDescriptor
|
8
|
+
from dissect.target.helpers.utils import year_rollover_helper
|
9
|
+
from dissect.target.plugin import Plugin, export
|
10
|
+
|
11
|
+
MessagesRecord = TargetRecordDescriptor(
|
12
|
+
"linux/log/messages",
|
13
|
+
[
|
14
|
+
("datetime", "ts"),
|
15
|
+
("string", "daemon"),
|
16
|
+
("varint", "pid"),
|
17
|
+
("string", "message"),
|
18
|
+
("path", "source"),
|
19
|
+
],
|
20
|
+
)
|
21
|
+
|
22
|
+
DEFAULT_TS_LOG_FORMAT = "%b %d %H:%M:%S"
|
23
|
+
RE_TS = re.compile(r"(\w+\s{1,2}\d+\s\d{2}:\d{2}:\d{2})")
|
24
|
+
RE_DAEMON = re.compile(r"^[^:]+:\d+:\d+[^\[\]:]+\s([^\[:]+)[\[|:]{1}")
|
25
|
+
RE_PID = re.compile(r"\w\[(\d+)\]")
|
26
|
+
RE_MSG = re.compile(r"[^:]+:\d+:\d+[^:]+:\s(.*)$")
|
27
|
+
RE_CLOUD_INIT_LINE = re.compile(r"(?P<ts>.*) - (?P<daemon>.*)\[(?P<log_level>\w+)\]\: (?P<message>.*)$")
|
28
|
+
|
29
|
+
|
30
|
+
class MessagesPlugin(Plugin):
|
31
|
+
def __init__(self, target: Target):
|
32
|
+
super().__init__(target)
|
33
|
+
self.log_files = set(self._find_log_files())
|
34
|
+
|
35
|
+
def _find_log_files(self) -> Iterator[Path]:
|
36
|
+
log_dirs = ["/var/log/", "/var/log/installer/"]
|
37
|
+
file_globs = ["syslog*", "messages*", "cloud-init.log*"]
|
38
|
+
for log_dir in log_dirs:
|
39
|
+
for glob in file_globs:
|
40
|
+
yield from self.target.fs.path(log_dir).glob(glob)
|
41
|
+
|
42
|
+
def check_compatible(self) -> None:
|
43
|
+
if not self.log_files:
|
44
|
+
raise UnsupportedPluginError("No log files found")
|
45
|
+
|
46
|
+
@export(record=MessagesRecord)
|
47
|
+
def syslog(self) -> Iterator[MessagesRecord]:
|
48
|
+
"""Return contents of /var/log/messages*, /var/log/syslog* and cloud-init logs.
|
49
|
+
|
50
|
+
See ``messages`` for more information.
|
51
|
+
"""
|
52
|
+
return self.messages()
|
53
|
+
|
54
|
+
@export(record=MessagesRecord)
|
55
|
+
def messages(self) -> Iterator[MessagesRecord]:
|
56
|
+
"""Return contents of /var/log/messages*, /var/log/syslog* and cloud-init logs.
|
57
|
+
|
58
|
+
Note: due to year rollover detection, the contents of the files are returned in reverse.
|
59
|
+
|
60
|
+
The messages log file holds information about a variety of events such as the system error messages, system
|
61
|
+
startups and shutdowns, change in the network configuration, etc. Aims to store valuable, non-debug and
|
62
|
+
non-critical messages. This log should be considered the "general system activity" log.
|
63
|
+
|
64
|
+
References:
|
65
|
+
- https://geek-university.com/linux/var-log-messages-file/
|
66
|
+
- https://www.geeksforgeeks.org/file-timestamps-mtime-ctime-and-atime-in-linux/
|
67
|
+
- https://cloudinit.readthedocs.io/en/latest/development/logging.html#logging-command-output
|
68
|
+
"""
|
69
|
+
|
70
|
+
tzinfo = self.target.datetime.tzinfo
|
71
|
+
|
72
|
+
for log_file in self.log_files:
|
73
|
+
if "cloud-init" in log_file.name:
|
74
|
+
yield from self._parse_cloud_init_log(log_file)
|
75
|
+
continue
|
76
|
+
|
77
|
+
for ts, line in year_rollover_helper(log_file, RE_TS, DEFAULT_TS_LOG_FORMAT, tzinfo):
|
78
|
+
daemon = dict(enumerate(RE_DAEMON.findall(line))).get(0)
|
79
|
+
pid = dict(enumerate(RE_PID.findall(line))).get(0)
|
80
|
+
message = dict(enumerate(RE_MSG.findall(line))).get(0, line)
|
81
|
+
|
82
|
+
yield MessagesRecord(
|
83
|
+
ts=ts,
|
84
|
+
daemon=daemon,
|
85
|
+
pid=pid,
|
86
|
+
message=message,
|
87
|
+
source=log_file,
|
88
|
+
_target=self.target,
|
89
|
+
)
|
90
|
+
|
91
|
+
def _parse_cloud_init_log(self, log_file: Path) -> Iterator[MessagesRecord]:
|
92
|
+
"""Parse a cloud-init.log file.
|
93
|
+
|
94
|
+
Lines are structured in the following format:
|
95
|
+
``YYYY-MM-DD HH:MM:SS,000 - dhcp.py[DEBUG]: Received dhcp lease on IFACE for IP/MASK``
|
96
|
+
|
97
|
+
NOTE: ``cloud-init-output.log`` files are not supported as they do not contain structured logs.
|
98
|
+
|
99
|
+
Args:
|
100
|
+
``log_file``: path to cloud-init.log file.
|
101
|
+
|
102
|
+
Returns: ``MessagesRecord``
|
103
|
+
"""
|
104
|
+
for line in log_file.open("rt").readlines():
|
105
|
+
if line := line.strip():
|
106
|
+
if match := RE_CLOUD_INIT_LINE.match(line):
|
107
|
+
match = match.groupdict()
|
108
|
+
yield MessagesRecord(
|
109
|
+
ts=match["ts"].split(",")[0],
|
110
|
+
daemon=match["daemon"],
|
111
|
+
pid=None,
|
112
|
+
message=match["message"],
|
113
|
+
source=log_file,
|
114
|
+
_target=self.target,
|
115
|
+
)
|
116
|
+
else:
|
117
|
+
self.target.log.warning("Could not match cloud-init log line")
|
118
|
+
self.target.log.debug("No match for line '%s'", line)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: dissect.target
|
3
|
-
Version: 3.17.
|
3
|
+
Version: 3.17.dev27
|
4
4
|
Summary: This module ties all other Dissect modules together, it provides a programming API and command line tools which allow easy access to various data sources inside disk images or file collections (a.k.a. targets)
|
5
5
|
Author-email: Dissect Team <dissect@fox-it.com>
|
6
6
|
License: Affero General Public License v3
|
{dissect.target-3.17.dev26 → dissect_target-3.17.dev27}/tests/plugins/os/unix/log/test_messages.py
RENAMED
@@ -8,16 +8,17 @@ from zoneinfo import ZoneInfo
|
|
8
8
|
from flow.record.fieldtypes import datetime as dt
|
9
9
|
|
10
10
|
from dissect.target import Target
|
11
|
+
from dissect.target.filesystem import VirtualFilesystem
|
11
12
|
from dissect.target.filesystems.tar import TarFilesystem
|
12
13
|
from dissect.target.plugins.general import default
|
13
14
|
from dissect.target.plugins.os.unix.log.messages import MessagesPlugin, MessagesRecord
|
14
15
|
from tests._utils import absolute_path
|
15
16
|
|
16
17
|
|
17
|
-
def test_unix_log_messages_plugin(target_unix_users, fs_unix):
|
18
|
+
def test_unix_log_messages_plugin(target_unix_users: Target, fs_unix: VirtualFilesystem) -> None:
|
18
19
|
fs_unix.map_file_fh("/etc/timezone", BytesIO(b"Europe/Amsterdam"))
|
19
20
|
|
20
|
-
data_file = absolute_path("_data/plugins/os/unix/log
|
21
|
+
data_file = absolute_path("_data/plugins/os/unix/log/messages/messages")
|
21
22
|
fs_unix.map_file("var/log/messages", data_file)
|
22
23
|
|
23
24
|
entry = fs_unix.get("var/log/messages")
|
@@ -46,7 +47,7 @@ def test_unix_log_messages_plugin(target_unix_users, fs_unix):
|
|
46
47
|
assert isinstance(syslogs[0], type(MessagesRecord()))
|
47
48
|
|
48
49
|
|
49
|
-
def test_unix_log_messages_compressed_timezone_year_rollover():
|
50
|
+
def test_unix_log_messages_compressed_timezone_year_rollover() -> None:
|
50
51
|
target = Target()
|
51
52
|
bio = BytesIO()
|
52
53
|
|
@@ -86,7 +87,7 @@ def test_unix_log_messages_compressed_timezone_year_rollover():
|
|
86
87
|
assert results[1].ts == dt(2021, 1, 1, 13, 37, 0, tzinfo=ZoneInfo("America/Chicago"))
|
87
88
|
|
88
89
|
|
89
|
-
def test_unix_log_messages_malformed_log_year_rollover(target_unix_users, fs_unix):
|
90
|
+
def test_unix_log_messages_malformed_log_year_rollover(target_unix_users: Target, fs_unix: VirtualFilesystem) -> None:
|
90
91
|
fs_unix.map_file_fh("/etc/timezone", BytesIO(b"Europe/Amsterdam"))
|
91
92
|
|
92
93
|
messages = BytesIO(
|
@@ -105,3 +106,21 @@ def test_unix_log_messages_malformed_log_year_rollover(target_unix_users, fs_uni
|
|
105
106
|
|
106
107
|
results = list(target_unix_users.messages())
|
107
108
|
assert len(results) == 2
|
109
|
+
|
110
|
+
|
111
|
+
def test_unix_messages_cloud_init(target_unix_users: Target, fs_unix: VirtualFilesystem) -> None:
|
112
|
+
messages = """
|
113
|
+
2005-08-09 11:55:21,000 - foo.py[DEBUG]: This is a cloud-init message!
|
114
|
+
2005-08-09 11:55:21,001 - util.py[DEBUG]: Cloud-init v. 1.2.3-4ubuntu5 running 'init-local' at Tue, 9 Aug 2005 11:55:21 +0000. Up 13.37 seconds.
|
115
|
+
""" # noqa: E501
|
116
|
+
fs_unix.map_file_fh("/var/log/installer/cloud-init.log", BytesIO(textwrap.dedent(messages).encode()))
|
117
|
+
|
118
|
+
target_unix_users.add_plugin(MessagesPlugin)
|
119
|
+
|
120
|
+
results = list(target_unix_users.messages())
|
121
|
+
assert len(results) == 2
|
122
|
+
assert results[0].ts == dt(2005, 8, 9, 11, 55, 21)
|
123
|
+
assert results[0].daemon == "foo.py"
|
124
|
+
assert results[0].pid is None
|
125
|
+
assert results[0].message == "This is a cloud-init message!"
|
126
|
+
assert results[0].source == "/var/log/installer/cloud-init.log"
|
@@ -0,0 +1,159 @@
|
|
1
|
+
import textwrap
|
2
|
+
from io import BytesIO
|
3
|
+
|
4
|
+
import pytest
|
5
|
+
|
6
|
+
from dissect.target import Target
|
7
|
+
from dissect.target.filesystem import VirtualFilesystem
|
8
|
+
from dissect.target.helpers.network_managers import NetworkManager
|
9
|
+
from dissect.target.plugins.os.unix.linux._os import LinuxPlugin
|
10
|
+
from tests._utils import absolute_path
|
11
|
+
|
12
|
+
|
13
|
+
def test_ips_dhcp(target_unix_users: Target, fs_unix: VirtualFilesystem) -> None:
|
14
|
+
"""Test DHCP lease messages from /var/log/syslog."""
|
15
|
+
|
16
|
+
messages = """
|
17
|
+
Jan 1 13:37:01 hostname NetworkManager[1]: <info> [1600000000.0000] dhcp4 (eth0): option ip_address => '10.13.37.1'
|
18
|
+
Feb 2 13:37:02 test systemd-networkd[2]: eth0: DHCPv4 address 10.13.37.2/24 via 10.13.37.0
|
19
|
+
Mar 3 13:37:03 localhost NetworkManager[3]: <info> [1600000000.0003] dhcp4 (eth0): address 10.13.37.3
|
20
|
+
Apr 4 13:37:04 localhost dhclient[4]: bound to 10.13.37.4 -- renewal in 1337 seconds.
|
21
|
+
May 5 13:37:05 test systemd-networkd[5]: eth0: DHCPv6 lease lost
|
22
|
+
Jun 6 13:37:06 test systemd-networkd[5]: eth0: DHCPv6 address 2001:db8::/64 via 2001:db8:ffff:ffff:ffff:ffff:ffff:ffff
|
23
|
+
""" # noqa E501
|
24
|
+
|
25
|
+
fs_unix.map_file_fh(
|
26
|
+
"/var/log/syslog",
|
27
|
+
BytesIO(textwrap.dedent(messages).encode()),
|
28
|
+
)
|
29
|
+
|
30
|
+
target_unix_users.add_plugin(LinuxPlugin)
|
31
|
+
results = target_unix_users.ips
|
32
|
+
results.reverse()
|
33
|
+
assert len(results) == 5
|
34
|
+
assert sorted(results) == ["10.13.37.1", "10.13.37.2", "10.13.37.3", "10.13.37.4", "2001:db8::"]
|
35
|
+
|
36
|
+
|
37
|
+
def test_ips_cloud_init(target_unix_users: Target, fs_unix: VirtualFilesystem) -> None:
|
38
|
+
"""Test cloud-init dhcp.py lease messages."""
|
39
|
+
|
40
|
+
messages = """
|
41
|
+
2022-12-31 13:37:00,000 - dhcp.py[DEBUG]: Received dhcp lease on eth0 for 10.13.37.5/24
|
42
|
+
""" # noqa E501
|
43
|
+
|
44
|
+
fs_unix.map_file_fh(
|
45
|
+
"/var/log/cloud-init.log",
|
46
|
+
BytesIO(textwrap.dedent(messages).encode()),
|
47
|
+
)
|
48
|
+
|
49
|
+
target_unix_users.add_plugin(LinuxPlugin)
|
50
|
+
results = target_unix_users.ips
|
51
|
+
|
52
|
+
assert len(results) == 1
|
53
|
+
assert results == ["10.13.37.5"]
|
54
|
+
|
55
|
+
|
56
|
+
def test_ips_static(target_unix_users: Target, fs_unix: VirtualFilesystem) -> None:
|
57
|
+
"""Test statically defined ipv4 and ipv6 addresses in /etc/network/interfaces."""
|
58
|
+
|
59
|
+
fs_unix.map_file("/etc/network/interfaces", absolute_path("_data/plugins/os/unix/_os/ips/interfaces"))
|
60
|
+
target_unix_users.add_plugin(LinuxPlugin)
|
61
|
+
results = target_unix_users.ips
|
62
|
+
|
63
|
+
assert sorted(results) == sorted(["10.13.37.6", "2001:db8:ffff:ffff:ffff:ffff:ffff:ffff"])
|
64
|
+
|
65
|
+
|
66
|
+
def test_ips_wicked_static(target_unix_users: Target, fs_unix: VirtualFilesystem) -> None:
|
67
|
+
"""Test statically defined ipv4 addresses in /etc/wicked/ifconfig/."""
|
68
|
+
|
69
|
+
fs_unix.map_file("/etc/wicked/ifconfig/eth0.xml", absolute_path("_data/plugins/os/unix/_os/ips/eth0.xml"))
|
70
|
+
target_unix_users.add_plugin(LinuxPlugin)
|
71
|
+
results = target_unix_users.ips
|
72
|
+
|
73
|
+
assert sorted(results) == sorted(["10.13.37.2", "2001:db8:ffff:ffff:ffff:ffff:ffff:fffe"])
|
74
|
+
|
75
|
+
|
76
|
+
def test_dns_static(target_unix_users: Target, fs_unix: VirtualFilesystem) -> None:
|
77
|
+
"""Test statically defined ipv4 and ipv6 dns-nameservers in /etc/network/interfaces."""
|
78
|
+
|
79
|
+
fs_unix.map_file("/etc/network/interfaces", absolute_path("_data/plugins/os/unix/_os/ips/interfaces"))
|
80
|
+
target_unix_users.add_plugin(LinuxPlugin)
|
81
|
+
results = target_unix_users.dns
|
82
|
+
|
83
|
+
assert results == [{"10.13.37.1", "10.13.37.2", "2001:db8::", "2001:db9::"}]
|
84
|
+
|
85
|
+
|
86
|
+
def test_ips_netplan_static(target_unix_users: Target, fs_unix: VirtualFilesystem) -> None:
|
87
|
+
"""Test statically defined ipv4 and ipv6 ip addresses in /etc/netplan/*.yaml"""
|
88
|
+
|
89
|
+
config = """
|
90
|
+
# This file describes the network interfaces available on your system
|
91
|
+
# For more information, see netplan(5).
|
92
|
+
network:
|
93
|
+
version: 2
|
94
|
+
renderer: networkd
|
95
|
+
ethernets:
|
96
|
+
enp0s3:
|
97
|
+
dhcp4: no
|
98
|
+
addresses: [192.168.1.123/24]
|
99
|
+
gateway4: 192.168.1.1
|
100
|
+
nameservers:
|
101
|
+
addresses: [1.2.3.4, 5.6.7.8]
|
102
|
+
"""
|
103
|
+
|
104
|
+
fs_unix.map_file_fh("/etc/netplan/01-netcfg.yaml", BytesIO(textwrap.dedent(config).encode()))
|
105
|
+
target_unix_users.add_plugin(LinuxPlugin)
|
106
|
+
assert target_unix_users.ips == ["192.168.1.123"]
|
107
|
+
|
108
|
+
|
109
|
+
@pytest.mark.parametrize(
|
110
|
+
"config, expected_output",
|
111
|
+
[
|
112
|
+
("", []),
|
113
|
+
("network:", []),
|
114
|
+
("network:\n ethernets:\n", []),
|
115
|
+
("network:\n ethernets:\n eth0:\n", []),
|
116
|
+
("network:\n ethernets:\n eth0:\n addresses: []\n", []),
|
117
|
+
("network:\n ethernets:\n eth0:\n addresses: [1.2.3.4/24]\n", ["1.2.3.4"]),
|
118
|
+
("network:\n ethernets:\n eth0:\n addresses: ['1.2.3.4']\n", ["1.2.3.4"]),
|
119
|
+
],
|
120
|
+
)
|
121
|
+
def test_ips_netplan_static_invalid(
|
122
|
+
target_unix_users: Target, fs_unix: VirtualFilesystem, config: str, expected_output: list
|
123
|
+
) -> None:
|
124
|
+
fs_unix.map_file_fh("/etc/netplan/02-netcfg.yaml", BytesIO(textwrap.dedent(config).encode()))
|
125
|
+
target_unix_users.add_plugin(LinuxPlugin)
|
126
|
+
assert target_unix_users.ips == expected_output
|
127
|
+
|
128
|
+
|
129
|
+
def test_ips_netplan_static_empty_regression(target_unix_users: Target, fs_unix: VirtualFilesystem) -> None:
|
130
|
+
fs_unix.map_file_fh("/etc/netplan/01-netcfg.yaml", BytesIO(b""))
|
131
|
+
target_unix_users.add_plugin(LinuxPlugin)
|
132
|
+
assert target_unix_users.ips == []
|
133
|
+
|
134
|
+
|
135
|
+
@pytest.mark.parametrize(
|
136
|
+
"input, expected_output",
|
137
|
+
[
|
138
|
+
# 'invalid' or input that should be filtered
|
139
|
+
("0.0.0.0", set()),
|
140
|
+
("127.0.0.1", set()),
|
141
|
+
("127.0.0.1/8", set()),
|
142
|
+
("0.0.0.0/24", set()),
|
143
|
+
("::1", set()),
|
144
|
+
("::", set()),
|
145
|
+
("0:0:0:0:0:0:0:1", set()),
|
146
|
+
# valid input
|
147
|
+
("::ffff:192.0.2.128", {"::ffff:192.0.2.128"}),
|
148
|
+
("2001:db8::2:1", {"2001:db8::2:1"}),
|
149
|
+
("10.13.37.1", {"10.13.37.1"}),
|
150
|
+
("10.13.37.2/24", {"10.13.37.2"}),
|
151
|
+
(" 10.13.37.3 ", {"10.13.37.3"}),
|
152
|
+
("2001:db8::", {"2001:db8::"}),
|
153
|
+
("2001:db8:ffff:ffff:ffff:ffff:ffff:ffff", {"2001:db8:ffff:ffff:ffff:ffff:ffff:ffff"}),
|
154
|
+
],
|
155
|
+
)
|
156
|
+
def test_clean_ips(input: str, expected_output: set) -> None:
|
157
|
+
"""Test the cleaning of dirty ip addresses."""
|
158
|
+
|
159
|
+
assert NetworkManager.clean_ips({input}) == expected_output
|
@@ -1,73 +0,0 @@
|
|
1
|
-
import re
|
2
|
-
from itertools import chain
|
3
|
-
from typing import Iterator
|
4
|
-
|
5
|
-
from dissect.target.exceptions import UnsupportedPluginError
|
6
|
-
from dissect.target.helpers.record import TargetRecordDescriptor
|
7
|
-
from dissect.target.helpers.utils import year_rollover_helper
|
8
|
-
from dissect.target.plugin import Plugin, export
|
9
|
-
|
10
|
-
MessagesRecord = TargetRecordDescriptor(
|
11
|
-
"linux/log/messages",
|
12
|
-
[
|
13
|
-
("datetime", "ts"),
|
14
|
-
("string", "daemon"),
|
15
|
-
("varint", "pid"),
|
16
|
-
("string", "message"),
|
17
|
-
("path", "source"),
|
18
|
-
],
|
19
|
-
)
|
20
|
-
|
21
|
-
DEFAULT_TS_LOG_FORMAT = "%b %d %H:%M:%S"
|
22
|
-
RE_TS = re.compile(r"(\w+\s{1,2}\d+\s\d{2}:\d{2}:\d{2})")
|
23
|
-
RE_DAEMON = re.compile(r"^[^:]+:\d+:\d+[^\[\]:]+\s([^\[:]+)[\[|:]{1}")
|
24
|
-
RE_PID = re.compile(r"\w\[(\d+)\]")
|
25
|
-
RE_MSG = re.compile(r"[^:]+:\d+:\d+[^:]+:\s(.*)$")
|
26
|
-
|
27
|
-
|
28
|
-
class MessagesPlugin(Plugin):
|
29
|
-
def check_compatible(self) -> None:
|
30
|
-
var_log = self.target.fs.path("/var/log")
|
31
|
-
if not any(var_log.glob("syslog*")) and not any(var_log.glob("messages*")):
|
32
|
-
raise UnsupportedPluginError("No message files found")
|
33
|
-
|
34
|
-
@export(record=MessagesRecord)
|
35
|
-
def syslog(self) -> Iterator[MessagesRecord]:
|
36
|
-
"""Return contents of /var/log/messages* and /var/log/syslog*.
|
37
|
-
|
38
|
-
See ``messages`` for more information.
|
39
|
-
"""
|
40
|
-
return self.messages()
|
41
|
-
|
42
|
-
@export(record=MessagesRecord)
|
43
|
-
def messages(self) -> Iterator[MessagesRecord]:
|
44
|
-
"""Return contents of /var/log/messages* and /var/log/syslog*.
|
45
|
-
|
46
|
-
Note: due to year rollover detection, the contents of the files are returned in reverse.
|
47
|
-
|
48
|
-
The messages log file holds information about a variety of events such as the system error messages, system
|
49
|
-
startups and shutdowns, change in the network configuration, etc. Aims to store valuable, non-debug and
|
50
|
-
non-critical messages. This log should be considered the "general system activity" log.
|
51
|
-
|
52
|
-
References:
|
53
|
-
- https://geek-university.com/linux/var-log-messages-file/
|
54
|
-
- https://www.geeksforgeeks.org/file-timestamps-mtime-ctime-and-atime-in-linux/
|
55
|
-
"""
|
56
|
-
|
57
|
-
tzinfo = self.target.datetime.tzinfo
|
58
|
-
|
59
|
-
var_log = self.target.fs.path("/var/log")
|
60
|
-
for log_file in chain(var_log.glob("syslog*"), var_log.glob("messages*")):
|
61
|
-
for ts, line in year_rollover_helper(log_file, RE_TS, DEFAULT_TS_LOG_FORMAT, tzinfo):
|
62
|
-
daemon = dict(enumerate(RE_DAEMON.findall(line))).get(0)
|
63
|
-
pid = dict(enumerate(RE_PID.findall(line))).get(0)
|
64
|
-
message = dict(enumerate(RE_MSG.findall(line))).get(0, line)
|
65
|
-
|
66
|
-
yield MessagesRecord(
|
67
|
-
ts=ts,
|
68
|
-
daemon=daemon,
|
69
|
-
pid=pid,
|
70
|
-
message=message,
|
71
|
-
source=log_file,
|
72
|
-
_target=self.target,
|
73
|
-
)
|