#!/usr/bin/env python
import sys
import os
import socket
import string
# windows only
import msvcrt
if len(sys.argv) != 3:
print "usage: %s target_ip target_port" %(os.path.split(sys.argv[0])[1])
sys.exit(0)
try:
target_ip = socket.gethostbyname(sys.argv[1])
except:
print "unknown target_ip: %s" %(sys.argv[1])
sys.exit(0)
try:
target_port = int(sys.argv[2])
except:
print "target_port: %s error" %(sys.argv[2])
sys.exit(0)
if target_port <= 0:
print "target_port: %s error" %(sys.argv[2])
sys.exit(0)
output_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
output_socket.connect((target_ip,target_port))
except:
print 'connect error'
sys.exit(0)
output_socket.settimeout(0.5) # non-blocking
buf = ""
buf_output = ""
flag_timeout=0
while 1:
# socket
try:
buf = output_socket.recv(1024)
except socket.timeout:
flag_timeout=1
pass
except:
break
if flag_timeout != 1:
if len(buf) != 0:
buf_temp = ' '.join(map(lambda c: "%02X" %ord(c), buf))
print buf_temp
else:
print 'connection closed'
break
else:
flag_timeout=0
if msvcrt.kbhit(): # if a keypress is waiting to be read
buf = sys.stdin.readline()
if buf == '\x0A':
output_socket.send(buf_output)
continue
try:
buf_output = ""
buf_temp = buf.split()
for c in buf_temp:
buf_output += chr(string.atoi('0x'+c, 16))
output_socket.send(buf_output)
except:
print 'input format error'
output_socket.close()
sys.exit(0)
在windows下写就是费尽连个select都TMD不通用. 真**...... |