我编写了一个应用程序来自动连接到我们不同的防火墙。它们都使用相同的前端。我们远程登录到 IP,他们会给出登录或注销消息,并要求输入用户名或密码。
我使用了这段代码:
public static void ConnectToFirewall(string strUsername, string strPassword, string strFirewallIp)
{
IPAddress[] ipaIpAddressCollection = Dns.GetHostAddresses(strFirewallIp);
IPEndPoint ipeIpEndPoint = new IPEndPoint(ipaIpAddressCollection[0], intPort);
Socket sckSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sckSocket.Connect(ipeIpEndPoint);
string strData = strUsername + "\r\n"+ strPassword + "\r\n";
byte[] bytData = new byte[1024];
bytData = Encoding.ASCII.GetBytes(strData);
sckSocket.Send(bytData);
byte[] bytDataReceived = new byte[1024];
int intData = sckSocket.Receive(bytDataReceived);
sckSocket.Close();
}
如果我没有登录,当我远程登录时,我会收到消息:登录,用户名:/密码:。
如果我登录,我会收到注销,用户名:/密码。
对于我一半的防火墙来说,这与上述方法完美配合,但它似乎不起作用(我不断登录,就好像我没有尝试传递凭据一样)。
我也尝试过
TcpClient tcpConnection = new TcpClient(myip,myport);
但这给出了相同的结果。它适用于某些防火墙 IP。对于其他人来说失败了。它们都在同一个域中。
有谁知道我如何克服这个问题,或者我可以采取哪些步骤来解决这个问题,或者某些服务器不接受这种方法的原因可能是什么,尽管如果我远程登录它,它确实接受?
任何帮助或建议表示赞赏。
提前谢谢了。
你打电话时sckSocket.Send(bytData)
,套接字如何知道只发送该部分bytData
已经用用户名和密码初始化了吗?我有一种感觉Send()
将发送整个1024
字节,其中大部分将是0x00
字节。我不希望路由器能够优雅地处理这个问题。
我见过只接受密码的系统after输入密码的提示已生成并发送。尝试通过两个单独的请求发送用户名和密码。如果您的环境允许设置TCP_NODELAY
禁用套接字选项内格尔算法,这可能有助于更快地发送用户名字符串。 (我不会为此烦恼,除非你also将用户名和密码分开发送。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)