c# - C#-登录到防火墙的套接字

标签 c# .net sockets telnet tcpclient

我写了一个应用程序来自动连接到我们的不同防火墙。他们都使用相同的前端。我们通过telnet到IP,他们给消息LOGIN或LOGOUT并询问用户名或密码。

我使用了以下代码:

    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();
    }

如果我未登录,则通过telnet登录时,会收到以下消息:登录,用户名:/密码:。
如果我登录,则收到LOGOUT,用户名:/密码。

对于上面一半的防火墙,上述方法都可以很好地工作,但似乎不起作用(我一直在登录,好像没有尝试通过凭据一样)。
我也尝试过
    TcpClient tcpConnection = new TcpClient(myip,myport);

但这给出了相同的结果。它适用于某些防火墙IP。为别人失败。它们都在同一个域中。

是否有人知道我将如何解决这个问题,或者我可以采取什么步骤来解决此问题,或者是某些服务器不接受此方法的原因(尽管如果我通过telnet接受了该方法也可以)是什么原因?

任何帮助或建议,表示赞赏。

提前谢谢了。

最佳答案

当您调用sckSocket.Send(bytData)时,套接字如何知道仅发送bytData中用用户名和密码初始化的部分?我有一种感觉,Send()将发送整个1024字节,其中大部分将是0x00字节。我不希望路由器能够正常处理此问题。

我见过只有在生成并发送密码提示后才接受密码的系统。尝试通过两个单独的请求发送用户名和密码。如果您的环境允许将TCP_NODELAY套接字选项设置为禁用Nagle's algorithm可行,则可能有助于更快地发送用户名字符串。 (除非您也将发送用户名和密码分开,否则我不会为此而烦恼。)

关于c# - C#-登录到防火墙的套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8115864/

相关文章:

c# - 超时缓存信息

.net - DataTrigger 使 WPF 按钮处于非事件状态,直到 TextBox 具有值

c - 绑定(bind)错误 - Socket 编程 C

Android 应用程序上的 Java 套接字异常,需要帮助吗?

javascript - 加载集线器时出错。 HTML5/js 前端和 C# 后端

c# - 将空格字符模型绑定(bind)到 char 属性

c# - 如何编译执行时不显示 "Unknown Publisher"的 C# 程序

qt - QT套接字等待用户输入

c# - 如何在我的程序中实现 curl (Pushbullet API)?

C#NLua : Accessing generic parameters