佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 908|回复: 11

.Net 的几个愚疑 + Threading + Windows Service [22 03 2006]

[复制链接]
发表于 17-3-2006 09:39 AM | 显示全部楼层 |阅读模式


看了几个 VB.Net 的例子,里头有
Public Shared xxx

请问其中的 Shared 是不是一般咱们的 Static ?

在 multi-threading 中,
在 main thread 中开了 sub thread 之后就和 sub thread 一样执行无尽回路,flow 如下

main{
  new thread(sub_thread);
  
  while(true){
   // 没有 sleep 或 doEvents
  }
}
sub_thread{
  while(true){
   // 没有 sleep 或 doEvents
  }
}

请问在这情况下 CPU Usage 会怎样?系统会不会崩溃?
程式的执行率会如何?
执行周期是 main 多、sub 多,或是一致?

在 Console application 里怎么没有 Application 这个 namespace ?
要怎样在 Console application 里 DoEvents ?就是释放资源让系统执行其它同周期的任务。
还是在 Console application 中系统会自动执行其它同周期的任务,不需要 DoEvents ?

Windows Service 和 Console application 那个执行效率较好?
各位是如何测试 Windows Service 的?
小章鱼在 VS.Net IDE 里无法直接测试,必须安装并用 Windows Services Manager 启动后方能测试,很麻烦。
各位有没有更有效率快速的方法?
新问题
完成了一个简单的 MultiUser charServer,发现由于需要异步(asynchronous)的等候讯息,所以每个连线的使用者就需要一个独立的线程,
那么如果有 1000 人连线,不就需要 1000 个线程了?
不知各位制作 realtime server 是不是都是酱?

近期 portscan 频率比平时高出了好几倍,担心自己编的程式所使用而曝露的端口被骇,
小章鱼对这方面完全不清楚,只听闻最简单的侵害方法就是:攻击所曝露的端口让程式 buffer overflow 从而取得操作权限
针对这个,请问要如何确保、防止程式 buffer overflow 呢?
buffer overflow 究竟是什么?

Console Application 如何在运行时随意 隐藏 + 显示 ?

[ 本帖最后由 sson 于 22-3-2006 05:03 PM 编辑 ]
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 18-3-2006 03:38 PM | 显示全部楼层


看了许多文档,确认 Shared = Static
看了 MSDN 文档,大致了解资源的占有。
只是不知道实际要如何测试,那位朋友可以分享自己的心得、测试之道?
以后都是双核心处理器,看来需要多多运用 Multi-Thread 了
是小章鱼的误解, Application 是属 Windows.Forms 的类。
仍然疑惑中,望各位指教。
goatstudio 已提供心得。

[ 本帖最后由 sson 于 20-3-2006 03:49 PM 编辑 ]
回复

使用道具 举报

 楼主| 发表于 20-3-2006 01:25 PM | 显示全部楼层

等等等……
问题又增加了……

[ 本帖最后由 sson 于 20-3-2006 03:49 PM 编辑 ]
回复

使用道具 举报

发表于 20-3-2006 02:18 PM | 显示全部楼层
3. Application namespace?? 你在那里看过这 namespace 呢? 你为什么需要 DoEvents 呢? 通常在 Console 里都是单线执行, 除非你用 thread.

4. 这个我不太清楚... 我通常制作的是 Console Application.

5. 以前我做 Java Game Server 的时候, 的确就是这样. 照理说, web server 也是一样, 一个 request 一个联线. 只是 web server 一旦输出了 request, 它完全不管的, 也就是 state-less connection.

6. buffer overflow 简单来说就是塞进比原定程序预期中还要多的资料. 更多的原理当然...得去网上找 (我不会解释... 也不懂怎么解释). 但要在你的程序里做个简单的 buffer overflow 例子就是, declare 一个 float, 然后 assign 0.0000000000....0000000001 就可以了.
回复

使用道具 举报

 楼主| 发表于 20-3-2006 03:46 PM | 显示全部楼层
原帖由 goatstudio 于 20-3-2006 02:18 PM 发表
3. Application namespace?? 你在那里看过这 namespace 呢? 你为什么需要 DoEvents 呢? 通常在 Console 里都是单线执行, 除非你用 thread.

4. 这个我不太清楚... 我通常制作的是 Console Application.
5. 以 ...

对不起 Application 不是 namespace 而是 Form 里的 class。
已经解决,不过忘了改,对不起。

酱子,一般在 buffer overflow 程式就应该崩溃了不是么?


在测试 server 时(port 为 8080),发现一直有连接,
而连接后就给 server 发 CONNECT *.*.*.*:25 HTTP/1.0
这是什么?
HTTP 不是用 port80 的吗?
换了 8080 以外的端口就没有了,是不是 worms 一类的攻击?
回复

使用道具 举报

发表于 20-3-2006 05:09 PM | 显示全部楼层
原帖由 sson 于 20-3-2006 03:46 PM 发表

对不起 Application 不是 namespace 而是 Form 里的 class。
已经解决,不过忘了改,对不起。

酱子,一般在 buffer overflow 程式就应该崩溃了不是么?


在测试 server 时(port 为 8080),发现一直有 ...


我很好奇,你是用什么方法来得知server发connect *.*.*.*:25。

其实我对network这种东西不是很懂,只是好奇
回复

使用道具 举报

Follow Us
 楼主| 发表于 20-3-2006 05:48 PM | 显示全部楼层

meemee network 的咚咚,小章鱼也不懂得多少。
以前用 VB6 winsock 时压根底就没有想过这样的东西。

小章鱼做的是 server 端,所以有 connect (client) 要求连接后就接受连接,
一般 client 在连接后都会向 server 发 header 类的讯息,像 browser 一般就发
  1. GET / HTTP/1.1
  2. Host:***
  3. User-Agent:***
复制代码

酱的咚咚

FTP client 则会先等候 server 发 welcome 讯息。


而小章鱼的状况就是 client 对 server 发的 header 讯息是:CONNECT *.*.*.*:25 HTTP/1.0
压根儿就不晓得是什么发的
看样子应该是要求连接到 *.*.*.*:25 吧。
所以感觉就像是 worms/portscan/backdoor 咚咚 broadcast 出来的……

好担心就是了……
回复

使用道具 举报

发表于 20-3-2006 06:59 PM | 显示全部楼层
我不大会vb.net, 我从我所了解java来试试帮你解答,希望你不在意!

2

  1.     main{
  2.       new thread(sub_thread);
  3.   
  4.       while(true){
  5.        // 没有 sleep 或 doEvents
  6.     }
  7.   }
  8.   
  9.   sub_thread{
  10.     while(true){
  11.      // 没有 sleep 或 doEvents
  12.   }
复制代码


据我所知,如果你这code里面如果没有blocking method的话,你的CPU Usage 会达到100%, 还有你的CPU会hang. 因为这可以说是no control infinite loop. 这种写法如果应用在socket server, 我会用ServerSocket(java) 的accept() method 来避免我的program goes crazy. accept() method 会block在那边等到有socket(client)来才走,这就不会有问题啦.

如果我没错的话, 你的vb.net server 只可以有一个main thread吧, 但你可以有很多不同的user thread.因为main thread 是用来启动你的program, 一但你的program启动了, 你可以用your user-thread 来做很多很多的multi-tasking.我通常最常用thread来做event-driven system. 在java里,我不见的他们有何分别,他们只有daemon 或者non-daemon thread 之分而已。关于"执行周期",看你怎样design你的server.没有所谓对与错,只有那个个比较有效力!

5
如果每一个client用一个thread是行不通的, 试想想,假使你的server 要supports 10k concurrent clients, 那你的server不是要用10k thread? 恐怕你的system再好也难担负这重任.java 1.4, 有新的io framework 来解决这问题,叫 'non-blocking I/O" 简称NIO。这framework 可以解决这问题,它只用一个thread在于selection来handle 你的 client accept, imcoming msg 和 outgoing msg. 我相信vb.net 肯定有类于的framework, 如果我没错的话, vb.net 是叫 asynchronize socket. 找找看,应该是这个东东。

原帖由 meemee 于 20-3-2006 05:09 PM 发表


我很好奇,你是用什么方法来得知server发connect *.*.*.*:25。

其实我对network这种东西不是很懂,只是好奇:lol:

onnect *.*.*.*:25是
client(e.g browser) 发出给http server(IIS),一但http server 接受client 的request, 如果我没有错的话,http server 会reply HTTP/1.0 200 OK Content-Type: text/html Server: jboss server 给client.

这是双方都认同的协议(protocol),这样他们才能沟通。如果你做http server 的话,你一定要跟这个protocol, 不然你的http server 只有你的http client 能沟通,其他的如Explorer, fireFox 就不能和你的http server 沟通,因为语言不通, 一个speaks 华语, 一个speaks 英文。

原帖由 sson 于 20-3-2006 05:48 PM 发表
所以感觉就像是 worms/portscan/backdoor 咚咚 broadcast 出来的…… ...

这不会是broadcast 吧, broadcast 需要用到类于255.255.255.255 或着192.168.1.255 这样的address。 还有你需要用到udp(user datagram protocol) 而不是http的 tcp.

[ 本帖最后由 黑木头 于 20-3-2006 07:36 PM 编辑 ]
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 20-3-2006 07:45 PM | 显示全部楼层

黑木头 谢谢你,小章鱼不介意,反正 C# 和 Java 很接近。
再者小章鱼对 thread, network 等问题都是不清不楚的,有人为解答自然高兴万分。

这个问题,小章鱼试过了,
在 Console application 是似乎没有问题,在运行时依然可以运行其它的程式,OS(Windows) 似乎会自动分配。
但在 WinForm application 时就会造成 OS 无响应。
然而小章鱼不知道具体要如何测试它们,在小章鱼测试的小程式里 main 和 sub 在一周期的执行次数似乎一样。

的问题,小章鱼也是刚刚才看完有关的文摘。原来 asynchronous 使用的是 IOCP threads 不是 threads pool。
不过也出现了新的疑问,据文摘可用 IOCP threads 原设为 1000,而实际在大于 600 后一般就会造成停歇等问题;那么最大同时在线人数岂不是变成 1000 了?

小章鱼也知道些许那些协议
只是疑惑在 w3.org 的 HTTP 协议里的 header 只有 GET POST HEAD 就是没有 CONNECT 呀。

【connect *.*.*.*:25】 里的 *.*.*.* 就是 IP,因为某些关系,小章鱼把其遮蔽了。
而这些 *.*.*.* 和正在连接的 IP 是不一样的。

所以小章鱼才会猜想是不是某些程式 broadcast 出来的(不过这情况应该叫 portscan 对吧)。
而且小章鱼又想不到有什么程式是用 25 端口的
FTP 21
HTTP 80
POP3 110
SMTP 虽然是 25,不过 header 应该不是 HTTP 吧?

[ 本帖最后由 sson 于 20-3-2006 07:47 PM 编辑 ]
回复

使用道具 举报

发表于 21-3-2006 01:52 AM | 显示全部楼层
根据我去扒文的结果,buffer overflow(缓冲区溢出)应该会造成系统崩溃,不过如果巧妙的应用,就可以拿到系统权限达到攻击的目的。简单来说就是写入过多的数据,覆盖别的数据。不知道是谁想到这么巧妙的攻击手法?

在调用函数(function/procedure)时,CPU会把函数的parameter,返回IP(instruction pointer)和寄存器推进stack。local variable就是在储存stack的空间。假设一个string只declare成100bytes可是,程序却写入200bytes那么这就会造成buffer overflow。这样的话就会把返回IP等等资料覆盖。

攻击者在精心的设计下,制作一个超长的数据,把原来的返回IP覆盖,制作一个新IP。数据里放置了shell code,把新IP指向这个shell code。这样攻击者就可以执行自己写好的shell code。

红色代码就是利用超长的url使到idq.dll产生缓冲区溢出,然后执行自己写好的shell code。出名的冲击波(msblaster)应该也是,不过它是通过DCOM RPC的漏洞来攻击。

port25,感觉上怪怪的。除了smtp是25之外,还有一些木马也是用port25。
你试试看用cmd > netstat –na执行会有什么结果。

这是我在连接jaring的pop server测试的结果,给你参考一下。61.6.182.67就是我的dynamic ip,61.6.32.89应该就是jaring的pop server。TIME_WAIT是已经访问过,但已经停止的连接。


  1. C:\WINDOWS>netstat -na

  2. Active Connections

  3.   Proto  Local Address          Foreign Address        State
  4.   TCP    0.0.0.0:1071           0.0.0.0:0              LISTENING
  5.   TCP    61.6.182.67:1067       61.6.32.89:110         TIME_WAIT
  6.   TCP    61.6.182.67:1071       61.6.32.89:110         ESTABLISHED
  7.   TCP    61.6.182.67:137        0.0.0.0:0              LISTENING
  8.   TCP    61.6.182.67:138        0.0.0.0:0              LISTENING
  9.   TCP    61.6.182.67:139        0.0.0.0:0              LISTENING
  10.   TCP    127.0.0.1:1025         0.0.0.0:0              LISTENING
  11.   UDP    61.6.182.67:137        *:*
  12.   UDP    61.6.182.67:138        *:*
  13.   UDP    127.0.0.1:1025         *:*
复制代码

[ 本帖最后由 meemee 于 21-3-2006 01:55 AM 编辑 ]
回复

使用道具 举报

 楼主| 发表于 21-3-2006 01:24 PM | 显示全部楼层

谢谢 meemee 为小章鱼“扒”文,呵呵。

虽然还是不明白其实际的操作,
不过更重要的是要如何避免自己的程式被这类攻击者的攻击呢?


对于那个 【connect *.*.*.*:25】
小章鱼用 telnet 连接到 *.*.*.*:25 证实(应该是吧)是 smtp server
不过疑惑 smtp server 连接到小章鱼做的 server 来干嘛?而且又是用 8080 端口……
回复

使用道具 举报

 楼主| 发表于 22-3-2006 05:14 PM | 显示全部楼层

昨天在冲网浪找资料时,竟然……!
看到一个貌似小章鱼目前在编着玩儿的 multiuser server

汗……
不过无法否认他做的确实好……
加上是 JAVA 编写 crossplatform 的。
功能也好多。

目标就定为“复制”他的全部功能,
加上小章鱼原有的功能,嘿嘿 就强过他的了

有朋友用 .Net 做过 Windows Service 的?
麻烦指导指导。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 22-9-2024 07:34 AM , Processed in 0.152614 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表