কিভাবে ইতিমধ্যে একটি প্রতিষ্ঠিত সংযোগ নেট netcat বাইনারি তথ্য পাঠাতে?


2

আমি netcat বাইনারি তথ্য পাঠাতে নিম্নলিখিত করতে পারেন:

echo -e '\x80' | nc host port

কিন্তু আমি এভাবে এটি করতে চাই না, আমি যা চাই তা হল একটি সার্ভারের সাথে সংযোগ স্থাপন করা:

nc 192.168.1.115 12345

এবং তারপর কিছু পাঠ্য পাঠান:

aaaaaaaaaabbbbbbbbbbccccccccccc

এবং তারপর কিছু বাইনারি তথ্য পাঠান:

0x80 0xF4 0x12

আমি এটা কিভাবে করবো?


1
আমি আপনি ব্যবহার করতে পারে echo -e '\x80\xF4\x12' | xclip -i অন্য টার্মিনালে, তারপর মধ্যে পেস্ট করুন nc টার্মিনাল, কিন্তু টার্মিনাল ইনপুট সেটিংস উপায় হচ্ছে এবং আমি জানি না কিভাবে nc এই সেট করে, অথবা আমি যে সেটিংস সঙ্গে কাজ করবে খুঁজে পেতে পারেন stty ... ; cat | xxd ; stty sane
AFH

আপনি কী প্রেরণ করার চেষ্টা করছেন এবং কীভাবে - ফাইল / কীবোর্ড ইনপুট / ইত্যাদি সম্পর্কে আরো জানতে দরকারী হবে ... আপনি কি রিমোটের প্রত্যাশিত প্রত্যাশাটির একটি উদাহরণ দিতে পারেন?
Attie

উত্তর:


5

দ্রষ্টব্য: এই সমাধানটি অনুসরণ করার সময়, একক শেল সেশনে কমান্ড টাইপ করুন (অথবা একটি স্ক্রিপ্ট ব্যবহার করুন) যদি না অন্যথায় বলা হয়। এটি কারণ এটি ভেরিয়েবল এবং ফাইল বর্ণনাকারীগুলিকে ব্যবহার করে, তারা সরাসরি তাদের মূল সেশনের বাইরে উপলব্ধ নয়।

একটি অস্থায়ী ফিফ তৈরি করুন। একটি অস্থায়ী ফাইল তৈরি করার সঠিক উপায় রয়েছে mktemp। দুর্ভাগ্যবশত এটি fifos তৈরি করতে পারবেন না। এটি যদিও একটি অস্থায়ী ডিরেক্টরি তৈরি করতে পারে:

tmpd=`mktemp -d`
tmpf="$tmpd"/fifo
mkfifo "$tmpf"
printf "%s\n" "$tmpf"  # just to know the path to the fifo, it may be useful later

বিকল্পভাবে আপনি কিছু নির্দিষ্ট বা অ্যাড-হক অবস্থানের মাধ্যমে হাতে নামযুক্ত ফিরো তৈরি করতে পারেন। এটা আপনার উপর নির্ভর করছে.

একটি পটভূমি প্রক্রিয়া তৈরি করুন যা কোনও সার্ভারে ফিফো পড়বে এবং ডেটা পাস করবে:

nc 192.168.1.115 12345 < "$tmpf" &
ncpid=$!  # PID may be useful later

মনোযোগ দিতে হলে nc prematurely প্রস্থান না। অনুগ্রহ করে সংযোগটি নিজেই বা সার্ভারের সাথে কোনও সমস্যা নেই বলে মনে হচ্ছে, উপরের পটভূমি কমান্ডটি ফোনের মাধ্যমে প্রথম গুচ্ছ তথ্য প্রেরণ শেষ না হওয়া পর্যন্ত সংযুক্ত থাকবে। কিন্তু আপনি এটি খোলা থাকতে এবং একাধিক লেখা গ্রহণ করতে চান, তাই ফিফো খুলুন এবং এটি বন্ধ করবেন না (এখনো):

exec 3> "$tmpf"

এখন আপনি ফিফোর মাধ্যমে যা চান তা পাঠাতে পারেন এবং ব্যাকগ্রাউন্ড সংযোগটি অব্যাহত থাকে:

echo abcd      >&3  # sends text
echo -e '\x80' >&3  # sends "binary"
cat /etc/issue >&3  # sends file
cat            >&3  # type whatever you want, terminate with Ctrl+D

এই কমান্ডের যেকোনো একটির পরিবর্তে পিনোয়ের পথের সাথে আহ্বান করা যেতে পারে &3, যদি আপনি শুধুমাত্র পথ জানেন। পথটি জানার জন্য, আপনি একই থেকে বাফফোতে লিখতে পারেন অন্য শেল অধিবেশন:

cat > /path/to/the/fifo  # type whatever you want, terminate with Ctrl+D

অথবা আপনি অন্য সেশনে অনুরূপ পদ্ধতিতে একটি বর্ণনাকারী খুলতে পারেন। আপনি যাই হোক না কেন পিনো লিখুন, দী nc এটি একটি একক সংযোগে রিমোট সার্ভারে প্রেরণ করবে।

কিন্তু জাতি শর্ত সতর্কতা অবলম্বন করা। একটি একক শেল সেশনের ভিতরে একটি একক বর্ণনাকারী ব্যবহার করা তাদের এড়িয়ে চলার একটি ভাল উপায়।

আপনি প্রয়োজন যাই হোক না কেন তথ্য পাস, সমাপ্ত nc এবং মূল শেল সেশনে বর্ণনাকারী বন্ধ করুন:

kill $ncpid
exec 3>&-

কিছু পরিস্থিতিতে উল্লেখ্য একমাত্র পরের কমান্ড ব্যাকগ্রাউন্ড তৈরি করতে যথেষ্ট nc প্রস্থান; এটি আপনি কি করেছেন এবং আপনি কি এখনও ফিরোতে করছেন তার উপর নির্ভর করে। এই কারণে আমি হত্যা করতে বেছে নিলাম nc স্পষ্টভাবে।

অস্থায়ী ডিরেক্টরি এবং এর সামগ্রী (যেমন পিজো) সরান:

rm -r "$tmpd"

চূড়ান্ত নোট:

এটা করা প্রয়োজন হয় না nc প্রথম স্থানে পটভূমি মধ্যে। আপনি এটি একটি টার্মিনালে চালাতে পারেন, অন্যটি থেকে ফিফো (তার পথ জানার) লিখুন। এই ভাবে আপনি সহজেই তার রাষ্ট্র নিরীক্ষণ করতে পারেন। দরকারি আপনার প্রয়োজন এই সমাধান।


আমি এই জন্য অনেক অনুসন্ধান, আপনাকে ধন্যবাদ!
bitcell

1

আপনি একটি নামযুক্ত পাইপ থেকে কিছুটা কৌশল নিয়ে এটি পেতে পারেন:

remote$ nc -v -n -l -p 8888 > /tmp/data
Listening on [0.0.0.0] (family 0, port 8888)
Connection from 10.0.3.1 47108 received!

local:1$ mkfifo /tmp/fifo
local:1$ nc -v -n <>/tmp/fifo 10.0.3.66 8888
Connection to 10.0.3.66 8888 port [tcp/*] succeeded!

পিজো রিড-লেখন খুলতে গুরুত্বপূর্ণ (অথবা অন্যরকম নিরপেক্ষ প্রক্রিয়া আছে sleep 9999 >/tmp/fifo লেখার জন্য এটি খোলা রাখা) অন্যথায় প্রথম লেখা (শেষ) লিখুন নেটক্যাটের পঠন লুপটি শেষ হবে। অত: পর <>

local:2$ echo aaaaaaaaaabbbbbbbbbbccccccccccc > /tmp/fifo
local:2$ cat /bin/ls > /tmp/fifo # sends the binary contents of the file /bin/ls, which would probably garble the input or output
local:2$ cat > /tmp/fifo
Some more interactive text

(local:1$ )
^C

remote$ od -c /tmp/data|head -4
0000000   a   a   a   a   a   a   a   a   a   a   b   b   b   b   b   b
0000020   b   b   b   b   c   c   c   c   c   c   c   c   c   c   c  \n
0000040 177   E   L   F 002 001 001  \0  \0  \0  \0  \0  \0  \0  \0  \0
0000060 003  \0   >  \0 001  \0  \0  \0   0   T  \0  \0  \0  \0  \0  \0

আপনার উত্তরটি আমার মত একই পদ্ধতি ব্যবহার করে, আমি লেখার সময় এটি উপস্থিত হয়েছিল (হ্যাঁ, একটি ভাল উত্তর লেখার এবং পরীক্ষার জন্য আমাকে অনেক সময় লাগে)। আমার উত্তরটি আপনাকে অবহেলা করা কিছু বিষয় উল্লেখ করে (উদাঃ অস্থায়ী ফাইল (গুলি), জাতি শর্তগুলি সঠিকভাবে পরিচালনা করা) তাই আমি এটি থাকার অনুমতি দিই। তবুও আপনার জন্য +1।
Kamil Maciorowski

প্রকৃতপক্ষে আমি নিরাপত্তা এবং সর্বোত্তম ব্যবহারযোগ্যতা সম্পর্কে যত্ন নিই না। আপনি একটি ব্যবহার করার জন্য প্রস্তুত উত্তর তৈরি।
A.B

0

নিম্নলিখিত কাজ মনে হচ্ছে:

while read -r; do echo -en "$REPLY" | nc ...; done

এই আপনি অন্তর্ভুক্ত করতে পারবেন \xNN আপনার স্বাভাবিক ডেটা সহ অব্যাহতি ক্রম, যেমন:

aaaaaaaaaabbbbbbbbbbccccccccccc\x80\xF4\x12

কোন আক্ষরিক ডবল মনে রাখবেন \ আপনার টেক্সট ইনপুট অক্ষর। উল্লেখ্য যে ব্যবহার read -r এবং $REPLY একটি পরিবর্তনশীল পরিবর্তে নেতৃস্থানীয় এবং পিছনে খালি খালি stripping বন্ধ।

এটি বাফারের শেষে একটি নতুন লাইন যুক্ত করে না, তাই আপনাকে অবশ্যই বাদ দিতে হবে n থেকে বিকল্প echo আদেশ বা টাইপ করুন \x0a যেখানে আপনি একটি নতুন লাইন চান।

আমি সেট আপ করতে পারবেন না nc বর্তমানে, কিন্তু আমি পরীক্ষা করেছেন:

while read -r; do echo -en "$REPLY" | cat | xxd; done

পরীক্ষার জন্য, আপনি ব্যবহার করতে পারেন od -ct x1 যদি না থাকে xxd; বা ব্যবহার od -c যদি আপনি octal বাইনারি অক্ষর দেখতে খুশি। আপনি বাদ দিতে পারেন cat | পাইপ থেকে: আমি এটি সম্ভবত একটি ভাল সিমুলেশন ব্যবহার অন্তর্ভুক্ত nc


0

আপনি যদি সময়ের আগে দুটি টুকরা তথ্য জানেন তবে এইটি চেষ্টা করুন:

$ ( echo "aaabbbccc"; echo -en "\x80\xf4\x12" ) | hexdump -Cv
00000000  61 61 61 62 62 62 63 63  63 0a 80 f4 12           |aaabbbccc....|
0000000d

আপনি আরও নিয়ন্ত্রণ রাখতে সক্ষম হবেন (কীবোর্ড ব্যবহার করুন, ইত্যাদি ...), তারপর চেষ্টা করুন:

$ ( cat; cat | xxd -r -p ) | hexdump -Cv
aaabbbccc
80f412
00000000  61 61 61 62 62 62 63 63  63 0a 80 f4 12           |aaabbbccc....|
0000000d

নোট: আপনি টিপুন জন্য ctrl + + ডি প্রতিটি শেষ cat... তাই এখানে আমি টাইপ (সহ প্রত্যাবর্তন গুলি - EOT লাইনের শুরুতে অবশ্যই উপস্থিত হওয়া উচিত):

aaabbbccc
^D
80f412
^D
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.