bash - php reverse shell




كيف تنتظر منفذ مفتوح مع netcat؟ (4)

أحاول القيام dockerfile مخصصة مع جنكينز على ذلك. أود الانتظار حتى يكون المنفذ 8080 مفتوحًا بدلاً من القيام بـ "النوم 60" القبيح باستخدام netcat ولكنني لست واثقًا جدًا من نصوص bash و netcat.

فيما يلي مثال على ما أحاول فعله:

#!/bin/bash

opened=0

while [ "$opened"  == "0" ]; do
  echo "Waiting jenkins to launch on 8080..."
  nc -vz localhost 8080
done

echo "Jenkins launched"

أقترح الخطوط التالية:

## netcat version:
timeout 22 sh -c 'until nc -z $0 $1; do sleep 1; done' .com 443

## pure bash version:
timeout 22 bash -c 'until printf "" 2>>/dev/null >>/dev/tcp/$0/$1; do sleep 1; done' .com 443

يخرج كلا الأمرين حالما يتم تأسيس الاتصال ، ويحاول كل ثانية لمدة تصل إلى 22 ثانية.

لاحظ أنه بفضل رمز الخروج من أمر timeout هو 0 عندما يكون المنفذ متاحًا على خلاف ذلك 124 (إذا لم يتم إنشاء اتصال خلال وقت معين).


كما هو مقترح here ، يمكنك أيضًا القيام بما يلي إذا لم تكن مثبتة لديك ولكن فقط bash و coreutils :

#!/bin/bash

echo "Waiting jenkins to launch on 8080..."

while ! timeout 1 bash -c "echo > /dev/tcp/localhost/8080"; do   
  sleep 1
done

echo "Jenkins launched"

لقد وجدت هذه مشكلة شائعة بما فيه الكفاية لكتابة أداة مساعدة لانتظار فتح منفذ ، مع مهلة اختيارية:

# without timeout
wait-port localhost:8080

# timeout after a minute
wait-port -t 60000 localhost:8080

إنه مفتوح المصدر ومتوفر على github.com/dwmkerr/wait-port . نأمل أن يجد الآخرون ذلك مفيدًا!


للتوسع في إجابة user987339 ، إليك كيفية الانتظار بسهولة لمنفذ في المحطة الطرفية:

وظيفة waitport

أضف هذه الوظيفة إلى ملف الإعداد ~ / .bashrc الخاص بك:

waitport() {
    while ! nc -z localhost $1 ; do sleep 1 ; done
}

تسجيل الخروج ثم العودة لتحميل ~ / .bashrc. بعد ذلك ، قم بتشغيل هذا الأمر للتحقق من أن المنفذ 3000 يحتوي على خادم يستمع إليه:

$ waitport 3000
Connection to localhost port 3000 [tcp/hbci] succeeded!

تم التحقق من صحة هذا على نظام التشغيل MacOS. قد لا تعمل على Fedora / CentOS ، لأنها تفتقر إلى الخيار -z الخاص بـ netcat .





netcat