Тестовая целостность zip-файла?

Интересно достаточно, мой vsftpd пишет строка versino в stdin. Таким образом, вероятно, необходимо сделать довольно необычное перенаправление stdin кому: stdout:

i=`/usr/sbin/vsftpd -version 0>&1`

Как узнать это: выполните его в strace (необходимо будет сделать это как корень), и проверьте на строку. В моем случае журнал заканчивается как это:

$ strace /usr/sbin/vsftpd -version
...
brk(0)                                  = 0x7f835332d000
brk(0x7f835334e000)                     = 0x7f835334e000
write(0, "vsftpd: version 3.0.2\n", 22) = 22
exit_group(0)                           = ?
+++ exited with 0 +++

Первый аргумент write() дескриптор файла (0/1/2, обозначают stdin/stdout/stderr соответственно).

22
18.04.2015, 23:16
3 ответа

Попытка исправить архив сравнит локальные и центральные КСГ, и совмещение с архивными тестами позволит проверить все КСГ. Если вы запустите

unzip -t archive.zip

и

zip -F archive.zip --out archivefix.zip

и ни одна из них не пожалуется, это означает, что содержимое архива совпадает как с центральной, так и с локальной КСГ. (После этого можно удалить archivefix.zip.)

Для проверки этого, начиная с исходного кода Info-ZIP для zip 3.0, я создал файл следующим образом:

zip -9 test.zip zip.txt zipup.c

Я затем повредил CRC центрального каталога для zip.txt, изменив байт со смещением 0xB137. Я получил поведение, противоположное тому, которое вы наблюдали; unzip -v сообщил об изменении CRC из центральной директории, но unzip -t и zip -T сообщили, что файл в порядке (проверяя по локальной CRC).

Но запущенный

zip -F test --out testfix

сообщил

Fix archive (-F) - assume mostly intact archive
Zip entry offsets do not need adjusting
 copying: zip.txt
        zip warning: Local Entry CRC does not match CD: zip.txt
 copying: zipup.c

В "исправленном" файле все еще был указан измененный CRC для zip.txt.

Изменение локальной CRC для zip.txt со смещением 0x10 заставило как распаковать -t, так и zip -T сообщить об ошибке CRC, но zip -F не заметили ничего неправильного.

Таким образом, по результатам моих экспериментов, несоответствия между содержимым записи архива и его CRC могут быть обнаружены следующим образом:

  • только локально: zip -T и unzip -t; zip -F также будут жаловаться на локально-центральное несоответствие
  • локальное и центральное: zip -T и unzip -t
  • central только: zip -T и unzip -t не будут подавать жалобы, но zip -F укажет на локально-центральное несовпадение

(Обратите внимание, что по умолчанию zip -T просто использует unzip -tqq, так что zip -T и unzip -t действительно эквивалентны. Вы можете прочитать исходный код unzip, чтобы проверить, что тестирование архива действительно сравнивает локальный CRC, а не центральный; ищите extract_or_test_files(), extract_or_test_entrylist() и extract_or_test_member(), и все это в извлечении . c.)

12
27.01.2020, 19:42

unzip -t

Проверить файлы архива.

Эта опция извлекает каждый указанный файл в памяти и сравнивает CRC (циклический контроль избыточности, улучшенная контрольная сумма) расширенного файла с сохраненным значением CRC оригинала.

[источник: https://linux.die.net/man/1/unzip ]

20
27.01.2020, 19:42

Вы можете взглянуть на zipdetails. Со своей справочной страницы:

Zipdetails displays information about the internal record structure of the zip file. It is not concerned with displaying any details of the compressed data stored in the zip file.

Я не знаю, обнаружит ли zipdetailsнесоответствия, но это должно помочь вам найти/понять несоответствия. Вот небольшой образец из его вывода:

00000 LOCAL HEADER #1       04034B50
00004 Extract Zip Spec      14 '2.0'
00005 Extract OS            00 'MS-DOS'
00006 General Purpose Flag  0808
      [Bits 1-2]            0 'Normal Compression'
      [Bit  3]              1 'Streamed'
      [Bit 11]              1 'Language Encoding'
00008 Compression Method    0008 'Deflated'
0000A Last Mod Time         5352884C 'Mon Oct 18 17:02:24 2021'
0000E CRC                   00000000
00012 Compressed Length     00000000
00016 Uncompressed Length   00000000
0001A Filename Length       000B
0001C Extra Length          0000
0001E Filename              'graphic.svg'
00029 PAYLOAD

02947 STREAMING DATA HEADER 08074B50
0294B CRC                   C622C669
0294F Compressed Length     0000291E
02953 Uncompressed Length   0002F706

Я также могу подтвердить этот бит на справочной странице:

Error handling is still a work in progress. If the program encounters a problem reading a zip file it is likely to terminate with an unhelpful error message.

2
18.10.2021, 15:58

Теги

Похожие вопросы