C语言发送SYN数据包,有什么好的速度控制办法吗

发布于 2021-11-30 18:19:16 字数 1389 浏览 808 评论 6

在用C做SYN扫描的时候,数据包的发送速度不能很好控制(原生套接字),如果速度过快 丢包率很严重,我研究了了Zmap的速度控制,它是在网速比较慢的时候通过休眠控制  网速快的时候通过增加cpu计算来增加发送间隔,但是这样的话 CPU占用太高,请问有什么好的办法吗?

Zmap的实现:

while (1) {
		// adaptive timing delay
		send_rate = (double) zconf.rate / zconf.senders;
		//速度控制核心
		if (delay > 0) {
			count++;
			//针慢的网速  通过休眠  控制
            if (send_rate < slow_rate) {
                double t = now();
                double last_rate = (1.0 / (t - last_time));

                sleep_time *= ((last_rate / send_rate) + 1) / 2;
                ts.tv_sec = sleep_time / nsec_per_sec;
                ts.tv_nsec = sleep_time % nsec_per_sec;
                log_debug("sleep", "sleep for %d sec, %ld nanoseconds",
				ts.tv_sec, ts.tv_nsec);
                while (nanosleep(&ts, &rem) == -1) {}
                last_time = t;
            } else {
            	//针对非常快的网速  通过增加cpu消耗
			    for (vi = delay; vi--; )
			    	;
			    if (!interval || (count % interval == 0)) {
			    	double t = now();
			    	delay *= (double)(count - last_count)
			    		/ (t - last_time) / (zconf.rate / zconf.senders);
			    	if (delay < 1)
			    		delay = 1;
			    	last_count = count;
			    	last_time = t;
			    }
            }
		}
     .....
     sendto();
     .......
}



如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

终遇你 2021-12-03 23:04:22

网速慢的话 还行,网速快的话 两个包之间的时间差很小 休眠根本不起作用,不过可以通过for循环消耗一定的时间 但是cpu占用太高了(我用zmap扫描就是存在cpu太用太高的问题)

疑心病 2021-12-03 22:59:09

回复
@紫系流月 : buf设置大一些。如果网速要求还快,就做个判断,进入另一种连发模式。哈。

把昨日还给我 2021-12-03 22:56:20

给个思路,是否可行,要看你的系统的情况了。正常这种发送都是有buf的,底层的。你按照buf的大小,设定具体的一次发生的容量。将你所要发送的任务,切割成这些容量小包。对于发送速度的控制,则是针对这些小包发送时间来确定。 简单的方式如:

 1、发送一个小包,

  2、是否发送完毕,如果完毕则结束

 3、 获取当前时间

 4、根据当前速度确定下一个包的发送时间

 5、 睡眠上述两个包的时间差

 6、转1

悟红尘 2021-12-03 10:25:02

Linux啊 也可以吗

带上头具痛哭 2021-12-03 06:22:00

回复
@紫系流月 : 当然可以

白龙吟 2021-12-02 21:16:13

高精度定时器

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文