সকেট বার্তা প্রেরণের জন্য সহজ শেল স্ক্রিপ্ট


16

পরীক্ষার উদ্দেশ্যে আমাকে শেল স্ক্রিপ্ট তৈরি করতে হবে যা দূরবর্তী আইপি> পোর্টের সাথে সংযুক্ত হয় এবং একটি সাধারণ পাঠ্য টিসিপিআইপি সকেট বার্তা প্রেরণ করে।

উত্তর:


18

nc( netcat) ব্যবহার করে ।

সার্ভার:

$ nc -l localhost 3000

ক্লায়েন্ট:

$ nc localhost 3000

সার্ভার এবং ক্লায়েন্ট উভয়ই স্ট্যান্ডার্ড আউটপুট / ইনপুট পড়বে এবং লিখবে।

সার্ভার এবং ক্লায়েন্ট উভয়ই একই মেশিনে থাকলে এটি কাজ করবে। অন্যথায় localhostসার্ভারের বাহ্যিক নাম পরিবর্তন করুন ।

কিছুটা আকর্ষণীয়, একটি "সার্ভার" যা আপনাকে দিনের সাথে সময় দেয় যা আপনি এটির সাথে সংযুক্ত হয়ে যদি একটি প্রেরণ করেন dএবং আপনি প্রেরণ করেন তবে কোনটি ছাড়বে নাq :

সার্ভার (ইন bash):

#!/bin/bash

coproc nc -l localhost 3000

while read -r cmd; do
  case $cmd in
    d) date ;;
    q) break ;;
    *) echo 'What?'
  esac
done <&"${COPROC[0]}" >&"${COPROC[1]}"

kill "$COPROC_PID"

ক্লায়েন্ট সেশন:

। এনসি লোকালহোস্ট 3000
ঘ
থু জানুয়ারী 12 18:04:21 সিইটি 2017
হ্যালো?
কি?
কুই

(সার্ভারটি পরে বেরিয়ে আসে q, কিন্তু ক্লায়েন্ট সনাক্ত করে না যে আপনি চাপ না দেওয়া পর্যন্ত এটি চলে গেছে Enter)।


2
ক্লায়েন্ট ডেটা প্রেরণ শেষ করার পরে সার্ভার যদি কোনও ফলাফল ctrl+cদেয়, ফলাফলটি দেখায় না। প্রতিধ্বনি ব্যবহার করে, যেমন echo "cookie" | nc localhost 9090, ক্লায়েন্টের আউটপুট স্ট্রিম বন্ধ হয়ে যাবে (ইওফ প্রেরিত) তবে ক্লায়েন্টটি এখনও সার্ভারের ফলাফলের জন্য অপেক্ষা করবে।
অ্যালিকেলজিন-কিলাকা

12

সাধারণ পরামর্শ সঙ্গে netcatভাল উপায়।

তবে bashএবং kshআপনি এটি করতে পারেন:

exec 3<>/dev/tcp/hostname/port
echo "request" 1>&3
response="$(cat <&3)"

কি 1>&3? এটি কী প্রতিনিধিত্ব করে তা সম্পর্কে আমি নিশ্চিত নই
আলেকজান্ডার মিলস

অন্য কথায়, কেন শুধু নয় echo "request" >&3, আমি অনুমান করি যে 1টি কেবলমাত্র অপ্রয়োজনীয়
আলেকজান্ডার মিলস

4

নেটকাট চেষ্টা করুন (যেমন এনসি)

echo GET / HTTP/1.0 | nc 0 80
HTTP/1.1 400 Bad Request
Date: Thu, 12 Jan 2017 13:44:23 GMT
Server: Apache/2.4.18 (Ubuntu)
Content-Length: 311
Connection: close
Content-Type: text/html; charset=iso-8859-1
  • উপরের নমুনায় আমি echo GET / HTTP/1.0আমার স্থানীয় http সার্ভারে একটি জিইটি ( ) প্রেরণ করি
  • আপনি যদি জটিল প্রোটোকল না চান তবে এটি কাজটি করতে পারে।

0

অনেক ক্ষেত্রেই আমার নেটকাট / সকেটে অ্যাক্সেস নেই। execবিতরণ করা কম্পিউটিং পরিবেশে বাশ ব্যবহার করার ক্ষেত্রে আমারও সমস্যা ছিল ।

এর প্রকোপটির কারণে, বিকল্প সমাধান হ'ল জিএনইউ এডাব্লু কে এর টিসিপি / আইপি ক্ষমতা ব্যবহার করা। এটি এর "দ্বিমুখী পাইপ" অপারেটরের আশেপাশে একটি সাধারণ সিনট্যাক্স সরবরাহ করে।

এখানে এই উত্স থেকে একটি পরিবর্তিত উদাহরণ যা সকেটের মাধ্যমে একটি টিসিপি বার্তা প্রেরণ করবে:

BEGIN {
 NetService = "/inet/tcp/0/cs.wisc.edu/finger"
 print "coke" |& NetService
 close(NetService)
}

ঠিকানার জন্য পূর্ণ বাক্য গঠন হল: /net-type/protocol/local-port/remote-host/remote-port। যখন local-port0 তে সেট করা হয় স্থানীয় হোস্ট পোর্টটি স্বয়ংক্রিয়ভাবে বেছে নেয় যা সাধারণত আপনি চান। gawkএর টিসিপি / আইপি নেটওয়ার্কিং ক্ষমতা সম্পর্কে আপনি এখানে আরও পড়তে পারেন :

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