2017-12-29 35 views
1

ちょうどソケットプログラミングを始めて、私は以下のコードを作成し、いくつかのバイトデータを印刷することを期待しています。私のソケットプログラムは出力を出力しません

import socket 

def create_socket(): 
    s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.ntohl(3)) 

while True: 
    rdata, address = s.recvfrom(65535) 
    print(rdata) 

ただ座って何もしません。

どのような指示をいただければ幸いですか?

あなたは以下

はあなたがクライアントからメッセージを送信し、サーバによって変更された出力を受け取ることができますサンプルプログラムでデータを印刷する要求がクライアントによって送信することができますサーバーを持っている必要があり

答えて

0

SERVER.PY

from socket import * 
serverPort = 12048 
serverSocket = socket(AF_INET, SOCK_DGRAM) 
serverSocket.bind(('', serverPort)) 
print 'The server is ready to receive' 
while 1: 
    message,clientAddress = serverSocket.recvfrom(2048) 
    modifiedMessage = message.upper() 
    serverSocket.sendto(modifiedMessage, clientAddress) 

CLIENT.PY

from socket import * 
serverName = '127.0.0.1' 
serverPort = 12048 
clientSocket = socket(AF_INET,SOCK_DGRAM) 
message = raw_input('Input lowercase sentence:') 
clientSocket.sendto(message,(serverName, serverPort)) 
modifiedMessage, serverAddress =clientSocket.recvfrom(2048) 
print modifiedMessage 

OUTPUT

SIVABALANs-MBP:Desktop siva$ python client.py 
Input lowercase sentence:siva 
SIVA 
SIVABALANs-MBP:Desktop siva$ 

EDIT:

たぶん、あなたはこのコード

import socket 
import struct 
import binascii 

rawSocket = socket.socket(socket.AF_PACKET, 
          socket.SOCK_RAW, 
          socket.htons(0x0003)) 

while True: 

    packet = rawSocket.recvfrom(2048) 
    ethhdr = packet[0][0:14] 
    eth = struct.unpack("!6s6s2s", ethhdr) 

    arphdr = packet[0][14:42] 
    arp = struct.unpack("2s2s1s1s2s6s4s6s4s", arphdr) 
    # skip non-ARP packets 
    ethtype = eth[2] 
    if ethtype != '\x08\x06': continue 

    print "---------------- ETHERNET_FRAME ----------------" 
    print "Dest MAC:  ", binascii.hexlify(eth[0]) 
    print "Source MAC:  ", binascii.hexlify(eth[1]) 
    print "Type:   ", binascii.hexlify(ethtype) 
    print "----------------- ARP_HEADER -------------------" 
    print "Hardware type: ", binascii.hexlify(arp[0]) 
    print "Protocol type: ", binascii.hexlify(arp[1]) 
    print "Hardware size: ", binascii.hexlify(arp[2]) 
    print "Protocol size: ", binascii.hexlify(arp[3]) 
    print "Opcode:   ", binascii.hexlify(arp[4]) 
    print "Source MAC:  ", binascii.hexlify(arp[5]) 
    print "Source IP:  ", socket.inet_ntoa(arp[6]) 
    print "Dest MAC:  ", binascii.hexlify(arp[7]) 
    print "Dest IP:   ", socket.inet_ntoa(arp[8]) 
    print "------------------------------------------------\n" 

を試すことができますAF_PACKETはマックでは動作しませんように私は私のシステムでコードをテストすることができませんでした。試してみてください。

+0

貴重な情報ありがとうございますが、私はAF_PACKETを使って、1つのポートだけではなく、イーサネットレイヤに当たるすべてのものをキャプチャしようとしています。 –

+0

@VigneshSP新しいコードを試してみることができますか? – Siva

+0

なぜそれが動作していないのかわからない、私はこれについていくつかの宿題をしようとします。 –

関連する問題