# 需要导入模块: import socket [as 别名]

# 或者: from socket import TCP_MAXSEG [as 别名]

def handle_tcp_state_tosock(self, ip):

tcp = ip.data

global tun, input

log.debug("=== NAT64 TCP sock-send: %d %s."%(tcp.flags, self.sock))

if self.sock is None:

log.warning("Socket already closed.")

return

if tcp.flags & dpkt.tcp.TH_SYN > 0:

# Use Window size to control max segment?

self.sock.setsockopt(socket.SOL_TCP, socket.TCP_MAXSEG, 1000)

log.debug("Maxseg: %d" % self.sock.getsockopt(socket.SOL_TCP, socket.TCP_MAXSEG))

self.ack = tcp.seq + 1

# We are established...

self.state = TCP_ESTABLISHED

self.window = tcp.win

# Get the MSS of the options

opts = dpkt.tcp.parse_opts(tcp.opts)

for k, v in opts:

if k == dpkt.tcp.TCP_OPT_MSS:

print("MSS:", v)

self.mss, = struct.unpack("!H", v)

print("MSS:", self.mss)

log.debug("TCP State: %d SYN received." % self.mss)

self.tcp_reply(ip, dpkt.tcp.TH_SYN | dpkt.tcp.TH_ACK)

print("IP:", repr(ip))

send_to_tun(bytes(ip))

# sock.send(ip.load)

elif tcp.flags & dpkt.tcp.TH_FIN:

self.state = TCP_FIN_CLOSE_WAIT

self.ack = tcp.seq + 1

self.timeout = time.time()

log.debug("TCP: FIN received - sending FIN. %s" % self)

self.tcp_reply(ip, dpkt.tcp.TH_FIN | dpkt.tcp.TH_ACK)

print("IP:", repr(ip))

send_to_tun(bytes(ip))

# Clean out this socket?

elif tcp.flags & dpkt.tcp.TH_ACK:

if self.state == TCP_ESTABLISHED:

if len(tcp.data) == 0:

log.debug("ESTABLISHED or ACK from other side. seq: %d ack: %d" % (tcp.seq, tcp.ack))

self.seq = tcp.ack

else:

# ACK immediately - we assume that we get data from other side soon...

log.debug("TCP: received %d seq: %d ack%d ." % (len(tcp.data), tcp.seq, tcp.ack))

self.ack = tcp.seq + len(tcp.data)

# We should also handle the sanity checks for the ACK

self.seq = tcp.ack

self.tcp_reply(ip, dpkt.tcp.TH_ACK)

print("IP:", repr(ip))

send_to_tun(bytes(ip))

add_socket(self.sock)

if len(tcp.data) > 0:

self.sock.send(tcp.data)

# Remove the state for this specific socket

python socket tcp实战_Python socket.TCP_MAXSEG属性代码示例相关推荐

  1. python modifysetup什么意思_Python pyinotify.IN_MODIFY属性代码示例

    本文整理汇总了Python中pyinotify.IN_MODIFY属性的典型用法代码示例.如果您正苦于以下问题:Python pyinotify.IN_MODIFY属性的具体用法?Python pyi ...

  2. python tkinter insert函数_Python tkinter.INSERT属性代码示例

    本文整理汇总了Python中tkinter.INSERT属性的典型用法代码示例.如果您正苦于以下问题:Python tkinter.INSERT属性的具体用法?Python tkinter.INSER ...

  3. python socket tcp实战_python socket 实战

    server.py import socket,threading def tcplink(sock, addr): print('Accept new connection from %s:%s.. ...

  4. python中type(12.34)_Python typing.TYPE_CHECKING属性代码示例

    本文整理汇总了Python中typing.TYPE_CHECKING属性的典型用法代码示例.如果您正苦于以下问题:Python typing.TYPE_CHECKING属性的具体用法?Python t ...

  5. python连接redis哨兵_Python redis.sentinel方法代码示例

    本文整理汇总了Python中redis.sentinel方法的典型用法代码示例.如果您正苦于以下问题:Python redis.sentinel方法的具体用法?Python redis.sentine ...

  6. python程序异常实例_Python werkzeug.exceptions方法代码示例

    本文整理汇总了Python中werkzeug.exceptions方法的典型用法代码示例.如果您正苦于以下问题:Python werkzeug.exceptions方法的具体用法?Python wer ...

  7. python列表get方法_Python json.get方法代码示例

    本文整理汇总了Python中json.get方法的典型用法代码示例.如果您正苦于以下问题:Python json.get方法的具体用法?Python json.get怎么用?Python json.g ...

  8. python re 简单实例_Python re.search方法代码示例

    本文整理汇总了Python中re.search方法的典型用法代码示例.如果您正苦于以下问题:Python re.search方法的具体用法?Python re.search怎么用?Python re. ...

  9. python中config命令_Python config.config方法代码示例

    本文整理汇总了Python中config.config方法的典型用法代码示例.如果您正苦于以下问题:Python config.config方法的具体用法?Python config.config怎么 ...

最新文章

  1. 各大浏览器 CSS3 和 HTML5 兼容速查表
  2. 【每日一算法】相同的树
  3. 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级
  4. mysql 不同分区 同时insert_一文看懂mysql数据库分区表概念、类型、适用场景、优缺点及原理...
  5. 【SSH】——Struts2中的动态方法调用(一)
  6. TIOBE 7 月编程语言榜:TypeScript 进入前 50 名
  7. C++ 常用算数生成算法
  8. 220v转5v阻容降压电路
  9. 广度优先搜索——字串变换(洛谷 P1032)
  10. 你还不会小程序啊?手把手带你做第一个和服务器交互的小程序
  11. 2017-2018-2 1723《程序设计与数据结构》第八周作业 实验二 第一周结对编程 总结...
  12. 这几条Mac技巧可能在你使用mac时锦上添花
  13. 免费下载百度文库 道客巴巴 豆丁 等付费文档
  14. mysql中数据处理小技巧
  15. lightning接口linux驱动,iPhone 8惊喜曝光:Lightning接口换USB Type-C
  16. 小型气象站种类有哪些
  17. 计算6+德州扑克各个牌型的概率
  18. 詹姆斯高斯林_詹姆斯·高斯林(James Gosling)加入RCDb顾问委员会
  19. 变色龙哈希函数-区块链
  20. TrajGRU降雨量预测: 一个基准和一个新的模型

热门文章

  1. matlab2c使用c++实现matlab函数系列教程-rank函数
  2. 简单区分NMOS和PMOS的方法
  3. 纯小白成功安装交叉编译工具arm-none-eabi-gcc
  4. 爬虫之requests库的使用
  5. 【彻底解决】django migrate (mysql.W002) 【专治强迫症】
  6. 在阿里云上遇见更好的Oracle(三)
  7. 第一个ExtJS练习(添加用户面板)
  8. [转] Java内部类详解
  9. Git——版本管理工具(一)
  10. !DOCTYPE标签的定义与用法