2014-04-28 64 views
3

我需要從標準輸入讀取十六進制數據,將其轉換爲二進制,使用netcat發送,接收回復,轉換回十六進制並打印到標準輸出。我這樣做:將十六進制轉換爲二進制並通過網絡發送

# xxd -r -p | nc -u localhost 12345 | xxd 

然後鍵入我的數據在十六進制,然後按Enter鍵。但它不發送,直到我按Ctrl+D,所以我收到回覆後無法發送另一個數據包。看起來像xxd -r -p不寫二進制數據,直到EOF給出。有沒有辦法讓它在換行之後寫入?

+1

爲什麼你需要將它傳送二進制?十六進制應該工作得很好。二進制是實際需要的字節數,並乘以4(十六進制是每個字節2挖,二進制是8每字節,2/8 = 4) – phyrrus9

+0

@ phyrrus9我認爲這裏的「二進制」的OP定義是一個流的8位字節,而不是ascii 1和0的流。例如,試試'echo 737461636b6f766572666c6f772e636f6d0a | xxd -p -r「 –

回答

2

默認情況下,大多數* nix實用程序將在交互模式下執行行緩衝(例如直接連接到終端仿真器的stdin/stdout)。但是當處於非交互模式時(例如stdin/stdout連接到管道),通常會使用更大的緩衝區 - 我認爲典型值爲8k左右,但這種變化在很大程度上取決於實現/發行版。

您可以強制緩衝對於給定的過程中使用的GNU stdbuf utility排隊模式,如果您有它可用:

stdbuf -oL xxd -r -p | nc -u localhost 12345 | xxd 
相關問題