├── .idea ├── PacketSender.iml ├── codeStyles │ └── codeStyleConfig.xml ├── encodings.xml ├── misc.xml ├── modules.xml └── vcs.xml ├── README.md └── packet_sender ├── main.py ├── sender.py ├── tcp_sender.py └── udp_sender.py /.idea/PacketSender.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 11 | -------------------------------------------------------------------------------- /.idea/codeStyles/codeStyleConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PacketSender 2 | 3 | TCP及UDP的发包程序 4 | 5 | 可以使用`python main.py -h`查看使用手册 6 | -------------------------------------------------------------------------------- /packet_sender/main.py: -------------------------------------------------------------------------------- 1 | from sender import Sender 2 | import argparse 3 | import sys 4 | 5 | 6 | def get_args(): 7 | 8 | parser = argparse.ArgumentParser(description='Packet sender.') 9 | parser.add_argument('type', help='type: tcp or udp') 10 | parser.add_argument('dst_ip', help='ip address of destination') 11 | parser.add_argument('--sport', metavar='src_port', type=int, help='port of source') 12 | parser.add_argument('--dport', metavar='dst_port', type=int, help='port of destination') 13 | parser.add_argument('--plen', metavar='length', type=int, help='length of packet (bytes)') 14 | 15 | return parser.parse_args() 16 | 17 | 18 | def main(): 19 | args = get_args() 20 | sender = Sender(type=args.type, 21 | dst_ip=args.dst_ip, 22 | dst_port=args.dport, 23 | src_port=args.sport, 24 | length=args.plen or 1) 25 | sender.send_data() 26 | 27 | 28 | if __name__ == '__main__': 29 | sys.exit(main()) 30 | -------------------------------------------------------------------------------- /packet_sender/sender.py: -------------------------------------------------------------------------------- 1 | from tcp_sender import TcpSender 2 | from udp_sender import UdpSender 3 | 4 | 5 | class Sender(object): 6 | 7 | def __init__(self, type, dst_ip, dst_port=None, src_port=None, length=1): 8 | self.type = type 9 | self.dst_ip = dst_ip 10 | self.dst_port =dst_port 11 | self.src_port = src_port 12 | self.len = length 13 | 14 | def send_data(self): 15 | if self.type.lower() == 'tcp': 16 | tcp_sender = TcpSender(dst_ip=self.dst_ip, 17 | dst_port=self.dst_port, 18 | src_port=self.src_port, 19 | length=self.len) 20 | tcp_sender.send_tcp() 21 | elif self.type.lower() == 'udp': 22 | udp_sender = UdpSender(dst_ip=self.dst_ip, 23 | dst_port = self.dst_port, 24 | src_port=self.src_port, 25 | length=self.len) 26 | udp_sender.send_udp() 27 | else: 28 | raise Exception('TYPE ERROR!') 29 | -------------------------------------------------------------------------------- /packet_sender/tcp_sender.py: -------------------------------------------------------------------------------- 1 | import socket 2 | 3 | 4 | BYTE_SIZE = b'a' 5 | 6 | 7 | class TcpSender(object): 8 | 9 | def __init__(self, dst_ip, dst_port=None, src_port=None, length=1): 10 | # Information of targets 11 | 12 | self.dst_ip = dst_ip 13 | self.dst_port = dst_port 14 | self.src_port = src_port 15 | self.tcp_data = BYTE_SIZE * length 16 | 17 | def send_tcp(self): 18 | # Send tcp message. 19 | if self.dst_port: 20 | while True: 21 | tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 22 | try: 23 | if self.src_port: 24 | tcp_socket.bind(('', self.src_port)) 25 | tcp_socket.connect((self.dst_ip, self.dst_port)) 26 | except: 27 | pass 28 | else: 29 | tcp_socket.send(self.tcp_data) 30 | tcp_socket.close() 31 | 32 | else: 33 | dst_port = 1 34 | while True: 35 | if dst_port == 65536: 36 | dst_port = 1 37 | tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 38 | try: 39 | if self.src_port: 40 | tcp_socket.bind(('', self.src_port)) 41 | tcp_socket.connect((self.dst_ip, dst_port)) 42 | dst_port += 1 43 | except: 44 | pass 45 | else: 46 | tcp_socket.send(self.tcp_data) 47 | tcp_socket.close() 48 | -------------------------------------------------------------------------------- /packet_sender/udp_sender.py: -------------------------------------------------------------------------------- 1 | import socket 2 | 3 | 4 | BYTE_SIZE = b'a' 5 | 6 | 7 | class UdpSender(object): 8 | 9 | def __init__(self, dst_ip, dst_port=None, src_port=None, length=1): 10 | # Information of targets 11 | 12 | self.dst_ip = dst_ip 13 | self.dst_port = dst_port 14 | self.src_port = src_port 15 | self.udp_data = BYTE_SIZE * length 16 | 17 | def send_udp(self): 18 | # Send udp message 19 | udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 20 | if self.src_port: 21 | udp_socket.bind(('', self.src_port)) 22 | 23 | if self.dst_port: 24 | while True: 25 | udp_socket.sendto(self.udp_data, (self.dst_ip, self.dst_port)) 26 | else: 27 | while True: 28 | dst_port = 1 29 | if dst_port == 65536: 30 | dst_port = 1 31 | udp_socket.sendto(self.udp_data, (self.dst_ip, dst_port)) 32 | dst_port += 1 33 | --------------------------------------------------------------------------------