自己写了一个TCP Lisnter的代码,为何不能拦截http

孙大诚_SunRobin 2018-08-25 03:42:09

自己写了一个TCP Listner用来监听21端口, 在其中设置了断点,为何我使用telnet 127.0.0.1 21 命令,就能挂载到断点。而使用http://127.0.0.1:21 就不能运行到那里呢?

using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace FileHandlerService
{
public class FtpServer
{
private TcpListener _listener;

public FtpServer()
{
}

public void Start()
{
_listener = new TcpListener(IPAddress.Any, 21);
_listener.Start();
_listener.BeginAcceptTcpClient(HandleAcceptTcpClient, _listener);
}

public void Stop()
{
_listener?.Stop();
}

private void HandleAcceptTcpClient(IAsyncResult result)
{
TcpClient client = _listener.EndAcceptTcpClient(result);
_listener.BeginAcceptTcpClient(HandleAcceptTcpClient, _listener);

// DO SOMETHING.
NetworkStream stream = client.GetStream();

using (StreamWriter writer = new StreamWriter(stream, Encoding.ASCII))
using (StreamReader reader = new StreamReader(stream, Encoding.ASCII))
{
writer.WriteLine("YOU CONNECTED TO ME");
writer.Flush();
writer.WriteLine("I will repeat after you. Send a blank line to quit.");
writer.Flush();

string line = null;

while (!string.IsNullOrEmpty(line = reader.ReadLine()))
{
writer.WriteLine("Echoing back: {0}", line);
writer.Flush();
}
}
}
}
}
...全文
511 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
kekezhu0000 2018-09-13
  • 打赏
  • 举报
回复
21占用,换一个
维秀斯丢丢 2018-09-12
  • 打赏
  • 举报
回复
又学到了。一招
孙大诚_SunRobin 2018-09-12
  • 打赏
  • 举报
回复
相应的解决办法与描述如下连接
https://blog.csdn.net/hi_pig2003/article/details/52995528
https://www.jianshu.com/p/ca0cffe6ea8b

其实要不是没有其他可选择的端口,尽量别用这些非安全端口,干嘛给自己找麻烦。
孙大诚_SunRobin 2018-09-12
  • 打赏
  • 举报
回复
同志们,问题解决了。也不是问题,是疑问解决了。

果然是浏览器的问题。

因为今天在服务器上部署了一个网站,用的是6666端口,在服务器上用IE浏览器输入网站,就能访问,而我在本地输入网站,就显示无法找到网络。换了一个端口就好了。查找了半天,终于找到了原因。

21端口,6666端口等,在Chrome认为都是非安全端口,不能用于http的访问。所以,http://xxxxx.com:21等访问都会是无法找到网络,无法建立起TCP连接,因为浏览器根本就没有去跟服务器建立TCP连接。
xuzuning 2018-09-06
  • 打赏
  • 举报
回复
你是如何知道 TCP 连接不上的?
孙大诚_SunRobin 2018-09-06
  • 打赏
  • 举报
回复
引用 10 楼 xuzuning 的回复:
ftp 协议与 http 协议,有着不同的握手讯号


按理说,到TCP那层,都是监听的同一个端口,应该建立起连接之后,才能分辨Http协议或者FTP协议。

现在是TCP连接都连不上。这是咋回事呢?
xuzuning 2018-09-06
  • 打赏
  • 举报
回复
断点在哪?
_学而时习之_ 2018-09-06
  • 打赏
  • 举报
回复
21端口一般不宜用,除非强制停用,否则监听不到。
孙大诚_SunRobin 2018-09-06
  • 打赏
  • 举报
回复
引用 12 楼 xuzuning 的回复:
你是如何知道 TCP 连接不上的?


挂不住断点啊,改了端口就挂住断点了
xuzuning 2018-09-05
  • 打赏
  • 举报
回复
ftp 协议与 http 协议,有着不同的握手讯号
孙大诚_SunRobin 2018-09-05
  • 打赏
  • 举报
回复
引用 8 楼 xuzuning 的回复:
21 是 ftp 协议专有端口,不能挪作他用


不能挪作他用是什么意思呢?我写的代码中,TCP Listener在启动的时候就去监听21端口了,没有报端口被其他应用占用的异常,成功监听了。
但是浏览器与其建立连接的时候去失败了。这过程中,是谁阻止了这一个连接的动作呢?
xuzuning 2018-09-04
  • 打赏
  • 举报
回复
21 是 ftp 协议专有端口,不能挪作他用
SoulRed 2018-09-03
  • 打赏
  • 举报
回复
我建议你试下SOCKET
孙大诚_SunRobin 2018-08-29
  • 打赏
  • 举报
回复
我把端口该了,改成22221就可以了。所以,我觉得更像是浏览器对于http方式访问21端口进行了限制。
孙大诚_SunRobin 2018-08-29
  • 打赏
  • 举报
回复
引用 1 楼 n_e_e_d 的回复:
别用21端口,换个端口试试


为什么21端口就不可以呢?我写的TCP Listner是一直在监听21端口,http访问21的话,也是建立TCP连接
编程有钱人了 2018-08-29
  • 打赏
  • 举报
回复
21默认是FTP协议用的,如果你服务器没有别的服务占用21端口,应该可以用21
编程有钱人了 2018-08-28
  • 打赏
  • 举报
回复

try
{
listerner.AuthenticationSchemes = AuthenticationSchemes.Anonymous;//指定身份验证 Anonymous匿名访问
listerner.Prefixes.Add("http://127.0.0.1:21/");//这么写比较好
listerner.Start();
}
catch (Exception ex)
{
Console.WriteLine("服务启动失败..." + ex.Message);
}

listerner.AuthenticationSchemes = AuthenticationSchemes.Anonymous;这个个也挺重要的
维秀斯丢丢 2018-08-27
  • 打赏
  • 举报
回复
应该是可以的。
n_e_e_d 2018-08-27
  • 打赏
  • 举报
回复
别用21端口,换个端口试试

110,502

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧