Python学习——小工具ping的制作

一、Ping原理

Ping过程是使用ICMP包,主机向目标机发送一个ICMP包,目标机收到后,调换原地址和目标地址,再发送回来。

如果PING通,就表示发送机和接受机在网络上是可以连通的。

二、涉及的知识

1、SCAPY:

scapy是python中一个可用于网络嗅探的非常强大的第三方库,可以用它来做 packet 嗅探和伪造 packet。 scapy已经在内部实现了大量的网络协议。如DNS、ARP、IP、TCP、UDP等等,可以用它来编写非常灵活实用的工具。

1、发送方式

send()    在第三层发送数据包,但没有接收功能
sendp()   在第二层发送数据包,但没有接收功能
sr()      在第三层发送数据包,有接收功能
sr1()     在第三层发送数据包,有接收功能,但只接收第一个包

2、常见的构造形式

SYN扫描
	sr1(IP(dst="61.135.169.105")/TCP(dport=80,flags="S"))

TCP
        sr1(IP(dst="1.1.1.1")/TCP(dport=80,flags='A') ,timeout=1)) 

端口扫描

        sr1(IP(dst="1.1.1.1")/UDP(dport=53),timeout=1,verbose=1)
        sr1(IP(dst="192.168.60.3")/TCP(dport=80),timeout=1,verbose=1)

2、调用系统命令函数

os.system("cmd")

3、sys.argv用法

sys.argv变量是一个字符串的列表。

当我们执行"python using_sys.py a b c "的时候,后面跟着的内容被作为参数传递给程序,Python为我们把它存储在sys.argv变量中。

'using_sys.py'是sys.argv[0]、'a'是sys.argv[1]、'b'是sys.argv[2]、'c'是sys.argv[3]。

sys.startswith() 是用来判断一个对象是以什么开头的

三、Ping程序

#!/usr/bin/python
import sys
import os
from scapy.all import *

def use():
        print("Usage :  ./Ping.py -i 192.168.1.2")
        print("Usage :  ./Ping.py -r 192.168.1.0 ")        
#判断后面参数     
if len(sys.argv) <= 1:
    use()
    sys.exit(0)
    
elif(sys.argv[1]=="-i"):
    sgement_ip=sys.argv[2]
    #分离出IP
    target = sgement_ip.split(".")[0] +"."+ sgement_ip.split(".")[1] +"." +sgement_ip.split(".")[2] +"."+sgement_ip.split(".")[3]
    #执行命令
    os.system('ping  %s'%(target))

elif(sys.argv[1]=="-r"):
    address = str(sys.argv[2])
    target = address.split(".")[0] + "."+ address.split(".")[1] +"." + address.split(".")[2] + "."
    #采用scapy发送ICMP包的方式
    for addr in range(0,254):
        answer=sr1(IP(dst=target+str(addr))/ICMP(),timeout=2,verbose=0)
        print("The %s %s is "%(target,str(addr)))
        print (answer)
    
else:
    assert False, "Unhandled Option"
    use()

四、看最后的结果

五、总结

每天都要学习新知识,每天都要进步。别在脱贫的年纪选择安逸!

这个小程序主要是为了了解sys.argv和SCAPY,程序还可以不断完善,不过一般做安全会用更好的工具。

猜你喜欢

转载自blog.csdn.net/xlsj228/article/details/90714628