أوامر Unix مثل ping و ssh تعمل بشكل جيد ولكن البرامج التي تعتمد على مأخذ التوصيل تفشل في الاتصال

تلقيت مكالمة من أحد المختبرين بشأن جهاز كان يفشل في استخدام برنامجنا. عندما فحصت آلة المشكلة ، أدركت بسرعة أن المشكلة كانت منخفضة المستوى إلى حد ما: تعمل حركة مرور الشبكة الواردة بشكل جيد. تعمل الأوامر الصادرة الأساسية مثل ping و ssh بشكل جيد ، ولكن أي شيء يشتمل على الاتصال connect() يفشل مع "لا يوجد مسار لاستضافة".

على سبيل المثال - في هذا الجهاز بالتحديد سيفشل هذا البرنامج في العبارة connect() لأي عنوان IP بخلاف 127.0.0.1 :

#!/usr/bin/perl -w
use strict;
use Socket;
my ($remote,$port, $iaddr, $paddr, $proto, $line);

$remote  = shift || 'localhost';
$port    = shift || 2345;  # random port
if ($port =~ /\D/) { $port = getservbyname($port, 'tcp') }
die "No port" unless $port;
$iaddr   = inet_aton($remote)           || die "no host: $remote";
$paddr   = sockaddr_in($port, $iaddr);

$proto   = getprotobyname('tcp');
socket(SOCK, PF_INET, SOCK_STREAM, $proto)      || die "socket: $!";
connect(SOCK, $paddr)    || die "connect: $!"; 
while (defined($line = )) {
    print $line;
}

close (SOCK)        || die "close: $!";
exit;

أي اقتراحات حول مكان كسر هذا الجهاز؟ انها تدير SUSE-10.2.

0
وأضاف تحرير
الآراء: 1

4 إجابة

أود التحقق من تكوين جدار الحماية على هذا الجهاز. فمن الممكن ل iptables (أعتقد أن SUSE الخاص بك iptables جدار الحماية) ليكون الإعداد للسماح الحوض الصغير فقط بينغ حزم ICMP.

0
وأضاف
يوو! أعتقد أنك على صواب - ولكن على الجهاز الخطأ. بعد التفكير في ذلك ، حاولت تعطيل iptables على الجهاز الذي على الرغم من أنني كنت "العمل" وبدأت الآلة التي كانت "مكسورة" العمل! شكر!
وأضاف المؤلف Mike Heinz, مصدر

هل تم إيقاف تشغيل جدار الحماية؟

0
وأضاف
يبدو أن جدار الحماية على الجهاز الآخر هو المشكلة. شكرا على الاقتراحات!
وأضاف المؤلف Mike Heinz, مصدر

جدار الحماية هو دائما ممكن ، لكنه يقول أن ssh يمكن الاتصال ، بحيث يبدو غير مرجح. أود أن أقول إلقاء نظرة على الطرق ("الطريق" على لينكس) ، وتأكد من عدم وجود مثل طريقين افتراضيين ، أو غريبين أو أيا كان. الكل في كل شيء أود أن أقول اختبار بينغ و ssh وبرنامجك على نفس IP البعيد ، وإذا فشلوا جميعا ، لديك مشكلة في الطريق. إذا فشل فقط برنامجك ، ربما لديك مشكلة في جدار الحماية أو مشكلة في البرنامج :)

0
وأضاف

حاول الإشارة() إلى نفس المضيف: المنفذ حيث يعمل أمر SSH الخاص بك. أيضًا ، ضع في اعتبارك أن بعض جدران الحماية يمكن أن تطبق قواعد مختلفة لحسابات مستخدم مختلفة (وأحيانًا لملفات تنفيذية مختلفة). لذلك ، تأكد من تشغيل ssh وتطبيق الاختبار الخاص بك تحت نفس حساب المستخدم وأنه لم يتم تعيين SUID لـ SSH.

0
وأضاف