
Security Fundamentals
Turtles, Clams, and Cyber Threat Actors: Shell Usage
The Socket Threat Research Team uncovers how threat actors weaponize shell techniques across npm, PyPI, and Go ecosystems to maintain persistence and exfiltrate data.
Generic asynchronous i/o python utilities for AWS services (SQS, S3, DynamoDB, Secrets Manager), Redis, MSSQL (pyodbc), JIRA and more
Generic asynchronous i/o python utilities for AWS services (SQS, S3, DynamoDB, Secrets Manager), Redis, MSSQL (pyodbc), JIRA and more.
aioradio abstracts using aiobotocore and aioboto3 making async AWS funtion calls simple one liners. Besides what is shown below in the examples, there is also support for SQS, DynamoDB and Secrets Manager.
import asyncio
from aioradio.aws.s3 import (
create_bucket,
delete_s3_object,
download_file,
get_object,
list_s3_objects,
upload_file
)
async def main():
s3_bucket = 'aioradio'
s3_prefix = 'test'
filename = 'hello_world.txt'
s3_key = f'{s3_prefix}/{filename}'
# create an s3 bucket called aioradio
await create_bucket(bucket=s3_bucket)
# create hello_world.txt file
with open(filename, 'w') as file_handle:
file_handle.write('hello world of aioradio!')
# upload the file from s3 and confirm it now exists in s3
await upload_file(bucket=s3_bucket, filepath=filename, s3_key=s3_key)
assert s3_key in await list_s3_objects(bucket=s3_bucket, s3_prefix=s3_prefix)
# test downloading the file
await download_file(bucket=s3_bucket, filepath=filename, s3_key=s3_key)
# test getting file data to object
result = await get_object(bucket=s3_bucket, s3_key=s3_key)
assert result == b'hello world of aioradio!'
# delete the file from s3
await delete_s3_object(bucket=s3_bucket, s3_prefix=s3_key)
assert s3_key not in await list_s3_objects(bucket=s3_bucket, s3_prefix=s3_prefix)
asyncio.get_event_loop().run_until_complete(main())
aioredis uses the pyodbc library to work with ODBC databases. It currently has support for connecting and sending queries to mssql.
import asyncio
from aioradio.pyodbc import establish_pyodbc_connection
from aioradio.pyodbc import pyodbc_query_fetchone
from aioradio.pyodbc import pyodbc_query_fetchall
def main():
conn = establish_pyodbc_connection(host='your-host', user='your-user', pwd='your-password')
query = "SELECT homeruns FROM MLB.dbo.LosAngelesAngels WHERE lastname = 'Trout' AND year = '2020'"
row = pyodbc_query_fetchone(conn=conn, query=query)
print(row)
query = "SELECT homeruns FROM MLB.dbo.LosAngelesAngels WHERE lastname = 'Trout'"
rows = pyodbc_query_fetchall(conn=conn, query=query)
print(rows)
asyncio.get_event_loop().run_until_complete(main())
Jira uses the async library httpx behind the scene to send http requests.
import asyncio
from aioradio.jira import add_comment_to_jira
from aioradio.jira import get_jira_issue
from aioradio.jira import post_jira_issue
async def main():
# create a jira ticket
url = 'https://aioradio.atlassian.net/rest/api/2/issue/'
payload = {
"fields": {
"project": {"key": "aioradio"},
"issuetype": {"name": "Task"},
"reporter": {"accountId": "somebodies-account-id"},
"priority": {"name": "Medium"},
"summary": "Aioradio rocks!",
"description": "Aioradio Review",
"labels": ["aioradio"],
"assignee": {"accountId": "somebodies-account-id"}
}
}
resp = await post_jira_issue(url=url, jira_user='your-user', jira_token='your-password', payload=payload)
jira_id = resp.json()['key']
# get jira ticket info
resp = await get_jira_issue(url=f'{url}/{jira_id}', jira_user='your-user', jira_token='your-password')
# add comment to jira ticket
comment = 'aioradio rocks!'
response = await add_comment_to_jira(url=url, jira_user='your-user', jira_token='your-password', comment=comment)
asyncio.get_event_loop().run_until_complete(main())
Install python 3.12.X
Make sure you've installed ODBC drivers, required for using the python package pyodbc.
Clone aioradio locally and navigate to the root directory
Install and activate python VirtualEnv
python3.12 -m venv env
source env/bin/activate
Install python modules included in requirements.txt
pip install cython
pip install -r aioradio/requirements.txt
Run Makefile command from the root directory to test all is good before issuing push to master
make all
See also the list of contributors who participated in this project.
FAQs
Generic asynchronous i/o python utilities for AWS services (SQS, S3, DynamoDB, Secrets Manager), Redis, MSSQL (pyodbc), JIRA and more
We found that aioradio demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security Fundamentals
The Socket Threat Research Team uncovers how threat actors weaponize shell techniques across npm, PyPI, and Go ecosystems to maintain persistence and exfiltrate data.
Security News
At VulnCon 2025, NIST scrapped its NVD consortium plans, admitted it can't keep up with CVEs, and outlined automation efforts amid a mounting backlog.
Product
We redesigned our GitHub PR comments to deliver clear, actionable security insights without adding noise to your workflow.