É possível ver o que o dropboxd está sincronizando agora?

2

O script dropbox.py para o dropboxd no linux fornecerá o status atual:

$ dropbox.py status 
Syncing (2,656 files remaining)
Uploading 2,656 files...  

Ou status de um arquivo específico ou pasta atual:

$ dropbox.py filestatus 
Camera Uploads:     up to date 
Customer Shares:    syncing

Mas existe uma maneira de ver quais arquivos estão sendo transferidos agora?

A razão pela qual eu pergunto é que o dropbox ficou preso durante dias, mas não está progredindo. Eu suspeito que ele está preso em algum arquivo estranhamente grande ou corrompido, e se eu pudesse identificá-lo, eu poderia removê-lo / ignorá-lo.

Nota

$ ls -l /proc/7857/fd

Onde 7857 é o pid de dropbox, nenhum arquivo no caminho sincronizado é mostrado.

Observe que exigir a interrupção do dropboxd e a reexecução com um depurador não revelaria o que está sendo transferido agora . Parar e iniciar o daemon resulta na reindexação e no início da sincronização. Isso provavelmente faria com que um conjunto diferente de arquivos fosse transferido.

Alguma sugestão?

    
por Paul 05.10.2017 / 03:08

1 resposta

1

Se você está no linux, é bem fácil. Durante o processo de sincronização, você pode fazer:

find $HOME/dropbox_sync_dir -type f -exec dropbox.py file status -a '{}' \; | grep 'syncing'

Explicando detalhes:

  • find <path> -type f -exec dropbox.py ... '{}' \;

Executa dropbox.py em cada arquivo ou abaixo do diretório atual.

Notice that the braces are enclosed in single quote marks to protect them from interpretation as shell script punctuation. The semicolon is similarly protected by the use of a backslash, though single quotes could have been used in that case also.

Mais em homem encontre páginas

  • dropbox.py file status -a do manual do cliente do dropbox linux :

    dropbox file status  [-l] [-a] [FILE]…
    
    Prints the current status of each FILE.
    
      Options:
    
       -l or --list prints out information in a format similar to the native Linux command ls.
       -a or --all do not ignore entries starting with "."
    

    Os aliases incluem stat.

  • | grep 'syncing'

Procura pela string 'syncing'.

Nota: que a extremidade .py não deve ser obrigatória, deve haver um alias, por isso, apenas dropbox deve ser suficiente.

Primeira edição - reedite devido ao comentário de Paul sobre dropboxd (daemon) vs. dropbox.py.

Essa continua sendo a maneira mais provável de descobrir o que está sendo transferido.

Tentarei depurá-lo quando terminar minhas tarefas pendentes.

O dropbox.py deve ser depurado via pdb (o depurador python) para mais em depurador python .

Finalmente, depois dos comentários de Paul, entendi onde está o cerne da questão. Ele quer ver o arquivo acessado atualmente ou ainda melhor aquele que está sendo transferido pelo cliente de sincronização da caixa de depósito.

  • Você pode encontrar todos os arquivos usados pelo cliente do dropbox atualmente usado:

    ls -thal /proc/'pgrep dropbox'/fd | egrep -v 'socket:|pipe:|anon_inode|/dev/'
    
  • Se você não consegue ver nada, isso significa que provavelmente há algo errado com o cliente. Eu recomendaria realizar strace .

    To monitor your dropboxd script with output save into output.txt file:
    'strace -o output.txt dropboxd'
    
    To monitor only system calls you could enter:
    'strace -e open dropboxd'
    
  • Se você quiser ir ainda mais fundo, poderá anexar um depurador , gdb para sua sessão strace .

    Se você não estiver familiarizado com esse processo, pode verificar, por exemplo, esta postagem sobre o unix strace e gdb .

Apenas uma ajuda rápida:

Quando você inicia seu rastreio com: strace dropboxd (a execução do pid seria 501) Então você anexa a ele da seguinte maneira:

$ gdb --quiet
(gdb) attach 501
  • Se tudo mais falhar, você pode usar outras maneiras de sincronizar sua caixa de depósito:

Por exemplo, use um cliente CLI diferente, como dbxcli .

Segunda edição & Forth Edit - não funcionará até que o dropbox suporte as próprias chaves privadas.

Responda pelo suporte da caixa de depósito:

O Dropbox não suporta a criação de suas próprias chaves privadas.

Ocorreu-me que deveria ser possível verificar o que é transferido, mesmo via ferramenta de monitoramento de rede como wireshark .

Como o cliente do dropbox está usando SSL / TSL (ou AES) A arquitetura de segurança do dropbox e você deve ter a chave para verificar.

Para obter detalhes sobre como usar wireshare , você pode verificar https://wiki.wireshark.org/SSL ou ajustar este exemplo ao seu caso Analisar o tráfego de clientes SSL / TLS do cliente . Em você tem certificado dropbox você poderia importá-lo em wireshark para ver o que está acontecendo. (Para detalhes de segurança da caixa de depósito, você pode verificar o whitepaper de segurança do Dropbox .

Terceiro Editar & Forth edit - detalhes sobre a descriptografia SSL / TSL. (não funcionará até que o dropbox suporte as próprias chaves privadas.)

Responda pelo suporte da caixa de depósito:

O Dropbox não suporta a criação de suas próprias chaves privadas.

Na segunda seção de edição, sugeri que você possa visualizar o tráfego SSL via wireshark. Já que Paul pensou que eu estou sugerindo que você deveria hackear o DH key exchange , que com o conhecimento atual não é possível, eu gostaria de corrigi-lo.

O que estou tentando sugerir é que, se você estiver usando o RSA da empresa de caixa de entrada e a autenticação RSA , você poderia tentar usar o dropboxd with RSA key (o daemon dropboxd é de código fechado, eu não posso verificar o código-fonte se a funcionalidade estiver lá e provavelmente a melhor solução é perguntar diretamente ao dropbox.com).

Se isso for possível, importe o RSA key para o wireshark para ver o que está sendo transferido no momento.

    
por 11.10.2017 / 15:00

Tags