[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] 如何输出两个ip之间所有ip

本帖最后由 pcl_test 于 2019-6-26 12:24 编辑

如何使用bat批量将ip段输出成一个个ip?
例如:
1.185.0.0       1.185.95.255
1.185.192.0     1.185.255.255
14.197.144.0    14.197.145.255
43.247.228.0    43.247.231.255
251.1.0.1    251.2.0.1
---------------------------------------------上面ip段整理后输出如下
1.185.0.0
1.185.0.1
.............
1.185.95.255

1.185.192.0
1.185.192.1
..............
1.185.255.255

14.197.144.0
14.197.144.1
..............
14.197.145.255

43.247.228.0
43.247.228.1
..............
43.247.231.255

251.1.0.1
251.1.0.2
..............
251.2.0.1

这个输出很难么?

TOP

本帖最后由 codegay 于 2018-4-27 05:14 编辑

python3代码。思路是把ip地址转成一个10进制的自然数,然后range范围。再把数字转成IP地址。
IP地址转换成数字的部分参考了 https://blog.csdn.net/zhihaoma/article/details/51841169 等相关文章。
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Fri Apr 27 01:45:55 2018
  4. @author: codegay
  5. python3 & 编辑器 == spyder
  6. """
  7. # 把IP地址转换为一个自然数
  8. def IPToN(ipaddr, sep='.'):
  9.     ip = [int(i) for i in ipaddr.split(sep)]
  10.     result = ip[0]*256**3 + ip[1]*256**2 + ip[2]*256 + ip[3]
  11.     return result
  12. # 把一个自然数转换成IP
  13. def NToIP(natural, sep='.'):
  14.     ip = int(natural)
  15.     result = [ip >> 24, (ip & 0x00FF0000) >> 16, (ip & 0x0000FF00) >> 8, ip & 0x000000FF]
  16.     result = sep.join(map(str, result))
  17.     return result
  18. def iprange(start, end, newline=''):
  19.     result = [NToIP(n)+newline for n in range(IPToN(start), IPToN(end)+1)]
  20.     return result
  21. print(IPToN("58.217.200.112"))
  22. print(IPToN("10.0.3.193"))
  23. print(NToIP(987351152))
  24. print(iprange("192.168.1.1", "192.168.1.255"))
  25. with open("ip.txt") as f:
  26.     lines = [r.rstrip().split(" ") for r in f.readlines()]
  27.     for line in lines:
  28.         with open("result.txt", "w+") as rf:
  29.             rf.writelines(iprange(line[0], line[1], newline='\r\n'))
复制代码
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

255进制
  1. @echo off&setlocal enabledelayedexpansion
  2. set ip1=251.1.0.1
  3. set ip2=251.2.0.1
  4. >"iplist.txt" (for /l %%a in () do (
  5.     if not defined t (
  6.         set t=%ip1%
  7.     ) else (
  8.         set s=
  9.         for /f "tokens=1-4 delims=." %%b in ("!t!") do set s=%%e %%d %%c %%b
  10.         set c=0
  11.         set "ip="
  12.         for %%b in (!s!) do (
  13.             if not defined ip (
  14.                 if %%b equ 255 (
  15.                     set ip=0
  16.                     set c=1
  17.                 ) else (
  18.                     set /a d=%%b+1
  19.                     set ip=!d!
  20.                 )
  21.             ) else (
  22.                 if !c! equ 1 (
  23.                     if %%b equ 255 (
  24.                         set ip=0.!ip!
  25.                     ) else (
  26.                         set /a e=%%b+c
  27.                         set ip=!e!.!ip!
  28.                         set c=0
  29.                     )
  30.                 ) else set ip=%%b.!ip!
  31.             )
  32.         )
  33.         set t=!ip!
  34.     )
  35.     echo;!t!
  36.     if not defined ip2 (
  37.         if !t! equ 255.255.255.255 exit
  38.     ) else (if !t! equ %ip2% exit)
  39. ))
复制代码
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

本帖最后由 /zhqsystem/zhq 于 2018-4-30 22:19 编辑

...不要把代码复杂化
直接数字填充就好了或是暴力0-255四个循环,如果过多建议用临时文件方式文件名称000.000.000.000,内容0.0.0.0

错误区域修正红色为遗漏字段
暴力法简单粗暴
for /f "delims=" %%i in ('type "1.txt"')do for %%n in (%%i)do (
set "#%%n=%%n"&&rem:变量方式判断适合较少的数据
(echo,%%n)>"%%n"&&rem:临时文件方式适合超多的数据
)
for /l %%i in (0,1,255)do for /l %%j in (0,1,255)do for /l %%k in (0,1,255)do for /l %%l in (0,1,255)do ( if defined #%%i.%%j.%%k.%%l echo,!#%%i.%%j.%%k.%%l!&&rem 变量方式判断适合较少的数据  
if exist “%%i.%%j.%%k.%%l” type “%%i.%%j.%%k.%%l&&del/q “%%i.%%j.%%k.%%l"&&rem 临时文件方式适合超多的数据
)
这么好的论坛你上哪找,运行测试环境为6.1.7601-64
注:请遵守互联网信息安全,勿用于非法用途

TOP

使用perl,没有的在这里下载Perl
只需其中的perl-mini.exe和perl518.dll两个文件,将perl-mini.exe改名为perl.exe
把楼主的那些一对对的IP保存为ip.txt,然后在命令行窗口运行以下命令:
  1. perl -ne "($start,$end)=map eval,split;for($ip=$start;$ip le $end;$ip=pack q/N/,1+unpack q/N/,$ip){printf qq/%vd\n/,$ip}" ip.txt
复制代码
(注意:如果保存在.cmd/.bat中运行需要将%替换成%%)

TOP

多谢各位的热心回答。感谢
回复 6# tigerpower
回复 5# /zhqsystem/zhq
回复 4# zaqmlp
回复 3# codegay

TOP

回复 4# zaqmlp


    这个批处理,怎么修改为读取txt然后再处理啊?

TOP

返回列表