查看: 917|回复: 11
|
.Net 的几个愚疑 + Threading + Windows Service [22 03 2006]
[复制链接]
|
|
楼主 |
发表于 18-3-2006 03:38 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这种东西不是很懂,只是好奇 |
|
|
|
|
|
|
|
楼主 |
发表于 20-3-2006 05:48 PM
|
显示全部楼层
meemee network 的咚咚,小章鱼也不懂得多少。
以前用 VB6 winsock 时压根底就没有想过这样的东西。
小章鱼做的是 server 端,所以有 connect (client) 要求连接后就接受连接,
一般 client 在连接后都会向 server 发 header 类的讯息,像 browser 一般就发
- GET / HTTP/1.1
- Host:***
- 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
- main{
- new thread(sub_thread);
-
- while(true){
- // 没有 sleep 或 doEvents
- }
- }
-
- sub_thread{
- while(true){
- // 没有 sleep 或 doEvents
- }
复制代码
据我所知,如果你这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 编辑 ] |
|
|
|
|
|
|
|
楼主 |
发表于 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是已经访问过,但已经停止的连接。
- C:\WINDOWS>netstat -na
- Active Connections
- Proto Local Address Foreign Address State
- TCP 0.0.0.0:1071 0.0.0.0:0 LISTENING
- TCP 61.6.182.67:1067 61.6.32.89:110 TIME_WAIT
- TCP 61.6.182.67:1071 61.6.32.89:110 ESTABLISHED
- TCP 61.6.182.67:137 0.0.0.0:0 LISTENING
- TCP 61.6.182.67:138 0.0.0.0:0 LISTENING
- TCP 61.6.182.67:139 0.0.0.0:0 LISTENING
- TCP 127.0.0.1:1025 0.0.0.0:0 LISTENING
- UDP 61.6.182.67:137 *:*
- UDP 61.6.182.67:138 *:*
- 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 的?
麻烦指导指导。 |
|
|
|
|
|
|
| |
本周最热论坛帖子
|