Envoi du contenu du fichier texte au serveur à l'aide de netcat?

13

Il y a un processus démon à l'écoute sur le port 5144, que je ne peux pas modifier.

Je veux utiliser netcat pour envoyer le contenu d'un fichier texte au serveur, mais cela provoque netcatle blocage du terminal jusqu'à ce que j'appuie sur Ctrl+ C:

cat file.txt | nc -u 127.0.0.1 5144

La seule façon de le faire fonctionner est d'exécuter nc -u 127.0.0.1 5144et de copier / coller manuellement le contenu du fichier.

Des idées?


Notez également:

  1. cat file.txt | ...conduit à bash: ...: command not foundet je peux continuer à utiliser le terminal
  2. using nc -u 127.0.0.1 5144 < file.txtconduit au même comportement que l'utilisation de | au dessus
Amil
la source
Que se passe-t-il quand tu dis cat file.txt | …? Et alors nc -u 127.0.0.1 5144 < file.txt?
Scott
devez-vous utiliser -u? Avez-vous également essayé de l'autre côté, nc -l -p? et avez-vous essayé nc -p? (il y a un nc qui utilise -l -p, et un je pense qui utilise -p sans -l). Vous n'avez montré qu'un côté, le côté client / initiateur. Que faites-vous côté serveur? Essayez comme test, en faisant écouter nc sur le port 1234 et voyez si cat ... | nc ... fonctionne. Je ne l'ai jamais vu auparavant, donc c'est peut-être un faible, mais c'est peut-être quelque chose de particulier à ce démon particulier qui n'accepte pas les choses en catimini.
barlop
Je ne peux pas modifier le démon. @Scott: bash: ...: command not foundet l'utilisation de "<fichier.txt" fait la même chose que le | opérateur (netcat se bloque juste)
Amil
Pouvez-vous être plus précis? Dit-il « bash: ...: command not found»? Ou est-ce que ça dit " bash: cat: command not found" ou " bash: nc: command not found"? Et puis sort-il ensuite à une invite du shell, ou se bloque-t-il? (Je vous encourage à modifier la question pour ajouter ces détails, afin que les gens en Australie qui se réveillent à peine n'aient pas à lire tous ces commentaires pour découvrir quels sont vos symptômes.)
Scott
@Scott: Merci, j'ai intégré mes réponses à vos questions dans la question d'origine. Des idées?
Amil

Réponses:

7

Si vous utilisez la version GNU de netcat, vous pouvez utiliser l'indicateur -c pour fermer la connexion sur EOF.

-c, --close une connexion étroite sur EOF depuis stdin

Si vous utilisez la version d'origine de l'outil, vous pouvez utiliser l'indicateur -q.

-q secs quitte après EOF sur stdin et délai de secs

Un exemple pour la version originale est:

cat file.txt | nc -u -q 0 127.0.0.1 5144

J'ai ajouté "-q 0" à votre commande d'origine. Cela ferme la connexion après l'envoi du fichier.

Kaplaa
la source
A distinguer: la version originale est celle qui nécessite de préciser -l -p <port>pour l'écoute. La version GNU prend juste -l <port>.
tueftl
1

En supposant qu'après l'envoi de la connexion EOF restera inactive, vous pouvez utiliser l' -w timeoutoption, qui fonctionne pour timeoutêtre égale à zéro (contrairement à l' -qoption stupide ...)

cat file.text | nc -u localhost 4300 -w0
Bora M. Alper
la source
0

Si vous transférez de FreeBSD vers Windows:

FreeBSD: cat file.txt | nc -N 10.0.0.5 5144

-N arrêtera la prise réseau après EOF

Les fenêtres: nc -l -p 5144 > output.txt

-larrêtera d'écouter sur connexion fermée (contrairement -L)

Eugene Petrov
la source