سؤال

أنا أحاول أن تلعب حولها مع netcat لمعرفة المزيد عن كيف يعمل HTTP.أود أن السيناريو بعض من ذلك في باش أو Perl, ولكن لقد ضربت على حجر عثرة في وقت مبكر في بلدي التجارب.

إذا قمت بتشغيل netcat مباشرة من موجه الأوامر واكتب في الرأس طلب يعمل و تلقي رؤوس ملقم ويب انا التحقيق.

يعمل هذا:

    [romandas@localhost ~]$ nc 10.1.1.2 80
    HEAD / HTTP/1.0

    HTTP/1.1 200 OK
    MIME-Version: 1.0
    Server: Edited out
    Content-length: 0
    Cache-Control: public
    Expires: Sat, 01 Jan 2050 18:00:00 GMT

    [romandas@localhost ~]$

ولكن عندما أضع نفس المعلومات في ملف نصي و ذلك لتغذية netcat من خلال الأنابيب أو عن طريق إعادة توجيه استعدادا البرمجة, لا عودة رؤوس.
نص الملف يتكون من رئيس الطلب اثنين من أسطر:

HEAD / HTTP/1.0

إرسال نفس المعلومات عن طريق صدى أو printf لا يعمل ايضا.

$ printf "HEAD / HTTP/1.0\r\n"; |nc -n 10.1.1.2 80
$ /bin/echo -ne 'HEAD / HTTP/1.0\n\n' |nc 10.1.1.2 80

أي أفكار ما أفعله خطأ ؟ لست متأكدا إذا كان باش المشكلة صدى المشكلة ، أو netcat المشكلة.

راجعت المرور عبر يريشارك ، ناجح طلب (يدويا كتبته) يرسل زائدة في السطر الثاني الحزمة ، بينما صدى ، printf و ملف نصي طرق الحفاظ على السطر في نفس الحزمة ولكن لست متأكدا ما هي أسباب هذا السلوك.

هل كانت مفيدة؟

المحلول

تحتاج إلى الكثير من " ", و أيضا أن أقول netcat أن تنتظر ردا. printf "HEAD / HTTP/1.0\r\n\r\n" |nc -n -i 1 10.1.1.2 80 أو ما شابه يجب أن تعمل.

نصائح أخرى

طريقة أخرى هي استخدام ما يسمى 'heredoc' الاتفاقية.

$ nc -n -i 1 10.1.1.2 80 <<EOF
> HEAD / HTTP/1.0
>
> EOF

طريقة أخرى للحصول على nc انتظار الرد لإضافة النوم إلى المدخلات.على سبيل المثال

(printf 'GET / HTTP/1.0\r\n\r\n'; sleep 1) | nc HOST 80

يمكنك استخدام أدناه netcat الأمر أن تجعل النظام الخاص بك مثلا خادم الويب:

MYIP=$(ifconfig eth0|grep 'inet addr'|awk -F: '{print $2}'| awk '{print $1}')
while true; do echo -e "HTTP/1.0 200 OK\r\n\r\nWelcome to $MYIP" | sudo nc -l -p 80 ; done&

هذا الخط سوف تعمل أيضا ما يعادلها:

echo -e "HEAD / HTTP/1.1\nHost: 10.1.1.2\nConnection: close\n\n\n\n" | netcat 10.1.1.2 80
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top