একটি হেক্স স্ট্রিংকে বাইনারি রূপান্তর করুন এবং নেটক্যাট দিয়ে প্রেরণ করুন


46

আমার কাছে একটি বাইনারি ফাইল রয়েছে যা আমি এটি দিয়ে পাঠাতে পারি netcat:

$ nc -l localhost 8181 < my.dat

ফাইলটিতে এটি রয়েছে:

$ xxd my.dat
0000000: 0006 3030 3030 4e43                      ..0000NC

আমি সত্যিই যা করতে চাই তা হেক্স স্ট্রিং সরাসরি পাঠানো। আমি এটি চেষ্টা করেছি:

$ echo '0006303030304e43' | nc -l localhost 8181

তবে উপরের কমান্ডটি কেবলমাত্র আসকি স্ট্রিংকে সরাসরি প্রেরণ করে nc

উত্তর:


55

আমি -r এবং -p সুইচটি এক্সএক্সডি ব্যবহার করেছি :

$ echo '0006303030304e43' | xxd -r -p | nc -l localhost 8181

@ গিলস জবাব থেকে অনুপ্রেরণার জন্য ধন্যবাদ, এখানে একটি পার্ল সংস্করণ দেওয়া হয়েছে:

$ echo '0006303030304e43' | perl -e 'print pack "H*", <STDIN>' | nc -l localhost 8181

শীর্ষস্থানীয় \ x কেটে ফেলা হলে পোস্টগ্র্রেসের বাইতি হেক্স ফর্ম্যাটের জন্য দুর্দান্ত কাজ করে।
নাথানচাহিল

ধন্যবাদ! ফায়ারফক্স অভিধান পরীক্ষা করার জন্য দুর্দান্ত কাজ করে ম্যানিফেস্টে হজম করে! md5sum ../it/manifest.json | awk '{print $1}' | xxd -r -p | hd
অ্যাভিও

26

xxdবা ছাড়াই এখানে একটি সমাধান perl:

যদি echoআপনার শেলের অন্তর্নির্মিত এটি সমর্থন করে ( bashএবং zshকরুন, তবে না dash), আপনাকে কেবল ডান ব্যাকস্ল্যাশ পলায়ন ব্যবহার করতে হবে:

echo -ne '\x00\x06\x30\x30\x30\x30\x4e\x43' | nc -l localhost 8181

আপনার যদি জিএনইউ কোর্টিলস (লিনাক্স সিস্টেমে প্রায় মানক) বা ব্যস্তবক্স/bin/echo থেকে থাকে তবে আপনি এটিও ব্যবহার করতে পারেন।

সঙ্গে sedআপনি একটি পলান প্যাটার্ন তৈরি করতে পারেন:

$ echo '0006303030304e43' | sed -e 's/../\\x&/g'
\x00\x06\x30\x30\x30\x30\x4e\x43

সম্মিলিত:

echo -ne "$(echo '0006303030304e43' | sed -e 's/../\\x&/g')" | nc -l localhost 8181

খুব সুন্দর সমাধান!
ক্রিস তুষার

2
প্রতিস্থাপন করা হচ্ছে echoসঙ্গে printfঅপসারণ অনুমান কাজ যদি প্রতিধ্বনি সমর্থন বৈশিষ্ট্য বর্ধিত বা না। printf "$(echo '0006303030304e43' | sed -e 's/../\\x&/g')" | nc -l localhost 8181
যাক্কো

12

যদি আপনার কাছে থাকে তবে xxdএটি সহজ: এটি হেক্সাডেসিমাল এবং এ থেকে রূপান্তর করতে পারে।

echo '0006303030304e43' | xxd -r -p | nc -l localhost 8181

আমি মনে করি না যে কেবলমাত্র পসিক্স সরঞ্জাম ব্যবহার করে হেক্সাডেসিমালকে বাইনারিতে রূপান্তর করার কোনও যুক্তিসঙ্গত (এবং যুক্তিসঙ্গত দ্রুত) উপায় আছে। এটি পার্লে মোটামুটি সহজভাবে করা যায়। নিম্নলিখিত স্ক্রিপ্টটি হেক্সাডেসিমালকে বাইনারি রূপান্তরিত করে, কোনও ইনপুট অক্ষরকে উপেক্ষা করে যা হেক্সাডেসিমাল নয়। এটি অভিযোগ করে যে কোনও ইনপুট লাইনে হেক্সাডেসিমাল সংখ্যাগুলির একটি বিজোড় সংখ্যা রয়েছে।

#!/usr/bin/env perl
$^W = 1;
$c = undef;
while (<>) {
    tr/0-9A-Fa-f//cd;
    if (defined $c) { warn "Consuming $c"; $_ = $c . $_; $c = undef; }
    if (length($_) & 1) { s/(.)$//; $c = $1; }
    print pack "H*", $_;
}
if (!eof) { die "$!"; }
if (defined $c) { warn "Odd number of hexadecimal digits"; }

আপনার যদি সত্যিই পসিক্সে লেগে থাকা প্রয়োজন (উদাহরণস্বরূপ এমবেডেড ডিভাইসে) তবে আমি হেক্সাডেসিমালের পরিবর্তে বেস 64 ব্যবহার করার পরামর্শ দিই । আপনি বেস 64 ডিকোড করতে ইউডিকোড ব্যবহার করতে পারেন । ইনপুটটিতে ইউনকোড দ্বারা উত্পাদিত শিরোনাম বিন্যাস এবং শেষ লাইন থাকা আবশ্যক , এটি কাঁচা বেস 64 হতে পারে না।

uudecode <<EOF | nc -l localhost 8181
begin-base64 644 -
AAYwMDAwTkM=
====
EOF

1

এটির মতো: https://stackoverflow.com/questions/1604765/linux-shell-scriptting-hex-string-to-bytes/47253233#47253233

আমি একটি সরঞ্জাম লিখেছি যা স্টিডিন থেকে বিভিন্ন রূপান্তর সম্পাদন করে এবং ফলাফলকে স্টাডআউটে ফেলে দেয়। cryptocli ddকেবলমাত্র সেই রূপান্তরগুলি করবে এবং অন্য কিছুই হবে না।

echo -n 0006303030304e43 | cryptocli dd -decoders hex | nc -l localhost 8081

আপনার জন্য কাজ করবে।

সরঞ্জামটি মুক্ত উত্স, আপনি এটি এখানে খুঁজে পেতে পারেন: https://github.com/tehmoon/cryptocli

সম্পাদনা:

আপনি আমার সরঞ্জামটি ব্যবহার করে সরাসরি হেক্সে এনকোড করতে পারেন:

cat my.dat | cryptocli dd -encoders hex | nc -l localhost 8081

(1) 616263এই প্রশ্নের সাথে কী করার আছে? প্রশ্ন থেকে ডেটা ব্যবহার করুন। (২) এটি কীভাবে কাজ করে তা ব্যাখ্যা করতে পারেন? আরও পরিষ্কার এবং আরও সম্পূর্ণ করতে দয়া করে মন্তব্যে প্রতিক্রিয়া জানান না, আপনার উত্তরটি সম্পাদনা করুন।
জি-ম্যান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.