(换个题目和分类)关于网络端口的弱智问题 ( 积分: 100 )

  • 主题发起人 MicroWhaight
  • 开始时间
M

MicroWhaight

Unregistered / Unconfirmed
GUEST, unregistred user!
原帖分类:非技术问题
原帖题目:寻找一个局域网内的监听软件
单位里面刚刚上了宽带,通过在服务器上装一个代理服务器CCProxy上网。带宽不多,可是我又不想做过多的限制,毕竟上网就是拿来用的。可是又总是有些人想用些占带守宽的东西。CCProxy可以记录下http请求包括地址,但是对于其它的ftp/sock请求,只是写一个UDP SOCK5之类的就完了,不知道具体是什么地址。因此,想找一个软件,能够知道局域网中的其它机器向什么地址发送了请求或者从什么地址接收了数据,并且能够做为日志记录下来,不要求知道数据的内容(也不敢知道去知道数据内容),象CCProxy那样的日志就可以了。(这样子,就可以先口头通知警告,再然后封闭了)
简单就行,不一定要其他太多的功能。

用过了Win2000本身自带的网络监视器(我的服务器是win2000),太可怕了,一方面,所有的数据都一览无遗;另一方面,没有日志功能(不知有没有说错,我还不会用Win2000,也不够网管,只是“算”是网管呵呵)
-----------------------------------------------

原帖没人回答,所以换个题目和分类,问个弱智问题:
如果一个程序占用了某个端口,那么是不是其它程序就无法再使用这个端口了?(呵呵,不要笑,我真的不能确定,只是通过简单实验猜的。书才开始看……)

如果是这样,那么原来帖子的要求看起来就是无法简单地实现了,因为代理服务器已经把端口用了,而要监听,似乎也要使用这个端口,并且还要进入一个什么“混杂”模式才行。不知道是不是这样理解?

如果我上面的理解是正确的,那么要想在存在代理服务器的情况下继续监听,就应该使用一些能够从底层直接取得数据的方式,比如WinPCap之类的形式?
 
原帖分类:非技术问题
原帖题目:寻找一个局域网内的监听软件
单位里面刚刚上了宽带,通过在服务器上装一个代理服务器CCProxy上网。带宽不多,可是我又不想做过多的限制,毕竟上网就是拿来用的。可是又总是有些人想用些占带守宽的东西。CCProxy可以记录下http请求包括地址,但是对于其它的ftp/sock请求,只是写一个UDP SOCK5之类的就完了,不知道具体是什么地址。因此,想找一个软件,能够知道局域网中的其它机器向什么地址发送了请求或者从什么地址接收了数据,并且能够做为日志记录下来,不要求知道数据的内容(也不敢知道去知道数据内容),象CCProxy那样的日志就可以了。(这样子,就可以先口头通知警告,再然后封闭了)
简单就行,不一定要其他太多的功能。

用过了Win2000本身自带的网络监视器(我的服务器是win2000),太可怕了,一方面,所有的数据都一览无遗;另一方面,没有日志功能(不知有没有说错,我还不会用Win2000,也不够网管,只是“算”是网管呵呵)
-----------------------------------------------

原帖没人回答,所以换个题目和分类,问个弱智问题:
如果一个程序占用了某个端口,那么是不是其它程序就无法再使用这个端口了?(呵呵,不要笑,我真的不能确定,只是通过简单实验猜的。书才开始看……)

如果是这样,那么原来帖子的要求看起来就是无法简单地实现了,因为代理服务器已经把端口用了,而要监听,似乎也要使用这个端口,并且还要进入一个什么“混杂”模式才行。不知道是不是这样理解?

如果我上面的理解是正确的,那么要想在存在代理服务器的情况下继续监听,就应该使用一些能够从底层直接取得数据的方式,比如WinPCap之类的形式?
 
端口号对网络程序就是唯一的,一个打开了,其他的就不能打开这个端口了

如果想监听,估计就得用些特殊方法,比如用Sniff
 
谢谢dawnsong的回答。

Sniffer倒是查到了许多相关的资料,不过从看到的资料,Sniffer的一般实现原理好象是通过使网卡进入一个所谓的“混杂”模式来实现的。不知道这个操作会不会影响原有的代理服务器软件?甚至整个机器?
 
代理软件WinGate好像有流量控制?
 
zjan521:
嗯。不过,CCProxy也有流量控制。不过,我目前主要还不是要求流量控制(也不想控制,除非真有人上班时下电影)。目前主要是想要知道他们发出的各种请求的地址(不要求内容)并能够以日志的形式记录下来。这样,才能够有效地进行控制和其他的入侵防范。
 
继续提问+提前

查了一些资料,说是通过设置Socket为RAW_Socket模式(呵呵,不是网卡),即可捕获数据。想问一下,如果有哪位在Win2000上实现了以这种方式捕获数据,可以告诉一下编程环境吗?因为我在Win2000+sp4的环境下执行时出现不能绑定端口的错误。因为第一次接触Socket编程,参数都是抄的,不知道用的是否正确。

代码:
-----------------------------------
  //检查WinSock版本号
  if WSAStartup(MakeWord(2, 2), WSData) <> 0 then
    raise Exception.Create('不能启动WinSock2.2版本。');

  //初始化RAW_Socket
  RAWSocket := socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
  if RAWSocket = INVALID_SOCKET then
    raise Exception.Create('不能初始化RAW_Socket。')
  else
    lbMsg.Items.Append('初始化RAW_Socket成功');

  //设置IP头操作选项为:包括IP头信息(98不支持)
  fIPInclude := 1;
  if setsockopt(RAWSocket, IPPROTO_IP, IP_HDRINCL, @fIPInclude, SizeOf(fIPInclude)) = SOCKET_ERROR then
  begin
    btnClearupClick(nil);
    raise Exception.Create('不能设置为捕获IP头。');
  end // IF:
  else
    lbMsg.Items.Append('设置捕获IP头模式');

  //获取本机名
  if gethostname(LocalName, SizeOf(LocalName)) = SOCKET_ERROR then
  begin
    btnClearupClick(nil);
    raise Exception.Create('不能获取本机名称。');
  end // IF:
  else
    lbMsg.Items.Append('本机名称:' + LocalName);

  //获取本地 IP 地址
  pHost := gethostbyname(LocalName);
  if pHost = nil then
  begin
    btnClearupClick(nil);
    raise Exception.Create('不能获取本机IP。');
  end; // IF:

  //设置绑定内容
  with AddressIn do
  begin
    sin_addr.S_addr := Longint(PLongint(pHost^.h_addr_list^)^);
    sin_family := AF_INET;
    sin_port := htons(80); //HTTP
  end; // WITH:

  lbMsg.Items.Append('本机IP:' +
    IntToStr(Integer(AddressIn.sin_addr.S_un_b.s_b1)) +
    '.' +
    IntToStr(Integer(AddressIn.sin_addr.S_un_b.s_b2)) +
    '.' +
    IntToStr(Integer(AddressIn.sin_addr.S_un_b.s_b3)) +
    '.' +
    IntToStr(Integer(AddressIn.sin_addr.S_un_b.s_b4))
    );

  //把 sock 绑定到本地地址上  <--------这个步骤在2000下不能执行。
  if bind(RAWSocket, AddressIn, SizeOf(AddressIn)) = SOCKET_ERROR then
  begin
    btnClearupClick(nil);
    raise Exception.Create('不能绑定RAW_Socket到本机IP 80端口。');
  end // IF:
  else
    lbMsg.Items.Append('80端口绑定');

  //设置SOCK_RAW为SIO_RCVALL,接收所有的IP包
  dwRcvAll := 1;
  if ioctlsocket(RAWSocket, SIO_RCVALL, dwRcvAll) <> 0 then
  begin
    btnClearupClick(nil);
    raise Exception.Create('不能设置为接收所有IP包。');
  end // IF:
  else
    lbMsg.Items.Append('设置接收所有IP包');

-----------------------------------

另外,还是有个弱智问题:程序运行应该和编译时的环境没有关系吧?因为我是在家里的Win98上编译,然后放到单位的Win2000上测试的。
 
搞不懂你要干什么,试试我的代理软件:
http://61.180.178.154:8000/tgateh/index.htm
可以限制每个人的带宽,不限制用户数,免费.

软件目前具有的功能特点:

1、绿色软件,无需安装,直接运行,功能强大,支持 WinNT/Win2000/WinXP/Win2003 等操作系统。
2、支持的目前所有的网络连接方式,可以共享Modem、ISDN、ADSL、DDN、VDSL和专线等访问internet。
3、可以支持上千个用户的连接(我单位750个用户).
4、支持 HTTP/HTTPS/FTP/SOCKS/SMTP/POP3/RTSP等协议
5、具有本地DNS缓存,提高了DNS解析速度,在DNS服务器阻塞时一般仍可以正常访问.
6、具有完备的日志.
7、可以设定每个用户允许的服务、带宽、用户级别、并发会话数、日志内容等
8、轮询各IP的工作组名、主机名、用户名、网卡地址、解决了IP盗用.
9、有WEB仿真功能,在服务器上不安装IIS即可发布网页,支持断点续传.
10、支持端口映射,使局域网内的WEB网站对外发布变得十分容易.
11、支持BitTorrent下载.
12、允许授权的Internet用户进入局域网,实现了家庭办公.
13、记录并存储恶意扫描.
14、当客户端设置错误时,有很好的提示界面,随时可以查询自己的网络权限和Internet使用情况.

支持的协议以适用为主,如果用户需要其它网络协议,请联系 tianhuifeng@petrochina.com.cn
 
找到代码的问题了,还是一个弱智的结果:

我是在delphi5下面编译的,但是delphi5的winsock.pas中引用的是wsock32.dll,而实际上应该用ws2_32.dll。哎,笨,就一个字……
---------------------------------------------------
tianhf:
呵呵,不好意思,其实我只是想记录网内用户访问情况,因为找不到合适的软件,所以想自己写一个。看了你写的软件,应该是我想要的,这就去试试。谢谢啦!
 
顶部