Como usar o Netcat

1

Eu tenho um arquivo no meu servidor que tem mensagens HL7 espalhadas por um espaço. Exemplo abaixo. Eu estou querendo enviar uma dessas mensagens de cada vez em um loop contínuo até parar o script com ctrl + c. Eu sou muito novo para netcat , mas quando eu tento netcat diretamente usando nc -l 10004 eu recebo:

ncat: bind to :::10004: Address already in use. QUITTING.

Há um aplicativo Mirth no appliance que já está escutando nessa porta. Não tenho nenhum problema em executar o comando em outro dispositivo, enviando-o para este, se for o único caminho, mas preciso de assistência para enviar o IP usando netcat e enviando uma mensagem de cada vez com uma lacuna entre eles.

MSH....
.......
.......

MSH....
.......

MSH....
.......
.......
.......

O arquivo que estou tirando tem várias mensagens com mais de uma linha, mas elas são separadas por uma quebra de linha. (espaço)

    
por Jeff 10.06.2015 / 20:26

1 resposta

0

Se você tiver o aplicativo Mirth já escutando na porta 10004, então você não pode ter netcat também escutando na mesma porta (o -l flag denota listen ). Talvez você pretendesse escrever no porto em vez de ouvi-lo:

# Connect once and write many messages
( while :; do echo MSH....; sleep 3; done ) | nc -vvv localhost 10004

ou

# Connect for each message
( while :; do echo MSH.... | nc -vvv localhost 10004; sleep 3; done )

Esteja ciente de que existem várias implementações diferentes de netcat . Toda implementação parece lidar com um subconjunto de flags diferente ...

Com base nas novas informações da sua pergunta, veja outra possível solução:

MESG=
while IFS= read -r LINE || test -n "$MESG"
do
    if test -n "$LINE"
    then
        # Build the message block
        test -z "$MESG" && MESG="$LINE" || MESG=$(printf "%s\n%s" "$MESG" "$LINE")
        continue
    fi

    # Send the message block to the service
    echo "$MESG" | nc -vvv localhost 10004
    MESG=
    sleep 3
done < /path/to/your/messagefile.txt
    
por 11.06.2015 / 00:50