유닉스와 같은 명령어 ping,ssh,작동 하지만 소켓-기반 프로그램은 실패에 연결

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

  •  01-07-2019
  •  | 
  •  

문제

부터 전화를 받았는 검사에 대해 기계가 실패하는 우리의 소프트웨어입니다.할 때 내가 문제를 검토하는 기계,나는 빠르게 깨달은 문제가 상당히 낮은 수준:인바운드 네트워크 트래픽을 작동합니다.기본 아웃바운드 같은 명령을 핑 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 packets.

다른 팁

은 방화벽 설정니까?

방화벽이 항상 가능하지만,그가 말하는 ssh 에 연결할 수 있도록 가능성이 보인다.내가 말할 것에 노선("로"명령 리눅스에서),및 있는지 확인을 하지 않아 두 개의 기본 경로,또는 이상한 사람 또는 어떤 것이다.모든 나는 핑 테스트 및 ssh 및 귀하의 프로그램에서 같은 먼 IP,그리고 만약 그들이 모두 실패하는,당신은 경로를 문제입니다.는 경우에만 귀하의 프로그램이 실패하면,당신은 아마 중 방화벽 문제 또는 프로그램은 문제가:)

도를 가리키는 connect()동일한 호스트:포트 SSH 명령을 사용할 수 있습니다.또한,염두에 두는 몇 가지 방화벽 적용할 수 있는 다양한 규칙을 다른 사용자 계정(그리고 때로는 서로 다른 실행파일).따라서,를 실행하고 있는지 확인하십시오 ssh 및 테스트 응용 프로그램에서 같은 사용자 계정과는 SUID 설정되지 않습니다 SSH.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top