Обнаружение загружаемого файла для Windows

#python #windows

#python #Windows

Вопрос:

В настоящее время я пишу сценарий python для проекта, но для продолжения работы с проектом мне нужно знать, куда будут отправляться все загруженные файлы / программы [exe] в Windows.

Я знаю, что он перейдет в папку загрузки пользователя, если пользователь не изменил местоположение по умолчанию для загруженной папки или не сохранил его в определенном месте, но я спрашиваю, есть ли способ найти все загруженные файлы независимо от того, где они находятся.сохраняются ли?

Любая помощь будет большой помощью, я погуглил, но не нашел ответа, который искал, поэтому надеялся, что кто-нибудь здесь сможет дать некоторое представление.

Ответ №1:

Тот факт, что файл был загружен один раз за раз, — это не то, что вы можете наблюдать из файловой системы. Другими словами, нет, вы не можете этого сделать.

Однако NTFS сохраняет тот факт, что файл был ТОЛЬКО что загружен в альтернативный поток данных (ADS), который вы можете прочитать. Таким образом Windows предупреждает вас о том, что файл был загружен из Интернета и может быть опасным.

Проблема в том, что если файл когда-либо открывается, и пользователь говорит, что файл безопасен, эти данные удаляются. Вы не можете знать, что файл был загружен ранее, только если он был загружен и никогда не открывался.

Если вашему скрипту на python необходимо воздействовать на некоторые другие файлы, вы должны спросить пользователя, где находятся файлы, либо в командной строке, либо в интерактивном режиме.

Комментарии:

1. Большое вам спасибо за ваш ответ, но я не думаю, что это невозможно сделать, потому что, например, хороший антивирус автоматически обнаружит момент загрузки файла / программы, а затем сообщит нам, является ли он вредоносным или нет. Пожалуйста, поправьте, если я ошибаюсь!

2. Антивирус отслеживает создание файла любым способом, ему все равно, был ли он загружен или нет. Раньше мы заражались вирусами при копировании файлов с гибких дисков 🙂

3. Большое вам спасибо за вашу помощь. Я думаю, что мне удалось найти то, что я искал. Теперь мне просто нужно углубиться, и я доберусь туда, куда я хочу попасть наверняка. Еще раз, большое вам спасибо за всю помощь!

Ответ №2:

Есть несколько вещей, которые следует учитывать.

  1. Вы всегда можете просканировать весь диск, чтобы найти последние файлы. Это медленно, но возможно. Это ваш наихудший сценарий.
  2. С помощью расширения вы можете использовать файловый индекс Windows — поиск Windows. Это ускорит поиск и позволит сортировать по дате, но по-прежнему является более быстрой версией первого варианта. Другими словами, это не говорит вам ничего нового.
  3. Чтобы получить папку загрузок текущего пользователя по умолчанию, рассмотрите возможность использования переменных среды Windows, таких как: %USERPROFILE%downloads . Это может значительно упростить программный поиск папки текущего пользователя без необходимости знать его имя пользователя.
  4. (Отредактировано) Я заявил, что нет способа отследить источник, но, как указано в другом ответе, можно определить, был ли он загружен с помощью рекламы. В частности, Zone.Identifier поток означает, что файл поступил из другой «зоны безопасности», то есть не с этого компьютера. Кроме этого, он не предоставляет подробных сведений о том, откуда он взялся, но, возможно, это не важно для вашего варианта использования.

Комментарии:

1. Большое вам спасибо, это информация, которая наверняка будет полезна в долгосрочной перспективе.

2. Не предполагайте расположение каталога загрузок по умолчанию. Текущий путь должен быть запрошен через SHGetKnownFolderPath with FOLDERID_Downloads , который можно вызвать через ctypes или PyWin32 (через COM). В противном случае вы также можете проверить раздел реестра «HKCU SOFTWARE Microsoft Windows CurrentVersion Explorer User Shell Folders» на наличие значения с именем «Downloads» или имени GUID «{374DE290-123F-4565-9164- 39C4925E467B}» (для меня в настоящее время он установлен с помощьюИмя GUID).

3. Как я уже сказал, используйте переменные среды, такие как . По сути, это просто еще одна переменная, ни одному из вариантов нельзя доверять — как указано в вопросе, op знает, что пользователь может использовать «сохранить как» при загрузке. Пользовательская папка была соглашением в течение очень долгого времени в Windows, это довольно простой в использовании и относительно надежный метод поиска местоположения по умолчанию.

4. Папки оболочки пользователя в реестре не являются переменными среды. В организациях нередко перенаправлять папки оболочки пользователя из их расположения по умолчанию в профиле пользователя на UNC-путь или сетевой диск, чтобы минимизировать размер перемещаемых профилей, которые необходимо синхронизировать при входе в систему. Переменными среды для известных папок, на которые можно положиться, являются фиксированные системные переменные, такие как «SystemRoot», «ProgramFiles», «ProgramData», «PUBLIC», и надежные пользовательские переменные, такие как «USERPROFILE», «APPDATA» и «LOCALAPPDATA», но не для перемещаемых папок оболочки пользователя.