【发布时间】:2018-04-28 15:08:37
【问题描述】:
总结一下我的问题:
我有两个问题:
- 我无法发送 IP_PACKET 变量
- 如何在 IP 数据包中设置标志? (用于发送)
这是我的代码:
#! /usr/bin/python
import socket
import struct
import sys
def Create_SOCKET():
global ST
try:
ST = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_RAW)
except socket.error as MSG:
print "[ERROR] Socket creation error:\n", MSG
sys.exit()
def IP_HEADER(Source_IP, Destination_IP):
global IP_PACKET
#Variable validation
IP_VER = 4
IP_IHL = 5
IP_TOS = 0
IP_TOL = 60
IP_IDT = 54331
IP_FLG = 2 # 0x02 DF
IP_FOS = 0
IP_TTL = 64
IP_PROTO = socket.IPPROTO_TCP
IP_CHECKSUM = 0
IP_IHL_VER = (IP_VER << 4) + IP_IHL
SRC_IP = socket.inet_aton(Source_IP)
DST_IP = socket.inet_aton(Destination_IP)
IP_PACKET = struct.pack("!BBHHHBBH4s4s", IP_IHL_VER, IP_TOS, IP_TOL, IP_IDT, IP_FOS, IP_TTL, IP_PROTO, IP_CHECKSUM, SRC_IP, DST_IP)
def Send_PACKET(IFACE):
try:
Create_SOCKET()
ST.bind((IFACE, 0))
ST.send(IP_PACKET)
print "[SUCESS] Packet was sent."
except socket.error as MSG:
print "[ERROR] Packet can't send:\n", MSG
sys.exit()
IP_HEADER(sys.argv[1], sys.argv[2])
Send_PACKET(sys.argv[3])
Python 版本:2.7
操作系统:Ubuntu 16.04
谢谢你帮助我。
【问题讨论】:
-
你的函数 Send_PACKET 存在于你的另一个函数 IP_HEADER() 的范围内 - 你不能从外部调用它,只能从 IP_HEADER() 内部调用。
-
另外:如果您遇到错误,请将错误消息逐字(逐字)复制并粘贴到您的问题中。除非您需要传达布局错误,否则请避免使用屏幕截图。 - 它包含的信息可以让我们在阅读所有代码的情况下使这一事实变得显而易见。谢谢。
标签: python python-2.7 ip raw-sockets