নেটকাট দিয়ে একটি মাত্র ইউডিপি প্যাকেট কীভাবে প্রেরণ করবেন?


120

আমি ইউডিপি প্যাকেটে কেবল একটি সংক্ষিপ্ত মান প্রেরণ করতে চাই, তবে কমান্ডটি চালাচ্ছি

echo -n "hello" | nc -4u localhost 8000

আমি দেখতে পাচ্ছি যে সার্ভার হ্যালো স্টাফ পাচ্ছে তবে নেটক্যাট কমান্ডটি ছাড়তে আমাকে Ctrl+ টিপতে হবে c

হ্যালো পাঠানোর পরে আমি কীভাবে এটি ছেড়ে দিতে পারি ?


দুঃখিত, গোলমাল করার জন্য, আমি ম্যান পৃষ্ঠাটি পুনরায় পড়লাম এবং এটিটি পেয়েছি -q বিকল্পটি ।

 echo -n "hello" | nc -4u -q1 localhost 8000

কাজ করে (এটি 1 সেকেন্ড পরে প্রস্থান করে)।

কিছু কারণে এটি কাজ করে না -q0


ডেবিয়ানে ম্যান পেজ:-q seconds: after EOF on stdin, wait the specified number of seconds and then quit. If seconds is negative, wait forever.
ভাগ্যডোনাল্ড

উত্তর:


204

আপনি যদি ব্যাশ ব্যবহার করছেন তবে আপনি ভাল লিখতেও পারেন

echo -n "hello" >/dev/udp/localhost/8000

এবং নেটকাটের সমস্ত আইডিয়োসিএনসি এবং অসম্পূর্ণতা এড়িয়ে চলুন।

এটি অন্যান্য হোস্টকে প্রেরণেও কাজ করে, যেমন:

echo -n "hello" >/dev/udp/remotehost/8000

এগুলি ফাইল সিস্টেমে "আসল" ডিভাইস নয়, তবে "স্পেশাল" এলিয়াস বাশ দেয় । বাশ ম্যানুয়ালটিতে অতিরিক্ত তথ্য রয়েছে ।


24
ঠিক আছে, আপনি ঠিক বলেছেন, আমি কেবল এটি স্পষ্ট করে বলি যে এটি ZSH এর সাথে কাজ করবে না।
jturolla

1
নেটকাট দিয়ে মাকিংয়ের চেয়ে এটি ভাল। বখশিশের জন্য ধন্যবাদ!
জনবাইল

3
এটি আমার মধ্যে সবচেয়ে আশ্চর্যজনক জিনিস হতে পারে।
ফ্রব করুন

4
কোনও কারণে, উবুন্টু 14.04 এ 127.0.0.1পরিবর্তে আমার ব্যবহার করা দরকার localhost। (হ্যাঁ, আমি আছে localhostমধ্যে /etc/hosts।)
tuomassalo

3
/dev/udp/একটি আসল ফাইল নয়। এটি কেবলমাত্র একটি ফাইলের নাম ব্যাশ দ্বারা বিশেষভাবে ব্যাখ্যা করা।
পিটার আইসেন্ট্রাট

46

আমি -q1আমার নেটকেটে বিকল্পটি পাইনি । পরিবর্তে আমি -w1বিকল্পটি ব্যবহার করেছি । নীচে যে কোনও হোস্ট এবং বন্দরে ইউডিপি প্যাকেট প্রেরণ করতে আমি ব্যাশ স্ক্রিপ্টটি করেছি:

#!/bin/bash

def_host=localhost
def_port=43211

HOST=${2:-$def_host}
PORT=${3:-$def_port}

echo -n "$1" | nc -4u -w1 $HOST $PORT

ওএস এক্স এটি কাজ করে: "ইকো-এন" পরীক্ষা "| এনসি -4ইউ - ডাব্লু লোকহোস্ট 9999" যেমন সিমোনডাব্লু বলেছেন
সাইমন আনসওয়ার্থ

14

একটি বর্তমান নেটকাট (v0.7.1) এ আপনার একটি-স্যুইচ রয়েছে:

-c, --close                close connection on EOF from stdin

তাই,

echo "hi" | nc -cu localhost 8000

কৌতুক করা উচিত।


3
জেনে রাখা গুরুত্বপূর্ণ যে এটি কেবল জিএনইউ নেটকাটের ক্ষেত্রেই সত্য, তবে বিএসডি নেটকাটের ক্ষেত্রে নয়।
মারসফট

স্পষ্টতার জন্য, লিনাক্স-ভিত্তিক নেটক্যাট সহ, -c বিকল্পের জন্য একটি আর্গুমেন্ট হিসাবে একটি কমান্ড প্রয়োজন, যা "প্রদত্ত যুক্তিটি / bin / ব্যাশের মাধ্যমে সম্পাদন করে" - কমান্ডলিনাক্স
ব্লেক নিল

5

নেটক্যাট প্রতি লাইনে একটি প্যাকেট প্রেরণ করে। সুতরাং আপনি ভাল আছেন। আপনি যদি আরও জটিল কিছু করেন তবে আপনার অন্য কিছু প্রয়োজন হতে পারে।

আমি যখন টের পেলাম তখন ওয়্যারশার্কের সাথে বোকা বানাচ্ছিলাম। জানি না এটি সাহায্য করে কিনা।


3
আমি মনে করি এটি কেবলমাত্র টিসিপি-র জন্য সঠিক। ইউডিপি সহ, এটি একটি প্যাকেটে একাধিক লাইন প্রেরণ করবে (যদি তারা ফিট হয়)।
সেলসেকে

1
না, কেবল পরীক্ষা করুন echo -n "hello\nworld" >/dev/udp/localhost/514এবং আপনি 2 লাইন পাবেন
bebbo

5

আমার একই সমস্যা ছিল তবে আমি -w 0কেবল একটি প্যাকেট প্রেরণ এবং প্রস্থান করার বিকল্পটি ব্যবহার করি । আপনার এই আদেশটি ব্যবহার করা উচিত:

echo -n "hello" | nc -4u -w0 localhost 8000

এনসি 1.10-41 + বি 1 গ্রহণ করে না -w0। ত্রুটি: অবৈধ
ওয়েট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.