отправить исходный пакет ip в Python ошибка - PullRequest
0 голосов
/ 29 апреля 2018

Почему я не могу отправить пакет?

Я хочу отправить необработанный IP-пакет

Использование: python ip.py {Source-IP} {Destination-IP} {IFACE}

Вот мой код:

#! /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])

Это вывод:

Traceback (most recent call last):
  File "ip.py", line 52, in <module>
    Send_PACKET(sys.argv[3])
  File "ip.py", line 43, in Send_PACKET
    ST.bind((IFACE, 0))
  File "/usr/lib/python2.7/socket.py", line 228, in meth
    return getattr(self._sock,name)(*args)
socket.gaierror: [Errno -2] Name or service not known

Как это исправить?

Я думаю, что эта ошибка связана с портом функции привязки.

Я могу отправить его с этим фортом:

ST.sendto(IP_PACKET, ("192.168.1.100", 0))

Почему я не могу использовать функцию send ()?

Спасибо за вашу помощь //

...