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

StackOverflow https://stackoverflow.com/questions/96113

  •  01-07-2019
  •  | 
  •  

سؤال

تلقيت مكالمة من أحد المختبرين بشأن جهاز كان يفشل في برنامجنا.عندما قمت بفحص الجهاز الذي به مشكلة، أدركت بسرعة أن المشكلة كانت ذات مستوى منخفض إلى حد ما:حركة مرور الشبكة الواردة تعمل بشكل جيد.الأوامر الصادرة الأساسية مثل 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 = <SOCK>)) {
    print $line;
}

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

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

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

المحلول

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

نصائح أخرى

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

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

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top