中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-07-26 10:49
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]对ip段的整合,涉及超多次比较! 查看 2,909 回复 40
31 发表于 2009-01-11 17:17 ·  中国 广东 深圳 电信
初级用户
★★
游手好闲 + 无所事事 ..
积分 194
发帖 167
注册 2007-04-30 09:43
19年会员
UID 87022
性别 男
状态 离线
明年开始我就不做移动的代维了,项目解散了,组员都走了。就剩下我了,boss说要调我去国税让我跟其他网络工程师学习网络,要学的东西可就多了。不过我也正好要学这方面。就好像算法里面的 IP换算成10进制一样,呵呵,昨晚还去翻了本CCNA的书才知道的。
32 我来追加一个(全精度的),16秒完成 发表于 2009-01-12 01:42 ·  中国 广东 东莞 电信
银牌会员
★★★
批处理编程迷
积分 1,916
发帖 752
注册 2008-12-28 04:30
17年会员
UID 135147
性别 男
来自 广西
状态 离线
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
title IP分段工具,开始时间是 %time%
cd. >分段结果.txt
set n=
set _h1=1
echo.&echo.&echo.&echo.
for /f "tokens=1-8,* delims=. " %%a in (ipdata.txt) do (
set _cu=0&set _e1=!_e!&set _f1=!_f!&set _g1=!_g!&set/a _h1=_h+1
if !_h!==255 (set _h1=0&set /a _g1=_g+1&if !_g!==255 (set _g1=0&set /a _f1=_f+1&if !_f!==255 (set _f1=0&set /a _e1=_e+1)))

if "!_from!"=="" set _from=%%a.%%b.%%c.%%d
if not !_e1!!_f1!!_g1!!_h1!==%%a%%b%%c%%d (if not "!_e!"=="" (echo !_from! !_e!.!_f!.!_g!.!_h! !_fi!>>分段结果.txt&set _from=%%a.%%b.%%c.%%d))
set _e=%%e&set _f=%%f&set _g=%%g&set _h=%%h
set _fi=%%i

set /a n+=1
set /p = 当前记录:!n!<nul

)

echo.
echo ********************
echo 结束时间是:%time%
echo ********************

pause

[ Last edited by netbenton on 2009-1-12 at 01:54 ]
精简
=> 个人网志
33 思路很牛b 发表于 2009-01-12 05:50 ·  中国 湖北 武汉 电信
初级用户
积分 64
发帖 43
注册 2007-11-12 00:57
18年会员
UID 102390
性别 男
状态 离线
思路很牛b

但是我不需要全精度的,
最合适的精度是 C 段 的差 小于100 就整合,大于100 分开。
------------
A1.B1.C1.D1 A2.B2.C2.D2
A3.B3.C3.D3 A4.B4.C4.D4
-------------------
也就是当 A2.B2 = A3.B3 的时候比较 C2和C3

当 C2-C3<=100 的时候 2段整合为:A1.B1.C1.D1 A4.B4.C4.D4

如果 C2-C3>100 不整合。

这是最适合的精度。。
34 发表于 2009-01-12 05:52 ·  中国 湖北 武汉 电信
初级用户
积分 64
发帖 43
注册 2007-11-12 00:57
18年会员
UID 102390
性别 男
状态 离线
全精度的代码执行起来需要很厂时间,大概有400万条数据处理。



@echo off
title 全自动ip搜索整理,开始时间是 %time%
SETLOCAL ENABLEDELAYEDEXPANSION
@del /f /q ok.txt 2>nul
set start1=
set n=0
for /f "tokens=1-8 delims=. " %%a in (ip.txt) do (
set /a n=!n!+1
if #!start1!#==## (
set start1=%%a&set start2=%%b
SET /A oldnum2=%%a*256+%%b
)
SET /A nownum1=%%a*256+%%b
if /i !nownum1! GTR !oldnum2! (
echo !start1!.!start2!.%%c.%%d !end1!.!end2!.%%g.%%h>>ok.txt
rem echo 输出IP段 !!start1!.!start2!.!start3!.!start4! --- !end1!.!end2!.!end3!.!end4!
set start1=%%a&set start2=%%b
)
SET /A oldnum2=%%e*256+%%f+1
set end1=%%e&set end2=%%f
if /i !n! gtr 9999 (

set n=0
)
)



这是我修改 exzzz 发出的代码

处理完400万条数据在 10分钟以内

全精度的好象需要几个小时

[ Last edited by cz1314 on 2009-1-12 at 05:55 ]
35 发表于 2009-01-12 12:05 ·  中国 广东 深圳 电信
初级用户
★★
游手好闲 + 无所事事 ..
积分 194
发帖 167
注册 2007-04-30 09:43
19年会员
UID 87022
性别 男
状态 离线
Originally posted by netbenton at 2009-1-12 01:42 AM:
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
title IP分段工具,开始时间是 %time%
cd. >分段结果.txt
set n=
set _h1=1
echo.&echo.&echo.&echo.
for /f "tokens=1-8, ...



呵呵,我测试了一下,在我这台赛扬2.66的机器上,
将你我代码中所有有关 计数及屏显 的提示内容 rem 掉运行处理楼主提供的IPDATA.TXT。

你的算法需要14.3秒,我的算法用7.9秒。。。。。。
36 发表于 2009-01-12 20:09 ·  中国 广东 东莞 电信
银牌会员
★★★
批处理编程迷
积分 1,916
发帖 752
注册 2008-12-28 04:30
17年会员
UID 135147
性别 男
来自 广西
状态 离线
我的处理纯真网络解压出来的ip数据36万多条记录(全精度)
用时04:41秒
结果只有一条:
0.0.0.0 255.255.255.255 纯真网络 2009年1月10日IP数据

[ Last edited by netbenton on 2009-1-12 at 20:16 ]
精简
=> 个人网志
37 发表于 2009-01-13 00:43 ·  中国 湖北 武汉 电信
初级用户
积分 64
发帖 43
注册 2007-11-12 00:57
18年会员
UID 102390
性别 男
状态 离线
哈哈! netbenton 真幽默。你的代码的确不错!!!
38 发表于 2009-01-13 10:02 ·  中国 广东 深圳 电信
初级用户
★★
游手好闲 + 无所事事 ..
积分 194
发帖 167
注册 2007-04-30 09:43
19年会员
UID 87022
性别 男
状态 离线
Originally posted by netbenton at 2009-1-12 08:09 PM:
我的处理纯真网络解压出来的ip数据36万多条记录(全精度)
用时04:41秒
结果只有一条:
0.0.0.0 255.255.255.255 纯真网络 2009年1月10日IP数据

[ Last edited by netbenton on 2009-1-12 at 20:16 ]



呵呵,我的也是。
39 发表于 2009-01-13 15:11 ·  中国 广东 东莞 电信
银牌会员
★★★
批处理编程迷
积分 1,916
发帖 752
注册 2008-12-28 04:30
17年会员
UID 135147
性别 男
来自 广西
状态 离线

但是我不需要全精度的,
最合适的精度是 C 段 的差 小于100 就整合,大于100 分开。
------------
A1.B1.C1.D1 A2.B2.C2.D2
A3.B3.C3.D3 A4.B4.C4.D4
也就是当 A2.B2 = A3.B3 的时候比较 C2和C3

当 C2-C3<=100 的时候 2段整合为:A1.B1.C1.D1 A4.B4.C4.D4

如果 C2-C3>100 不整合。

这是最适合的精度。。
...

那这样的也不整合吗?
1.0.0.15 1.1.255.255
1.2.0.0 1.2.12.17
精简
=> 个人网志
40 大提速 发表于 2009-01-13 15:20 ·  中国 广东 东莞 电信
银牌会员
★★★
批处理编程迷
积分 1,916
发帖 752
注册 2008-12-28 04:30
17年会员
UID 135147
性别 男
来自 广西
状态 离线
::全精度比较
::处理楼主的ipdata.txt 用5秒,处理纯真的36万数据用1分17秒
::如果是400万数据,预计:13分左右


@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
title IP分段工具,开始时间是 %time%
cd. >分段结果.txt
set n=0
call :sub

echo.&echo.&echo.&echo.
for /f "tokens=1-8,* delims=. " %%a in (ipdata.txt) do (
if !_h!==256 (set _h=0&set /a _g+=1&if !_g!==256 (set _g=0&set /a _f+=1&if !_f!==256 (set _f=0&set /a _e+=1)))
if not !_e!!_f!!_g!!_h!==%%a%%b%%c%%d (echo !_fr! !_end!>>分段结果.txt&set _fr=%%a.%%b.%%c.%%d)
set _end=%%e.%%f.%%g.%%h
set _e=%%e&set _f=%%f&set _g=%%g&set/a _h=%%h+1
)
if not "!_g!"=="" echo !_fr! !_end!>>分段结果.txt
echo ********************
echo 结束时间是:%time%
echo ********************
pause
goto :eof

:sub
for /f "tokens=1-8,* delims=. " %%a in (ipdata.txt) do (
set _fr=%%a.%%b.%%c.%%d
set _e=%%a&set _f=%%b&set _g=%%c&set _h=%%d
goto :eof
)

[ Last edited by netbenton on 2009-1-15 at 20:46 ]
精简
=> 个人网志
41 发表于 2009-01-14 00:29 ·  中国 湖北 武汉 电信
初级用户
积分 64
发帖 43
注册 2007-11-12 00:57
18年会员
UID 102390
性别 男
状态 离线
Originally posted by netbenton at 2009-1-13 03:11 PM:

那这样的也不整合吗?
1.0.0.15 1.1.255.255
1.2.0.0 1.2.12.17



恩是个问题。但是可以用

(A2*65536+B2*256+C2)-(A2*65536+B3*256+C3)<>5 比较

这样可以吗?

[ Last edited by cz1314 on 2009-1-14 at 00:30 ]
论坛跳转: