本文目录一览:
- 1、我想使用python写一个循环执行terminal下面的命令,比如我现在要ping 192.168.1.1,我要循环ping 3次
- 2、用python篡改icmp报文再发送给接收方
- 3、请大牛指教python问题。通过pip方式下载了个ping.py(改名为:ping_pip.py)代码,测试的时候遇到问题。
我想使用python写一个循环执行terminal下面的命令,比如我现在要ping 192.168.1.1,我要循环ping 3次
import os
os.system('ping -c 3 10.34.40.22')
PING 10.34.40.22 (10.34.40.22) 56(84) bytes of data.
64 bytes from 10.34.40.22: icmp_seq=1 ttl=64 time=0.501 ms
64 bytes from 10.34.40.22: icmp_seq=2 ttl=64 time=0.289 ms
64 bytes from 10.34.40.22: icmp_seq=3 ttl=64 time=0.277 ms
--- 10.34.40.22 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.277/0.355/0.501/0.105 ms
非常简单的,哈哈
用python篡改icmp报文再发送给接收方
程序处理上有些问题,建议深入研究一下ICMP协议。下面是Python 3的一个ICMP的简单实现,可以参考一下。
import socket
import struct
def checksum(source_string):
sum = 0
countTo = (len(source_string)/2)*2
count = 0
while countcountTo:
thisVal = ord(source_string[count + 1:count + 2])*256 + ord(source_string[count:count + 1])
sum = sum + thisVal
sum = sum 0xffffffff
count = count + 2
if countTolen(source_string):
sum = sum + ord(source_string[len(source_string) - 1])
sum = sum 0xffffffff
sum = (sum 16) + (sum 0xffff)
sum = sum + (sum 16)
answer = ~sum
answer = answer 0xffff
answer = answer 8 | (answer 8 0xff00)
return answer
def ping(ip):
rawsocket1=socket.socket(socket.AF_INET,socket.SOCK_RAW, socket.getprotobyname('icmp'))
packet = struct.pack('!BBHHH8s', 8, 0, 0, 0, 0, b'abcdefgh')
chksum=checksum(packet)
packet = struct.pack('!BBHHH8s', 8, 0, chksum, 0, 0, b'abcdefgh')
rawsocket1.sendto(packet, (ip, 1))
ping('10.172.23.254')
请大牛指教python问题。通过pip方式下载了个ping.py(改名为:ping_pip.py)代码,测试的时候遇到问题。
别快速的ping很多的地址。 有可能防火墙会拦截, 也有可能是文件句柄数超过了操作系统的限制。
如果出错了。你忽略它,然后重试一次。应该可以解决这个问题。