使用 go 实现一个扫描器时遇到的一个关键问题,这个问题实际上跟语言无关,但是卡在这里好长时间了,发出来请大家指教一下。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
intosec
V2EX    Go 编程语言

使用go 实现一个扫描器时遇到的一个关键问题,这个问题实际上跟语言无关,但是卡在这里好长时间了,发出来请大家指教一下。

  •  
  •   intosec 2014-03-05 11:04:36 +08:00 2597 次点击
    这是一个创建于 4241 天前的主题,其中的信息可能已经有所发展或是发生改变。
    前戏:我打算写一个口令扫描器,其中有一个函数F(ip,[]token_list),要使用单个ip去遍历一个存放了口令的列表。这里我创建了一个chan和多个goroutine f(ip,token),每个f()从这个共享的chan里取出口令并进一步处理,只要其中一个f()找到一个合法的口令,就结束所有的f(),并让函数F()返回;否则就遍历完所有的口令。
    问题是:多个goroutine应该使用一个什么信号量进行同步?
    我的思路:1.如果使用全局变量,那么每个函数F都要有一个对应的全局变量,但是F本身也是以goroutinge的方式运行的。
    2.如果用一个flag的局部变量,那么多个f()如何共享一个flag,因为golang的参数传递是值复制,我在f()内部修改了flag的值,其他f()不会接收到。
    3.如果使用chan进行同步,多个goroutine之间该怎么共享,该怎么设计。

    小弟不是专业的程序员,描述的不是很清楚,其中也可能有错误的认识,欢迎大家指出。感谢了!
    7 条回复    1970-01-01 08:00:00 +08:00
    wulin
        1
    wulin  
       2014-03-05 11:38:52 +08:00
    用chan通信,参考http://www.tuicool.com/articles/nYZnIn
    horsley
        2
    horsley  
       2014-03-05 14:07:47 +08:00
    一个定义在f之外的全局变量就可以了,其实也是你2的flag
    Kabie
        3
    Kabie  
       2014-03-05 16:50:03 +08:00
    ...一般会给 input 和 output 两个 channel 吧…………go程找到值就用 output 传回去……

    在主循环里面用一个 for 死循环 select ……从 output 里面读到值就关闭 input ……
    pubby
        4
    pubby  
       2014-03-05 23:47:03 +08:00
    @Kabie 关闭input的时候,其它几个f() 不知道有个小伙伴已经搞定了,自己还在埋头苦干中...
    intosec
        5
    intosec  
    OP
       2014-03-06 10:07:22 +08:00
    @pubby 是这种情况啊,现在变换了个思路,只要其中一个f()找到正确的口令,就立刻快速从chan中读完所有剩余的口令,这样其他几个f()取不到口令就自动退出了。但是这样做还是会有误差,暂时先这么搞了。
    pubby
        6
    pubby  
       2014-03-06 11:03:07 +08:00
    @intosec 不是非常熟悉golang,就我所知goroutine的销毁只有从内部结束,看你f()里面怎么设计了,如果长时间处于算中,而不做检测判断的话可能白白浪费计算资源。做个评估权衡一下好了,比如每查找1000次做一次检测看是否有其他f()已经完成。
    intosec
        7
    intosec  
    OP
       2014-03-06 20:43:54 +08:00
    不知道是我用的模型不对还是其他什么原因,我发现用golang写的扫描器的命中率比c#的低好多,经常超时。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2438 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 15:51 PVG 23:51 LAX 08:51 JFK 11:51
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86