我在ForeFront TMG 7.0后面有一台计算机和一台公共远程FTP服务器。TMG客户端已安装。Windows防火墙已关闭。防病毒:McAfee病毒扫描企业版(8.8)+AntySpyware Enterprize(8.8)-无附加组件。杀毒软件进行了断断续续的测试。
无法通过Java和Php连接到服务器。Filezilla、explorer.exe和Go编写的程序连接起来没有问题。
对于Java,我得到ConnectionRejected错误:
java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at org.apache.commons.net.SocketClient.connect(SocketClient.java:182)
at org.apache.commons.net.SocketClient.connect(SocketClient.java:203)
无论我如何尝试通过Java:连接
- Apache FTP客户端(主动/被动-本地/远程/两者兼有)
- Apache FTPS客户端(所有变体为主动|被动)
- 索伦FTP客户端(相同)
- 套接字套接字=新套接字(主机,21)
等待5分钟后,它会延迟连接超时。错误为超时异常。所有varian都使用直接连接、全局代理、ftp代理、http代理以及所有这些的组合进行测试。所有变体都通过IP和主机名进行测试。
无法连接的Php代码示例:
<?php
$host = "ftphost";
$connect = ftp_connect($host,21);
if(!$connect)
{
echo("Error: $host");
exit;
}
else
{
echo("Cheers: $host");
}
?>
但是FileZilla连接起来没有问题。资源管理器连接没有问题。Go编写的程序连接起来没有问题。
有什么想法可以阻止java和PHP吗?如何计算阻止JRE和Apache的策略或程序设置?
您可以尝试使用以下PHP脚本调试该问题:
<?php
$host = "xx.xx.xx.xx";
$ftpUser = "annonymous";
$ftpPass = null;
$checkPort = @fsockopen($host, 21, $errno, $errstr, 10);
if($checkPort!==false){
echo "can able to connect ftp server";
$conn_id = ftp_connect($host);
if($conn_id!==false){
echo "'n Ftp server available and connected trying to logged in";
$loginStatus = ftp_login($conn_id, $ftpUser, $ftpPass);
if($loginStatus!==false){
echo "'n Connected to ftp";
} else {
echo "'n Please check credentials";
}
}
} else {
echo "server can't reach to ftp server";
}
?>
只有我的两美分。这是我使用了两年的Ftp代码,主要问题是服务器端。如果启用被动模式,则需要在防火墙中打开一系列被动端口,如2000:4000,以保持连接不中断。此外,请确保为这些被动端口配置了Ftp服务器。你可以在中阅读更多https://slacksite.com/other/ftp.html
import config.AppConfigPropertyReader;
import model.FtpClients;
import org.apache.commons.io.FileUtils;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.commons.net.ftp.FTPSClient;
import org.apache.log4j.Logger;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class ConnectRemote {
private static Logger logger = Logger.getLogger(ConnectRemote.class);
private static String RemoteFtpLogServerHost = AppConfigPropertyReader.getProperty("RemoteFtpLogServerHost");
private static String RemoteFtpLogServerTomcatLog = AppConfigPropertyReader.getProperty("RemoteFtpLogServerTomcatLog");
private static String RemoteFtpLogServerTomcatLogPassword = AppConfigPropertyReader.getProperty("RemoteFtpLogServerTomcatLogPassword");
private static String LocalTomcatSistemLogPath = AppConfigPropertyReader.getProperty("LocalTomcatSistemLogPath");
public static void starttransfers() {
List<FtpClients> ftpuserlist = new ArrayList<FtpClients>();
ftpuserlist.add(new FtpClients(RemoteFtpLogServerTomcatLogPassword, RemoteFtpLogServerTomcatLog, LocalTomcatSistemLogPath));
for (FtpClients ftpuser : ftpuserlist) {
try {
ftps = new FTPSClient();
//ftps.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));
ftps.connect(RemoteFtpLogServerHost, 21);
int reply = ftps.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftps.disconnect();
throw new IOException("Exception in connecting to FTPS Server");
}
if (ftps.login(ftpuser.getUser(), ftpuser.getPassword())) {
ftps.execPBSZ(0);
//ftps.execPROT("P"); You have to use reuse ssl enabled ftp server
ftps.setBufferSize(1024000);
ftps.changeWorkingDirectory("/");
ftps.setFileType(FTP.BINARY_FILE_TYPE);
ftps.setFileTransferMode(FTP.COMPRESSED_TRANSFER_MODE);
ftps.enterLocalPassiveMode();
ftps.setControlKeepAliveTimeout(300);
//do your logic
if (ftps.isConnected()) {
try {
ftps.logout();
ftps.disconnect();
ftps = null;
ftpuserlist.clear();
} catch (IOException e) {
logger.error("Ftps Client Closing " + e.getMessage());
}
}
} else {
logger.error("Cannot Login to Remote Ftps Server");
}
} catch (Exception e) {
e.printStackTrace();
logger.error("Exception" + e.getMessage());
}
}
}
}