csv.go 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  1. package lib
  2. import (
  3. "encoding/csv"
  4. "errors"
  5. "log"
  6. "os"
  7. "strconv"
  8. )
  9. type TaskList struct {
  10. TcpPort int //服务端与客户端通信端口
  11. Mode string //启动方式
  12. Target string //目标
  13. VerifyKey string //flag
  14. U string //socks5验证用户名
  15. P string //socks5验证密码
  16. Compress string //压缩方式
  17. Start int //是否开启
  18. IsRun int //是否在运行
  19. ClientStatus int //客户端状态
  20. }
  21. type HostList struct {
  22. Vkey string //服务端与客户端通信端口
  23. Host string //启动方式
  24. Target string //目标
  25. }
  26. func NewCsv(path string, bridge *Tunnel, runList map[string]interface{}) *Csv {
  27. c := new(Csv)
  28. c.Path = path
  29. c.Bridge = bridge
  30. c.RunList = runList
  31. return c
  32. }
  33. type Csv struct {
  34. Tasks []*TaskList
  35. Path string
  36. Bridge *Tunnel
  37. RunList map[string]interface{}
  38. Hosts []*HostList //域名列表
  39. }
  40. func (s *Csv) Init() {
  41. s.LoadTaskFromCsv()
  42. s.LoadHostFromCsv()
  43. }
  44. func (s *Csv) StoreTasksToCsv() {
  45. // 创建文件
  46. csvFile, err := os.Create(s.Path + "tasks.csv")
  47. if err != nil {
  48. log.Fatalf(err.Error())
  49. }
  50. defer csvFile.Close()
  51. writer := csv.NewWriter(csvFile)
  52. for _, task := range s.Tasks {
  53. record := []string{
  54. strconv.Itoa(task.TcpPort),
  55. task.Mode,
  56. task.Target,
  57. task.VerifyKey,
  58. task.U,
  59. task.P,
  60. task.Compress,
  61. strconv.Itoa(task.Start),
  62. }
  63. err := writer.Write(record)
  64. if err != nil {
  65. log.Fatalf(err.Error())
  66. }
  67. }
  68. writer.Flush()
  69. }
  70. func (s *Csv) LoadTaskFromCsv() {
  71. // 打开文件
  72. file, err := os.Open(s.Path + "tasks.csv")
  73. if err != nil {
  74. panic(err)
  75. }
  76. defer file.Close()
  77. // 获取csv的reader
  78. reader := csv.NewReader(file)
  79. // 设置FieldsPerRecord为-1
  80. reader.FieldsPerRecord = -1
  81. // 读取文件中所有行保存到slice中
  82. records, err := reader.ReadAll()
  83. if err != nil {
  84. panic(err)
  85. }
  86. var tasks []*TaskList
  87. // 将每一行数据保存到内存slice中
  88. for _, item := range records {
  89. tcpPort, _ := strconv.Atoi(item[0])
  90. Start, _ := strconv.Atoi(item[7])
  91. post := &TaskList{
  92. TcpPort: tcpPort,
  93. Mode: item[1],
  94. Target: item[2],
  95. VerifyKey: item[3],
  96. U: item[4],
  97. P: item[5],
  98. Compress: item[6],
  99. Start: Start,
  100. }
  101. tasks = append(tasks, post)
  102. }
  103. s.Tasks = tasks
  104. }
  105. func (s *Csv) StoreHostToCsv() {
  106. // 创建文件
  107. csvFile, err := os.Create(s.Path + "hosts.csv")
  108. if err != nil {
  109. panic(err)
  110. }
  111. defer csvFile.Close()
  112. // 获取csv的Writer
  113. writer := csv.NewWriter(csvFile)
  114. // 将map中的Post转换成slice,因为csv的Write需要slice参数
  115. // 并写入csv文件
  116. for _, host := range s.Hosts {
  117. record := []string{
  118. host.Host,
  119. host.Target,
  120. host.Vkey,
  121. }
  122. err1 := writer.Write(record)
  123. if err1 != nil {
  124. panic(err1)
  125. }
  126. }
  127. // 确保所有内存数据刷到csv文件
  128. writer.Flush()
  129. }
  130. func (s *Csv) LoadHostFromCsv() {
  131. // 打开文件
  132. file, err := os.Open(s.Path + "hosts.csv")
  133. if err != nil {
  134. panic(err)
  135. }
  136. defer file.Close()
  137. // 获取csv的reader
  138. reader := csv.NewReader(file)
  139. // 设置FieldsPerRecord为-1
  140. reader.FieldsPerRecord = -1
  141. // 读取文件中所有行保存到slice中
  142. records, err := reader.ReadAll()
  143. if err != nil {
  144. panic(err)
  145. }
  146. var hosts []*HostList
  147. // 将每一行数据保存到内存slice中
  148. for _, item := range records {
  149. post := &HostList{
  150. Vkey: item[2],
  151. Host: item[0],
  152. Target: item[1],
  153. }
  154. hosts = append(hosts, post)
  155. }
  156. s.Hosts = hosts
  157. }
  158. func (s *Csv) GetTaskList(start, length int, typeVal string) ([]*TaskList, int) {
  159. list := make([]*TaskList, 0)
  160. var cnt int
  161. for _, v := range s.Tasks {
  162. if v.Mode != typeVal {
  163. continue
  164. }
  165. cnt++
  166. if start--; start < 0 {
  167. if length--; length > 0 {
  168. if _, ok := s.RunList[v.VerifyKey]; ok {
  169. v.IsRun = 1
  170. } else {
  171. v.IsRun = 0
  172. }
  173. if s, ok := s.Bridge.signalList[getverifyval(v.VerifyKey)]; ok {
  174. if s.Len() > 0 {
  175. v.ClientStatus = 1
  176. } else {
  177. v.ClientStatus = 0
  178. }
  179. } else {
  180. v.ClientStatus = 0
  181. }
  182. list = append(list, v)
  183. }
  184. }
  185. }
  186. return list, cnt
  187. }
  188. func (s *Csv) NewTask(t *TaskList) {
  189. s.Tasks = append(s.Tasks, t)
  190. s.StoreTasksToCsv()
  191. }
  192. func (s *Csv) UpdateTask(t *TaskList) error {
  193. for k, v := range s.Tasks {
  194. if v.VerifyKey == t.VerifyKey {
  195. s.Tasks = append(s.Tasks[:k], s.Tasks[k+1:]...)
  196. s.Tasks = append(s.Tasks, t)
  197. s.StoreTasksToCsv()
  198. return nil
  199. }
  200. }
  201. //TODO:待测试
  202. return errors.New("不存在")
  203. }
  204. func (s *Csv) AddRunList(vKey string, svr interface{}) {
  205. s.RunList[vKey] = svr
  206. }
  207. func (s *Csv) DelRunList(vKey string) {
  208. delete(s.RunList, vKey)
  209. }
  210. func (s *Csv) DelTask(vKey string) error {
  211. for k, v := range s.Tasks {
  212. if v.VerifyKey == vKey {
  213. s.Tasks = append(s.Tasks[:k], s.Tasks[k+1:]...)
  214. s.StoreTasksToCsv()
  215. return nil
  216. }
  217. }
  218. return errors.New("不存在")
  219. }
  220. func (s *Csv) GetTask(vKey string) (v *TaskList, err error) {
  221. for _, v = range s.Tasks {
  222. if v.VerifyKey == vKey {
  223. return
  224. }
  225. }
  226. err = errors.New("未找到")
  227. return
  228. }
  229. func (s *Csv) DelHost(host string) error {
  230. for k, v := range s.Hosts {
  231. if v.Host == host {
  232. s.Hosts = append(s.Hosts[:k], s.Hosts[k+1:]...)
  233. s.StoreHostToCsv()
  234. return nil
  235. }
  236. }
  237. return errors.New("不存在")
  238. }
  239. func (s *Csv) NewHost(t *HostList) {
  240. s.Hosts = append(s.Hosts, t)
  241. s.StoreHostToCsv()
  242. }
  243. func (s *Csv) GetHostList(start, length int, vKey string) ([]*HostList, int) {
  244. list := make([]*HostList, 0)
  245. var cnt int
  246. for _, v := range s.Hosts {
  247. if v.Vkey == vKey {
  248. cnt++
  249. if start--; start < 0 {
  250. if length--; length > 0 {
  251. list = append(list, v)
  252. }
  253. }
  254. }
  255. }
  256. return list, cnt
  257. }