यूनिक्स कमांड जैसे पिंग, एसएसएच, काम ठीक है लेकिन सॉकेट-आधारित प्रोग्राम कनेक्ट में विफल रहे हैं

मुझे एक ऐसे मशीन के बारे में एक परीक्षक से फोन आया जो हमारे सॉफ़्टवेयर को विफल कर रहा था। जब मैंने समस्या मशीन की जांच की, तो मुझे जल्दी से एहसास हुआ कि समस्या काफी कम स्तर थी: इनबाउंड नेटवर्क यातायात ठीक काम करता है। पिंग और एसएसएच जैसे मूल आउटबाउंड कमांड ठीक काम कर रहे हैं, लेकिन connect() कॉल से जुड़ी कुछ भी "होस्ट करने के लिए कोई रास्ता नहीं" के साथ विफल रही है।

उदाहरण के लिए - यह विशेष मशीन पर यह प्रोग्राम 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;

इस मशीन को तोड़ने के बारे में कोई सुझाव? यह एसयूएसई -10.2 चल रहा है।

0

4 उत्तर

मैं उस मशीन पर फ़ायरवॉल कॉन्फ़िगरेशन की जांच करूंगा। आईपीटीबल्स के लिए यह संभव है (मुझे लगता है कि आपके एसयूएसई में आईपीटीबल्स फ़ायरवॉल है) केवल पिंग आईसीएमपी पैकेट को टफ करने के लिए सेटअप किया जा सकता है।

0
जोड़ा
Yow! मुझे लगता है कि आपके पास यह सही है - लेकिन गलत मशीन पर। इसके बारे में सोचने के बाद, मैंने मशीन पर iptables को अक्षम करने का प्रयास किया कि मैं "काम कर रहा था" और मशीन "टूटी हुई" काम करना शुरू कर दिया! धन्यवाद!
जोड़ा लेखक Mike Heinz, स्रोत

क्या फ़ायरवॉल बंद हो गया है?

0
जोड़ा
दूसरी मशीन पर फ़ायरवॉल समस्या प्रतीत होता है। सुझावों के लिए धन्यवाद!
जोड़ा लेखक Mike Heinz, स्रोत

फ़ायरवॉल हमेशा संभव है, लेकिन यह कहता है कि एसएसएच कनेक्ट हो सकता है, इसलिए यह असंभव लगता है। मैं कहूंगा कि मार्गों पर एक नज़र डालें (लिनक्स पर "मार्ग" कमांड), और सुनिश्चित करें कि आपके पास दो डिफ़ॉल्ट मार्ग, या अजीब या कुछ भी नहीं है। सब कुछ मैं टेस्ट पिंग और एसएसएच और आपके प्रोग्राम को एक ही दूरस्थ आईपी पर कहूंगा, और यदि वे सभी असफल हो जाते हैं, तो आपके पास एक रूट समस्या है। यदि आपका प्रोग्राम केवल विफल रहता है, तो आपके पास शायद फ़ायरवॉल समस्या या प्रोग्राम समस्या हो सकती है :)

0
जोड़ा

कनेक्ट() को उसी होस्ट पर इंगित करने का प्रयास करें: पोर्ट जहां आपका एसएसएच कमांड काम करता है। साथ ही, ध्यान रखें कि कुछ फ़ायरवॉल विभिन्न उपयोगकर्ता खातों के लिए अलग-अलग नियम लागू कर सकते हैं (और कभी-कभी विभिन्न निष्पादन योग्य के लिए)। इसलिए, सुनिश्चित करें कि आप एक ही उपयोगकर्ता खाते के तहत एसएसएच और अपना टेस्ट ऐप चलाएं और एसयूआईडी एसएसएच के लिए सेट नहीं है।

0
जोड़ा