#!/bin/bash

# 目标IP
out_ip='127.0.0.1'
# 目标端口
out_port='6975'
# 间隔时间(s)
out_sleep='10'
# 注册
str0100='7E 01 00 40 54 01 00 00 00 00 01 89 98 77 41 23 00 01 00 01 00 01 30 30 30 30 30 30 30 30 30 30 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 31 38 37 37 34 31 32 33 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 D3 E5 54 45 53 54 30 33 0D 7E'
# 鉴权
str0102='7E 01 02 40 34 01 00 00 00 00 01 89 98 77 41 23 00 00 10 65 39 37 63 35 31 66 38 37 35 38 61 38 36 38 33 31 30 30 30 30 30 30 30 30 30 30 30 30 30 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5F 7E'
# 消息ID、属性
strA="02 00 40 25 01"
# 终端手机号18998774123
strB="00 00 00 00 01 89 98 77 41 23"
# 流水
strC="00 00"
# 报警
strD="00 00 00 00"
# 状态
strE="00 0C 00 23"
# 纬度
strF="01 C3 37 00"
# 经度
strG="06 5A 59 85"
# 高程、速度、方向
strH="00 1E 01 F4 00 32"
# 里程、卫星
strJ="01 04 00 00 01 36 31 01 1E"
# 封装定位数据
strAll()
{
  # 时间 
  strI=`date "+%g %m %d %H %M %S"`
  # 组合
  strX="$strA $strB $strC $strD $strE $strF $strG $strH $strI $strJ"
  # 计算异或
  xor_result=0
  for xor in $strX; do
    xorI=`printf "%d" "0x$xor"`
    xor_result=$((xor_result ^ $xorI))
  done
  # 异或转16进制
  hex=$(printf "%X" $xor_result | tr 'a-z' 'A-Z')
  # 完整数据
  strY="7E $strX $hex 7E"
}
# 新建TCP终端
exec 8<>/dev/tcp/$out_ip/$out_port
# 发送注册
echo -e "$str0100"| xxd -r -p >&8
echo `date "+[%G-%m-%d %H:%M:%S]"` $str0100
sleep 2
# 发送鉴权
echo -e "$str0102"| xxd -r -p >&8
echo `date "+[%G-%m-%d %H:%M:%S]"` $str0102
sleep 2
# 循环发送定位
linkSum=$(netstat -nat | grep "tcp .*. $out_ip:$out_port .*.ESTABLISHED" | wc -l)
while [ "$linkSum" -ge "1" ]
do
  strAll
  echo -e "$strY"| xxd -r -p >&8
  echo `date "+[%G-%m-%d %H:%M:%S]"` $strY
  sleep $out_sleep
  linkSum=$(netstat -nat | grep "tcp .*. $out_ip:$out_port .*.ESTABLISHED" | wc -l)
done
echo '连接异常，已停止发送数据！'
