| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2661 人关注过本帖
标题:请教怎样快速扫描局域网(C 语言版)
只看楼主 加入收藏
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
结帖率:98.63%
收藏
已结贴  问题点数:35 回复次数:15 
请教怎样快速扫描局域网(C 语言版)
早上网速慢就想ping 一下局域网256个地址里有几个是alive的

所以写了个脚本
程序代码:
#!/bin/bash

for i in `seq 255`
do
    ping -c 1 -W 1 192.168.1.$i
done


但这实在是慢, 发一个packet ,等一秒,对于256个地址来说时间太长了

于是发现fping 可以使用
$ fping -g 192.168.1.0/24

-g用来指定范围

于是快多了

再后来发现nmap 的 -sP 选项也可以使用,好像更快了
# nmap -sP 192.168.1.0/24

我想知道后面两个程序为什么能那么快的scan 256个地址??

求解释,欢迎思路, C代码, 链接


[ 本帖最后由 madfrogme 于 2012-8-19 17:18 编辑 ]
搜索更多相关主题的帖子: 局域网 快速 
2012-08-19 10:19
netlin
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:24
帖 子:544
专家分:4308
注 册:2012-4-9
收藏
得分:9 
很有兴趣,关注...

做自己喜欢的事!
2012-08-19 11:06
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
收藏
得分:0 
因为只是ping, 所以好像应该用raw ICMP socket

fping 应该是通过 round-robin 算法来发送数据的

查了一下wiki,

Round-robin (RR) is one of the simplest scheduling algorithms

for processes in an operating system.

As the term is generally used,

time slices are assigned to each process in equal portions and

in circular order, handling all processes without priority

应该就是指派时间,没有优先级

[ 本帖最后由 madfrogme 于 2012-8-19 12:29 编辑 ]

The quieter you become, the more you can hear
2012-08-19 11:17
姻脂梦
Rank: 6Rank: 6
等 级:侠之大者
帖 子:264
专家分:424
注 册:2012-7-3
收藏
得分:9 
您就得瑟吧,批处理
2012-08-19 12:57
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
收藏
得分:0 
以下是引用姻脂梦在2012-8-19 13:57:34的发言:

您就得瑟吧,批处理
这位朋友可能没弄清楚我想问的问题,

我明白扫描网络很简单,上面已经说了。连批处理都用不到,

nmap 一行命令,3秒钟就可以扫描完,而我的问题正是

一个程序是怎样并行的发送这些包的,使的这么快的扫描网络的

当然也欢迎吐槽

The quieter you become, the more you can hear
2012-08-19 13:10
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:9 
学习
2012-08-19 14:02
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
程序代码:
#!/bin/bash
STEP=32
IP=121.250.3.
for ((i=1;i<256;i=i+STEP))
do
    echo ping $IP$i
    for ((j=i;j<i+STEP&&j<256;j++))
    do
        ping $IP$j -n 1 -w 1 > $j.txt &
    done
    # sleep 1
done

cat /dev/null > result.txt

for ((i=1;i<256;i++))
do
    cat $i.txt >> result.txt
done


一次多开几个ping就能快速扫描了。。

哦 这里的ping用的是windows带的 参数可能不大一样罢
收到的鲜花
  • madfrogme2012-08-19 15:41 送鲜花  2朵  
2012-08-19 15:15
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
收藏
得分:0 
回复 7楼 zklhp
试了一下,不过好像没成功

不过多开几个ping,我还真是被惊艳到了

谢谢

The quieter you become, the more you can hear
2012-08-19 15:41
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用madfrogme在2012-8-19 15:41:11的发言:

试了一下,不过好像没成功
 
不过多开几个ping,我还真是被惊艳到了
 
谢谢

没发现这个脚本是个畸形么 bash用windows里面的ping、、
2012-08-19 16:26
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
收藏
得分:0 
回复 9楼 zklhp
我已经把-n 该成-c
把-w 该成-W了,
--

The quieter you become, the more you can hear
2012-08-19 16:28
快速回复:请教怎样快速扫描局域网(C 语言版)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018382 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved